エンコーダー 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 値を指定すると競合し、 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;
}
Requirements
| Requirement | 価値 |
|---|---|
| サポートされている最小のクライアント | Windows 11 ビルド 26100 |
| サポートされている最小のサーバー | Windows Server 2025 |
| Header | Codecapi.h |