實作編解碼器 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 | 是 |
Tele屬性
媒體來源可能會將下列遠端屬性附加至它所提供的媒體範例。
屬性 | Description |
---|---|
MFSampleExtension_RepeatFirstField | 相當於 「repeat first field」 (RFF) 旗標。 |
MFSampleExtension_BottomFieldFirst | TFF) 旗標 (「top field first」 的反轉。 |
這些旗標會提供增強的視訊轉譯器提示, (EVR) 執行反交錯。 解碼器應該藉由將這些旗標複製到輸出範例來傳播這些旗標,使其到達 EVR。
相關主題