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:
- Fragen Sie die MFT für die ICodecAPI-Schnittstelle ab.
- Rufen Sie ICodecAPI::SetValue auf, um Codierungseigenschaften festzulegen.
- Rufen Sie IMFTransform::SetOutputType auf, um das Codierungsformat festzulegen.
- Rufen Sie IMFTransform::GetInputAvailableType auf, um eine Liste kompatibler Eingabetypen zu erhalten. (Dieser Schritt kann übersprungen werden.)
- 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.
Zugehörige Themen