次の方法で共有


CODECAPI_AVEncVideoInputAbsoluteQPBlockSettings プロパティ

エンコーダー MFT が絶対 QP 入力値に対してサポートする設定を指定する読み取り専用プロパティです。

データの種類

InputQPSettings (VT_BLOB)

プロパティ GUID

CODECAPI_AVEncVideoInputAbsoluteQPBlockSettings

プロパティ値

このプロパティの値は InputQPSettings 構造体です 。 プロパティが存在する場合、ビデオ エンコーダー MFT は 、InputQPSettings 構造体によって提供される設定に準拠する絶対 QP 値の受信をサポートします。 プロパティがない場合、ビデオ エンコーダー MFT は絶対 QP 値の受信をサポートしていません。

サポートされている場合は、エンコード プロセスの量子化ステップ中に適用するビデオ エンコーダー MFT の入力として絶対 QP 値を指定できます。 MFSampleExtension_VideoEncodeInputAbsoluteQPMap属性は、QP 値を指定するために使用されます。

注釈

QP マップ内の各要素は、ピクセルの正方形のブロックを表し、N ピクセルの側面を持ち、そのようなブロック N2 (NxN) 内に含まれるピクセルの合計数を作成します。 ブロック サイズは、正方形ブロックの片側のピクセル数 (つまり、値 N) として指定されます。このようなブロックのサイズは、Luma ピクセルにマップされます。

ICodecAPI::IsSupported を使用して、エンコーダーが絶対 QP 値の受信をサポートしているかどうかを確認します。

ICodecAPI::GetValue を使用して、VT_BLOB インターフェイスを使用して InputQPSettings 構造体内で表される値を取得します。 これは準備完了のみのプロパティであるため、 ICodecAPI::SetValue を呼び出しても効果はありません。

InputQPSettings 構造体の minBlockSize フィールドと maxBlockSize フィールドの値は同じでもかまいません。エンコーダーがサポートするブロック サイズは 1 つだけであることを示します。

サイズ MxN の四角形ブロック (32 x 16 など) はサポートされていません。

絶対 QP 値を指定すると競合し、 AVEncCommonMeanBitRateCODECAPI_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;
}


Requirements

Requirement 価値
サポートされている最小のクライアント Windows 11 ビルド 26100
サポートされている最小のサーバー Windows Server 2025
Header Codecapi.h

こちらも参照ください