コーデック MFT の実装
このトピックでは、デコーダーまたはエンコーダーを Media Foundation Transform (MFT) として実装するためのガイドラインをいくつか示します。
エンコーダー
エンコーダー形式ネゴシエーション
エンコーダーを初期化するには、次の手順を使用します。
- MFT に対して ICodecAPI インターフェイスのクエリを実行します。
- 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 属性
メディア ソースは、提供するメディア サンプルに次の telecine 属性をアタッチする場合があります。
属性 | 説明 |
---|---|
MFSampleExtension_RepeatFirstField | "repeat first field" (RFF) フラグと同じです。 |
MFSampleExtension_BottomFieldFirst | "top field first" (TFF) フラグの逆関数。 |
これらのフラグは、インターレース解除を実行するときに、拡張ビデオ レンダラー (EVR) にヒントを提供します。 デコーダーは、これらのフラグを出力サンプルにコピーしてダウンストリームに伝達し、EVR に到達するようにする必要があります。
関連トピック