다음을 통해 공유


CODECAPI_AVEncVideoInputAbsoluteQPBlockSettings 속성

인코더 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 구조체의 minBlockSizemaxBlockSize 필드에는 동일한 값이 있을 수 있으며 이는 인코더가 단일 블록 크기만 지원함을 나타냅니다.

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

참고하십시오