實作編解碼器 MFT

本主題提供將解碼器或編碼器實作為媒體基礎轉換的一些指導方針, (MFT) 。

編碼器

編碼器格式交涉

下列程式可用來初始化編碼器:

  1. 查詢 ICodecAPI 介面的 MFT。
  2. 呼叫 ICodecAPI::SetValue 來設定編碼屬性。
  3. 呼叫 IMFTransform::SetOutputType 來設定編碼格式。
  4. 呼叫 IMFTransform::GetInputAvailableType 以取得相容的輸入類型清單。 (此步驟可能會略過。)
  5. 呼叫 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。

撰寫自訂 MFT