Condividi tramite


attributo MFSampleExtension_VideoEncodeInputAbsoluteQPMap

Archivia una mappa dei valori QP (Absolute Quantization Parameter) forniti come input per il codificatore MFT.

Tipo di dati

Un IMFMediaBuffer.

Osservazioni:

Questo attributo consente alle app di fornire suggerimenti a un codificatore video MFT specificando valori QP (Quantiization Parameter) diversi per diverse parti di un fotogramma video. Ad esempio, un'app di videoconferenza potrebbe conoscere le parti di un fotogramma video che mostra il viso di una persona e può usare questa API per chiedere al codificatore di usare valori QP più piccoli durante la codifica di tali parti del fotogramma video.

Supponendo che un video di risoluzione di 1920x1080 venga codificato con lo standard HEVC, con la dimensione del blocco QP assoluta supportata pari a 32x32. Ci sono blocchi di questo tipo 60x34. I blocchi verranno disposti nell'ordinamento principale delle righe. Nella tabella seguente viene illustrato il layout di una mappa QP assoluta.

Formato di dati di una mappa QP assoluta di esempio

Usare IMFAttributes::SetUnknown per associare un IMFMediaBuffer contenente i valori QP assoluti. Usare IMFAttributes::GetUnknown per recuperare il IMFMediaBuffer contenente i valori QP assoluti.

Le mappe QP assolute vengono fornite per l'intero frame contemporaneamente. Se il codificatore usa più riquadri o sezioni, la codifica a livello di riquadro o di sezione userà le mappe di input QP assolute fornite esternamente a livello di frame per l'esecuzione di tale codifica a livello di riquadro o sezione.

Non esiste alcuna separazione dei valori QP da una prospettiva Chroma o Luma. I valori QP verranno applicati in modo uniforme a Luma & Chroma Pixel.

Le mappe QP assolute offrono alle applicazioni il controllo completo sul parametro di quantizzazione esatto per ogni area di un frame, consentendo all'app di eseguire l'override del controllo della frequenza interna del codificatore in MFT. Questa funzionalità è fondamentale in scenari dinamici, ad esempio trasmissioni sportive live con sovrapposizioni grafiche o feed di immagini in immagine, in cui diverse aree del fotogramma cambiano in complessità da un momento all'altro. Affidandosi esclusivamente alle mappe Delta QP, è possibile che gli artefatti non si allineano alle esigenze di qualità dell'applicazione.

L'utilizzo simultaneo di QP delta e QP assoluto non è supportato. Se una mappa QP assoluta è collegata a un IMFSample, qualsiasi mappa QP differenziale viene ignorata dal codificatore MFT.

MFCreateDXGISurfaceBuffer può essere usato per eseguire il wrapping di una risorsa GPU in un IMFMediaBuffer.

Il tipo di dati di ogni elemento nella mappa QP assoluta deve corrispondere a quello indicato nel campo dataTypedell'oggetto InputQPSettings passato nel BLOB ottenuto con la proprietà CODECAPI_AVEncVideoInputDeltaQPSettings .

L'inserimento di valori QP differenziali può essere in conflitto e può avere un effetto di override sulle proprietà della velocità in bit, ad esempio AVEncCommonMeanBitRate o CODECAPI_AVEncCommonMaxBitRate.

Il codificatore MFT che supporta MFSampleExtension_VideoEncodeInputAbsoluteQPMap deve supportare anche CODECAPI_AVEncVideoInputDeltaQPSettings.

Esempi

In questo esempio viene illustrato come associare una mappa QP differenziale a oggetti IMFSample forniti come input a un codificatore MFT. Il parametro di input deltaQPBuffer rappresenta la mappa delta QP. Per informazioni su come scrivere dati in un buffer multimediale, vedere Utilizzo dei buffer multimediali.

#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);
}

Requisiti

Requisito Value
Client minimo supportato Windows 11, build 26100
Server minimo supportato Windows Server 2025
Header mfapi.h