인코더 MFT에 대한 입력으로 제공되는 절대 QP(양자화 매개 변수) 값의 맵을 저장합니다.
데이터 형식
비고
이 특성을 사용하면 앱이 비디오 프레임의 여러 부분에 대해 다른 QP(Quantization Parameter) 값을 지정하여 비디오 인코더 MFT에 힌트를 제공할 수 있습니다. 예를 들어 비디오 회의 앱은 비디오 프레임의 어떤 부분이 사용자의 얼굴을 표시하는지 알 수 있으며, 이 API를 사용하여 비디오 프레임의 해당 부분을 인코딩할 때 더 작은 QP 값을 사용하도록 인코더에 요청할 수 있습니다.
HEVC 표준으로 인코딩되는 1920x1080 해상도의 비디오를 가정하고 지원되는 절대 QP 블록 크기는 32x32입니다. 이러한 블록은 60x34입니다. 블록은 행 주 순서로 정렬됩니다. 다음 표에서는 이러한 절대 QP 맵의 레이아웃을 보여줍니다.
IMFAttributes::SetUnknown을 사용하여 절대 QP 값을 포함하는 IMFMediaBuffer를 연결합니다. IMFAttributes::GetUnknown을 사용하여 절대 QP 값이 포함된 IMFMediaBuffer를 검색합니다.
절대 QP 맵은 전체 프레임에 대해 한 번에 제공됩니다. 인코더가 여러 타일 또는 조각을 사용하는 경우 타일 수준 또는 조각 수준 인코딩은 이러한 타일 또는 조각 수준 인코딩을 수행하는 데 프레임 수준에서 외부에서 제공된 절대 QP 입력 맵을 사용합니다.
QP 값은 크로마 또는 루마 관점에서 분리되지 않습니다. QP 값은 Luma 및 Chroma Pixels에 균일하게 적용됩니다.
절대 QP 맵은 애플리케이션이 프레임의 각 영역에 대한 정확한 양자화 매개 변수를 완전히 제어하여 앱이 MFT에서 인코더의 내부 속도 제어를 재정의할 수 있도록 합니다. 이 기능은 그래픽 오버레이가 있는 라이브 스포츠 브로드캐스트 또는 그림 속 피드와 같은 동적 시나리오에서 중요하며, 프레임의 여러 영역이 한 순간에서 다음 순간으로 복잡성이 변경됩니다. 인코더의 자동 조정이 애플리케이션의 품질 요구 사항에 맞지 않을 때 델타 QP 맵에만 의존하면 아티팩트가 발생할 수 있습니다.
델타 QP와 절대 QP의 동시 사용은 지원되지 않습니다. 절대 QP 맵이 IMFSample에 연결된 경우 인코더 MFT에서 델타 QP 맵을 무시합니다.
MFCreateDXGISurfaceBuffer 를 사용하여 GPU 리소스를 IMFMediaBuffer로 래핑할 수 있습니다.
절대 QP 맵에 있는 각 요소의 데이터 형식은 CODECAPI_AVEncVideoInputDeltaQPSettings 속성으로 가져온 Blob에 전달된 InputQPSettings의 dataType 필드에 표시된 데이터 형식과 일치해야 합니다.
델타 QP 값을 제공하면 충돌할 수 있으며 AVEncCommonMeanBitRate 또는 CODECAPI_AVEncCommonMaxBitRate 같은 비트 전송률 속성에 재정의된 영향을 미칠 수 있습니다.
MFSampleExtension_VideoEncodeInputAbsoluteQPMap 지원하는 인코더 MFT도 CODECAPI_AVEncVideoInputDeltaQPSettings 지원해야 합니다.
예시
이 예제에서는 인코더 MFT에 대한 입력으로 제공되는 IMFSample 개체에 델타 QP 맵을 연결하는 방법을 보여 줍니다. deltaQPBuffer 입력 매개 변수는 델타 QP 맵을 나타냅니다. 미디어 버퍼에 데이터를 쓰는 방법에 대한 자세한 내용은 미디어 버퍼 작업을 참조하세요.
#include <mfapi.h>
#include <mfobjects.h>
#include <wil/com.h>
#include <wil/result_macros.h>
// Function to set absolute QP values contained within an IMFMediaBuffer to an input sample.
// The function returns a failure code if the operation fails.
HRESULT SetAbsoluteQPForInputSample(
_In_ IMFSample* inSample,
_In_ IMFMediaBuffer* absoluteQPBuffer // Input: IMFMediaBuffer contains absolute QP values
)
{
RETURN_HR_IF_NULL(E_INVALIDARG, absoluteQPBuffer);
RETURN_HR_IF_NULL(E_INVALIDARG, inSample);
// Retrieve the sample attributes
wil::com_ptr_nothrow<IMFAttributes> sampleAttributes;
RETURN_IF_FAILED(wil::com_query_to_nothrow(inSample, &sampleAttributes));
// Set the IMFMediaBuffer with the absolute QP map
return sampleAttributes->SetUnknown(MFSampleExtension_VideoEncodeInputAbsoluteQPMap, absoluteQPBuffer);
}
요구 사항
| 요구 사항 | 가치 |
|---|---|
| 지원되는 최소 클라이언트 | Windows 11, 빌드 26100 |
| 지원되는 최소 서버 | Windows Server 2025 |
| Header | mfapi.h |