인코더 MFT가 절대 QP 입력 값에 대해 지원하는 설정을 지정하는 읽기 전용 속성입니다.
데이터 형식
InputQPSettings (VT_BLOB)
속성 GUID
CODECAPI_AVEncVideoInputAbsoluteQPBlockSettings
속성 값
이 속성의 값은 InputQPSettings 구조체입니다 . 속성이 있는 경우 비디오 인코더 MFT는 InputQPSettings 구조에서 제공하는 설정을 준수하는 절대 QP 값 수신을 지원합니다. 속성이 누락된 경우 비디오 인코더 MFT는 절대 QP 값 수신을 지원하지 않습니다.
지원되는 경우 인코딩 프로세스의 양자화 단계에서 적용할 비디오 인코더 MFT에 대한 입력으로 절대 QP 값을 제공할 수 있습니다. MFSampleExtension_VideoEncodeInputAbsoluteQPMap 특성은 QP 값을 제공하는 데 사용됩니다.
비고
QP 맵의 각 요소는 N픽셀의 측면이 있는 픽셀의 정사각형 블록을 나타내며, NxN(블록 N2) 내에 포함된 총 픽셀 수를 만듭니다. 블록 크기는 제곱 블록의 한쪽에 있는 픽셀 수(즉, 값 N)로 지정됩니다. 이러한 블록의 크기는 루마 픽셀에 매핑됩니다.
ICodecAPI::IsSupported를 사용하여 인코더가 절대 QP 값 수신을 지원하는지 확인합니다.
ICodecAPI::GetValue를 사용하여 VT_BLOB 인터페이스를 사용하여 InputQPSettings 구조체 내에 표시되는 값을 가져옵니다. 이는 준비 전용 속성이므로 ICodecAPI::SetValue 를 호출해도 아무런 효과가 없습니다.
InputQPSettings 구조체의 minBlockSize 및 maxBlockSize 필드에는 동일한 값이 있을 수 있으며 이는 인코더가 단일 블록 크기만 지원함을 나타냅니다.
MxN 크기의 사각형 블록(예: 32x16)은 지원되지 않습니다.
절대 QP 값을 제공하면 충돌할 수 있으며 AVEncCommonMeanBitRate 또는 CODECAPI_AVEncCommonMaxBitRate 같은 비트 전송률 속성에 재정의된 영향을 미칠 수 있습니다.
예시
다음 예제에서는 CODECAPI_AVEncVideoInputAbsoluteQPSettings 속성을 사용하여 인코더 MFT가 절대 QP 맵 수신을 지원하는지 확인하는 방법을 보여 줍니다. 이 함수는 지원되는 최소 및 최대 블록 크기와 단계별 값을 출력합니다. 이 정보는 앱에서 절대 QP 맵에 적합한 블록 크기를 선택하는 데 사용할 수 있습니다.
#include <mfapi.h>
#include <codecapi.h>
#include <stdio.h>
#include <wil/resource.h>
#include <wil/result_macros.h>
// This function assumes that the encoder MFT supports ICodecAPI interface.
// It checks whether the property CODECAPI_AVEncVideoInputAbsoluteQPBlockSettings is supported.
HRESULT PrintEncoderAbsoluteQPMinMaxDataType(_In_ IMFTransform* encoder)
{
wil::com_ptr_nothrow<ICodecAPI> codecAPI;
RETURN_IF_FAILED(wil::com_query_to_nothrow(encoder, &codecAPI));
// Check if the encoder supports Absolute QP Block Settings reporting
if (!codecAPI->IsSupported(&CODECAPI_AVEncVideoInputAbsoluteQPBlockSettings))
{
printf("The encoder does not support receiving absolute QP maps.\n");
return S_OK;
}
// Retrieve the InputQPSettings blob via GetValue (VT_BLOB)
wil::unique_variant var;
RETURN_IF_FAILED(codecAPI->GetValue(&CODECAPI_AVEncVideoInputAbsoluteQPBlockSettings, &var));
RETURN_HR_IF(E_UNEXPECTED, var.vt != VT_BLOB || var.blob.cbSize < sizeof(InputQPSettings));
// Cast blob data to InputQPSettings
const InputQPSettings* settings = reinterpret_cast<const InputQPSettings*>(var.blob.pBlobData);
// Print QP value range and steps
printf("QP Min = %d\n", settings->minValue);
printf("QP Max = %d\n", settings->maxValue);
printf("QP Step = %u\n", settings->steps);
// Decode and print dataType enum
printf("QP Data Type = 0x%08X (", settings->dataType);
switch (settings->dataType)
{
case CODEC_API_QP_MAP_INT8: printf("INT8"); break;
case CODEC_API_QP_MAP_INT16: printf("INT16"); break;
case CODEC_API_QP_MAP_INT32: printf("INT32"); break;
case CODEC_API_QP_MAP_UINT8: printf("UINT8"); break;
case CODEC_API_QP_MAP_UINT16: printf("UINT16"); break;
case CODEC_API_QP_MAP_UINT32: printf("UINT32"); break;
default: printf("Unknown");break;
}
printf(")\n");
PropVariantClear(&var);
return S_OK;
}
요구 사항
| 요구 사항 | 가치 |
|---|---|
| 지원되는 최소 클라이언트 | Windows 11, 빌드 26100 |
| 지원되는 최소 서버 | Windows Server 2025 |
| Header | Codecapi.h |