Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Egy kódolt videókeretben tárolja az egyes blokkokhoz használt kvantálási paraméter (QP) értékeinek térképét.
Adattípus
Egy IMFMediaBuffer.
Megjegyzések
A QP-térkép elérése lehetővé teszi a fejlesztők számára a videókódolási minőség elemzését és optimalizálását. Ez az attribútum lehetővé teszi a tömörítési hatékonyság kiértékelését, a minőségi inkonzisztenciák észlelését és a kódolási beállítások finomhangolását a jobb vizuális hűség és bitráta-vezérlés érdekében.
A QP-térkép egy QP-értékek tömbje, amely a uint8_t típusával rendelkezik. Minden blokk egy QP-értékkel rendelkezik. A fejlesztőnek meg kell határoznia a QP-térkép méretét a CODECAPI_AVEncVideoOutputQPMapBlockSize és a videókeret szélessége és magassága alapján (Ossza el a szélességet/magasságot a blokk méretével). Ha a szélesség/magasság nem a blokkméret pontos többszöröse, kerekítsd fel a blokkméret következő többszörösére) . Ez biztosítja a sorok és oszlopok számát, biztosítva a videokerettel való megfelelő igazítást. A térkép balról jobbra és felülről lefelé halad.
Az IMFAttributes::SetUnknown parancsot használva csatolhat egy, a QP-térképet tartalmazó IMFMediaBuffert egy kimeneti mintához. Az IMFAttributes::GetUnknown használatával lekérheti a QP-térképet tartalmazó IMFMediaBuffert egy kimeneti mintából.
A QP-térképet csak akkor kell jelenteni, ha a teljes keret kódolása befejeződött. Ha a kódoló több szeletet használ, a PSNR-puffert az utolsó szelet IMFSample-éhez kell csatolni.
A QP-térkép 8 bites QP-értékeinek értelmezése a vonatkozó kodek specifikációja által meghatározott érvényes QP-tartománytól függ. Nagyobb bitmélység (pl. 10 bites) esetén egyes hardvergyártók (IHV-k) a végső kódolású QP-tartomány (például [0, 63]) helyett használhatják a belső kvantálási indextartományt (pl. [-12, 51] 10 bites HEVC esetén). Ez a belső tartomány a QP-értékek bitmélységhez (Qp = qpY + QpBdOffsetY) viszonyított beállítását tükrözi az átalakítás és a kvantálási lépések során, a kodek szabványában meghatározott módon. A QP-térkép felhasználóinak konzultálnia kell az illesztőprogram dokumentációjában ezeknek az értékeknek a helyes értelmezéséhez és szükség esetén a megfelelő eltoláskorrekció alkalmazásához.
Példák
Az alábbi példa egy olyan segédfüggvényt mutat be, amelyet az ICodecAPI-t támogató kódoló MFT implementációi használhatnak. A függvény bemutatja, hogyan ellenőrizheti, hogy a QP-térképjelentés engedélyezve van-e a kódoló MFT-ben. Ha engedélyezve van, a függvény bemutatja, hogyan csatolhatja a QP-térképet a kimeneti mintához. Ez feltételezi, hogy minden kimeneti minta teljes keretet tartalmaz. Ha a kódoló több szeletet használ, a QP-térképet csak az utolsó szelet IMFSample-éhez kell csatolni.
#include <mfapi.h>
#include <mfobjects.h>
#include <codecapi.h>
#include <wil.com.h>
#include <wil/result_macros.h>
// Function to query and attach QP map to output samples
HRESULT ReportQPMapOnOutputSample(
_In_ IMFTransform* encoder,
_In_ IMFSample* outputSample,
_In_ IMFMediaBuffer* qPMap // IMFMediaBuffer could be the GPU resource for QP map if using hardware encoder
)
{
RETURN_HR_IF_NULL(E_INVALIDARG, encoder);
RETURN_HR_IF_NULL(E_INVALIDARG, outputSample);
RETURN_HR_IF_NULL(E_INVALIDARG, qPMap);
// Query the encoder's codec API to check if QP Map reporting is enabled
wil::com_ptr_nothrow<ICodecAPI> codecAPI;
RETURN_IF_FAILED(wil::com_query_to_nothrow(encoder, &codecAPI));
wil::unique_variant value;
RETURN_IF_FAILED(codecAPI->GetValue(&CODECAPI_AVEncVideoOutputQPMapBlockSize, &value));
if (value.vt != VT_UI4 || !value.ulVal) {
return S_OK; // QP Map not enabled
}
// Attach the IMFMediaBuffer (QP Map) to the output sample's attributes
wil::com_ptr_nothrow<IMFAttributes> sampleAttributes;
RETURN_IF_FAILED(wil::com_ptr_nothrow(outputSample, &sampleAttributes));
return sampleAttributes->SetUnknown(MFSampleExtension_VideoEncodeQPMap, qPMap);
}
Az alábbi példa bemutatja, hogy egy alkalmazás hogyan tudja lekérni a QP-leképezési adatokat a kódoló MFT által létrehozott IMFSample-objektumokból .
#include <mfapi.h>
#include <mfobjects.h>
#include <codecapi.h>
#include <wil.com.h>
#include <wil/result_macros.h>
// Function to retrieve the QP map from an output sample.
HRESULT RetrieveQPMapFromOutputSample(
_In_ IMFSample* outputSample,
_COM_Outptr_result_maybenull_ IMFMediaBuffer** qPMapBuffer // Output: IMFMediaBuffer containing the QP map
)
{
RETURN_HR_IF_NULL(E_INVALIDARG, qPMapBuffer);
*qPMapBuffer = nullptr;
RETURN_HR_IF_NULL(E_INVALIDARG, outputSample);
// Retrieve the sample attributes
wil::com_ptr_nothrow<IMFAttributes> sampleAttributes;
RETURN_IF_FAILED(wil::com_query_to_nothrow(outputSample, &sampleAttributes));
// Retrieve the IMFMediaBuffer associated with the QP map
(void)sampleAttributes->GetUnknown(MFSampleExtension_VideoEncodeQPMap, IID_PPV_ARGS(qPMapBuffer));
return S_OK;
}
Követelmények
Követelmény | Érték |
---|---|
Minimálisan támogatott ügyfél | Windows 11, build 26100 |
Minimálisan támogatott kiszolgáló | Windows Server 2025 |
Fejléc | mfapi.h |