Freigeben über


Implementieren eines Codec-MFT

Dieses Thema enthält einige Richtlinien für die Implementierung eines Decoders oder Encoders als Media Foundation Transform (MFT) .

Encoder

Aushandlung des Encoderformats

Das folgende Verfahren wird verwendet, um einen Encoder zu initialisieren:

  1. Fragen Sie die MFT für die ICodecAPI-Schnittstelle ab.
  2. Rufen Sie ICodecAPI::SetValue auf, um Codierungseigenschaften festzulegen.
  3. Rufen Sie IMFTransform::SetOutputType auf, um das Codierungsformat festzulegen.
  4. Rufen Sie IMFTransform::GetInputAvailableType auf, um eine Liste kompatibler Eingabetypen zu erhalten. (Dieser Schritt kann übersprungen werden.)
  5. Rufen Sie IMFTransform::SetInputType auf, um das unkomprimierte Eingabeformat festzulegen.

Nachdem der Ausgabetyp in Schritt 3 festgelegt wurde, muss die GetInputAvailableType-Methode eine Liste von Eingabetypen zurückgeben, die mit dem aktuellen Ausgabetyp kompatibel sind. Anders ausgedrückt: Alle Typen, die von GetInputAvailableType zu diesem Zeitpunkt zurückgegeben werden, müssen für SetInputType gültig sein.

Bei Decodern wird die Reihenfolge, in der Typen festgelegt werden, umgekehrt: Der Eingabetyp wird zuerst festgelegt, gefolgt vom Ausgabetyp. Nachdem der Eingabetyp festgelegt wurde, muss die IMFTransform::GetOutputAvailableType-Methode eine Liste von Typen zurückgeben, die an die IMFTransform::SetOutputType-Methode übergeben werden können.

Encoder und Decoder sollten NV12 als gängiges unkomprimiertes Format unterstützen. Dadurch wird sichergestellt, dass Pipelinekomponenten mit minimalen Farbraumkonvertierungen zusammenarbeiten können. Natürlich können auch andere Formate unterstützt werden.

Decoder

Transcode-Only Decoder

Einige Decoder sind für die Transcodierung (Decodieren und anschließendes Erneutes Codieren eines Streams) optimiert und eignen sich nicht für die Verwendung während der Wiedergabe.

Wenn ein Decoder-MFT nur für die Transcodierung vorgesehen ist, legen Sie beim Registrieren des MFT das flag MFT_ENUM_FLAG_TRANSCODE_ONLY fest. (Siehe MFTRegister.)

Standardmäßig werden Transcodierungsdecoder nicht von der MFTEnumEx-Funktion zurückgegeben. Um Transcodedecodedecoder aufzulisten, rufen Sie MFTEnumEx auf, und legen Sie das flag MFT_ENUM_FLAG_TRANSCODE_ONLY im Flags-Parameter fest. Bei Verwendung in der MFTEnumEx-Funktion zählt dieses Flag sowohl Transcodierungsdecoder als auch andere Decoder auf.

MFTRegister-MFT_ENUM_FLAG_TRANSCODE_ONLY MFTEnumEx MFT_ENUM_FLAG_TRANSCODE_ONLY Ist MFT Enumerated?
1 1 Ja
1 0 Nein
0 1 Ja
0 0 Ja

 

Telecine-Attribute

Die Medienquelle kann die folgenden Telecine-Attribute an die übermittelten Medienbeispiele anfügen.

attribute BESCHREIBUNG
MFSampleExtension_RepeatFirstField Entspricht dem RFF-Flag (Repeat First Field).
MFSampleExtension_BottomFieldFirst Inverse des Flags "Top Field First" (TFF).

 

Diese Flags bieten einen Hinweis auf den erweiterten Videorenderer (EvR), wenn er deinterlacing ausführt. Ein Decoder sollte diese Flags nach unten weitergeben, indem er sie in die Ausgabebeispiele kopiert, damit sie den EVR erreichen.

Schreiben eines benutzerdefinierten MFT