次の方法で共有


MFSampleExtension_VideoEncodeInputAbsoluteQPMap属性

エンコーダー MFT への入力として提供される絶対量子化パラメーター (QP) 値のマップを格納します。

データの種類

IMFMediaBuffer

注釈

この属性を使用すると、アプリは、ビデオ フレームのさまざまな部分に対して異なる量子化パラメーター (QP) 値を指定することで、ビデオ エンコーダー MFT にヒントを提供できます。 たとえば、ビデオ会議アプリは、ビデオ フレームのどの部分が人の顔を示しているのかを認識し、この API を使用して、ビデオ フレームのそれらの部分をエンコードするときに、エンコーダーに小さな QP 値を使用するように求めることができます。

1920 x 1080 の解像度のビデオが HEVC 標準でエンコードされていると仮定すると、サポートされている絶対 QP ブロック サイズは 32 x 32 です。 このようなブロックは 60 x 34 です。 ブロックは、行の主要な順序で配置されます。 次の表は、このような絶対 QP マップのレイアウトを示しています。

絶対 QP マップの例のデータ形式

IMFAttributes::SetUnknown を使用して、絶対 QP 値を含む IMFMediaBuffer をアタッチします。 IMFAttributes::GetUnknown を使用して、絶対 QP 値を含む IMFMediaBuffer を取得します。

絶対 QP マップは、フレーム全体に対して一度に提供されます。 エンコーダーが複数のタイルまたはスライスを使用する場合、タイル レベルまたはスライス レベルのエンコードでは、このようなタイルまたはスライス レベルのエンコードを実行する際に、フレーム レベルで外部から提供された絶対 QP 入力マップが使用されます。

QP 値は、クロマまたはルマの観点から分離されません。 QP 値は、Luma とクロマ ピクセルに均一に適用されます。

絶対QPマップは、アプリケーションがフレームの各領域の正確な量子化パラメータを完全に制御し、効果的にアプリがMFTのエンコーダーの内部レート制御をオーバーライドできるようにします。 この機能は、グラフィック オーバーレイを使用したライブ スポーツ ブロードキャストやピクチャインピクチャ フィードなどの動的なシナリオで非常に重要です。フレームの異なる領域は、ある時点から次の瞬間に複雑に変化します。 Delta QP マップのみに依存すると、エンコーダーの自動調整がアプリケーションの品質ニーズに合わない場合にアーティファクトが発生する可能性があります。

差分 QP と絶対 QP の両方の同時使用はサポートされていません。 絶対 QP マップが IMFSample にアタッチされている場合、デルタ QP マップはエンコーダー MFT によって無視されます。

MFCreateDXGISurfaceBuffer を使用して、GPU リソースを IMFMediaBuffer にラップできます。

絶対 QP マップ内の各要素のデータ型は、CODECAPI_AVEncVideoInputDeltaQPSettings プロパティで取得された BLOB で渡される InputQPSettingsdataType フィールドに示されているものと一致する必要があります。

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

Requirements

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