Implémentation d’un codec MFT

Cette rubrique fournit des instructions pour l’implémentation d’un décodeur ou d’un encodeur en tant que transformation media foundation (MFT).

Encodeurs

Négociation du format d’encodeur

La procédure suivante est utilisée pour initialiser un encodeur :

  1. Interrogez le MFT pour l’interface ICodecAPI .
  2. Appelez ICodecAPI::SetValue pour définir les propriétés d’encodage.
  3. Appelez IMFTransform::SetOutputType pour définir le format d’encodage.
  4. Appelez IMFTransform::GetInputAvailableType pour obtenir la liste des types d’entrée compatibles. (Cette étape peut être ignorée.)
  5. Appelez IMFTransform::SetInputType pour définir le format d’entrée non compressé.

Une fois le type de sortie défini à l’étape 3, la méthode GetInputAvailableType doit retourner une liste de types d’entrée compatibles avec le type de sortie actuel. En d’autres termes, tous les types retournés par GetInputAvailableType à ce stade doivent être valides pour SetInputType.

Pour les décodeurs, l’ordre dans lequel les types sont définis est inversé : le type d’entrée est défini en premier, suivi du type de sortie. Une fois le type d’entrée défini, la méthode IMFTransform::GetOutputAvailableType doit retourner une liste de types qui peuvent être passés à la méthode IMFTransform::SetOutputType .

Les encodeurs et les décodeurs doivent prendre en charge NV12 comme format non compressé commun. Cela garantit que les composants de pipeline peuvent interagir avec des conversions d’espace de couleurs minimales. Bien sûr, d’autres formats peuvent également être pris en charge.

Décodeurs

décodeurs Transcode-Only

Certains décodeurs sont optimisés pour le transcodage (décodage puis réencodage d’un flux) et ne conviennent pas à une utilisation pendant la lecture.

Si un décodeur MFT est destiné uniquement au transcodage, définissez l’indicateur MFT_ENUM_FLAG_TRANSCODE_ONLY lorsque vous inscrivez le MFT. (Voir MFTRegister.)

Par défaut, les décodeurs transcodeurs ne sont pas retournés par la fonction MFTEnumEx . Pour énumérer les décodeurs transcodeurs, appelez MFTEnumEx et définissez l’indicateur MFT_ENUM_FLAG_TRANSCODE_ONLY dans le paramètre Flags . Lorsqu’il est utilisé dans la fonction MFTEnumEx , cet indicateur énumérait à la fois les décodeurs de transcodeur et d’autres décodeurs.

MFTRegister MFT_ENUM_FLAG_TRANSCODE_ONLY MFTEnumEx MFT_ENUM_FLAG_TRANSCODE_ONLY MFT est-il énuméré ?
1 1 Oui
1 0 Non
0 1 Oui
0 0 Oui

 

Attributs de télécine

La source multimédia peut attacher les attributs de télécine suivants aux exemples multimédias qu’elle fournit.

Attribut Description
MFSampleExtension_RepeatFirstField Équivalent à l’indicateur « répéter le premier champ » (RFF).
MFSampleExtension_BottomFieldFirst Inverse de l’indicateur « top field first » (TFF).

 

Ces indicateurs fournissent un indicateur pour le convertisseur vidéo amélioré (EVR) lorsqu’il effectue le désentlacement. Un décodeur doit propager ces indicateurs en aval en les copiant dans les exemples de sortie, afin qu’ils atteignent l’EVR.

Écriture d’un MFT personnalisé