實作編解碼器 MFT
本主題提供將譯碼器或編碼器實作為媒體基礎轉換 (MFT) 的一些指導方針。
編碼器
編碼器格式交涉
下列程式是用來初始化編碼器:
- 查詢 ICodecAPI 介面的 MFT。
- 呼叫 ICodecAPI::SetValue 來設定編碼屬性。
- 呼叫 IMFTransform::SetOutputType 來設定編碼格式。
- 呼叫 IMFTransform::GetInputAvailableType 以取得相容的輸入類型清單。 (可能略過此步驟。
- 呼叫 IMFTransform::SetInputType 來設定未壓縮的輸入格式。
在步驟 3 中設定輸出類型之後,GetInputAvailableType 方法必須傳回與目前輸出類型相容的輸入類型清單。 換句話說,此時 GetInputAvailableType 傳回的任何類型,都必須對 setInputType有效。
針對譯碼器,會反轉類型的順序:先設定輸入類型,後面接著輸出類型。 設定輸入類型之後,IMFTransform::GetOutputAvailableType 方法必須傳回可傳遞至 imfTransform::SetOutputType方法的型別清單。
編碼器和譯碼器應支援 NV12 作為一般未壓縮的格式。 這可確保管線元件可以在最少的色彩空間轉換下相互操作。 當然,也可以支援其他格式。
解碼器
Transcode-Only 譯碼器
某些譯碼器已針對轉碼進行優化(譯碼,然後重新編碼數據流),並不適合在播放期間使用。
如果譯碼器 MFT 僅適用於轉碼,請在註冊 MFT 時設定 MFT_ENUM_FLAG_TRANSCODE_ONLY 旗標。 (請參閱 MFTRegister。
根據預設,MFTEnumEx 函式不會返回轉碼譯碼器。 若要列舉轉碼譯碼器,請呼叫 MFTEnumEx,並在 Flags 參數中設定 MFT_ENUM_FLAG_TRANSCODE_ONLY 旗標。 在 MFTEnumEx 函式中使用時,此旗標會同時列舉轉碼譯碼器和其他譯碼器。
MFTRegister MFT_ENUM_FLAG_TRANSCODE_ONLY | MFTEnumEx MFT_ENUM_FLAG_TRANSCODE_ONLY | 是否列舉 MFT? |
---|---|---|
1 | 1 | 是的 |
1 | 0 | 不 |
0 | 1 | 是的 |
0 | 0 | 是的 |
Telecine 屬性
媒體來源可能會將下列電視屬性附加至所傳遞的媒體範例。
屬性 | 描述 |
---|---|
MFSampleExtension_RepeatFirstField | 相當於「重複第一個欄位」(RFF)標誌。 |
MFSampleExtension_BottomFieldFirst | 「top field first」(TFF)旗標的反向。 |
這些標誌在增強型視訊渲染器(EVR)執行解交錯時提供指示。 譯碼器應該透過將這些旗標複製到輸出樣本上,讓這些旗標可以向下游傳遞,直到到達EVR。
相關主題