Partager via


Principes de base de DMO (Microsoft Media Foundation)

Cette rubrique fournit une brève vue d’ensemble des DMO en relation avec les codecs Windows Media. Pour plus d’informations sur les objets DMO, consultez Objets multimédias DirectX.

Un DMO est un objet COM qui transforme des données. Vous lui transmettez des données et retourne les données transformées. Dans le cas d’un encodeur codec DMO, vous entrez des données multimédias non compressées et le DMO fournit des données multimédias compressées. Le principal avantage de l’utilisation des DMO est qu’ils implémentent tous la même interface de base, IMediaObject, ce qui simplifie leur utilisation, car vous pouvez utiliser le même objet, quel que soit le type de transformation en cours d’exécution.

Étant donné que des variables sont impliquées dans n’importe quel type de transformation de données, la transformation audio et vidéo doit prendre en compte le large éventail de configurations multimédias possibles. Les codecs Audio et Vidéo Windows Media prennent également en charge un certain nombre de fonctionnalités spéciales que vous devez être en mesure de configurer à l’aide du DMO.

En général, les informations de variable nécessaires aux DMO codecs pour compresser et décompresser les médias numériques sont transmises de l’une des trois manières suivantes :

  • Définissez le type d’entrée sur le DMO pour transmettre les caractéristiques du média non compressé que vous passez à un DMO d’encodeur, ainsi que les caractéristiques du média compressé que vous transmettez à un décodeur DMO.
  • Définissez le type de sortie sur le DMO pour transmettre les caractéristiques du média compressé fourni par un DMO d’encodeur, ainsi que les caractéristiques du média non compressé fourni par un décodeur DMO.
  • À l’aide des méthodes de l’interface IPropertyBag , configurez d’autres paramètres qui prennent en charge les différentes fonctionnalités des DMO de codec en tant que propriétés. IPropertyBag est une interface COM standard qui est prise en charge par tous les DMO codecs.

En outre, certaines fonctionnalités de codec sont gérées à l’aide d’autres interfaces spécifiques aux DMO de codec. Ces interfaces sont répertoriées pour chaque codec dans la section Objets codec.

Les types d’entrée et de sortie sont spécifiques aux flux d’entrée et de sortie. Chaque flux représente une représentation discrète du contenu. Par exemple, l’encodeur Vidéo Windows Media DMO a un seul flux d’entrée et deux flux de sortie. Le flux d’entrée accepte les exemples vidéo non compressés. Le premier des deux flux de sortie fournit des exemples compressés ; l’autre fournit des exemples non compressés. Les échantillons individuels d’un flux de sortie représentent le même contenu que les exemples correspondants dans l’autre flux, mais chaque flux fournit ces exemples dans un format différent.

Chaque flux (entrée ou sortie) prend en charge un ou plusieurs types de médias. Un type de média, ou format, est décrit par une structure DMO_MEDIA_TYPE . Vous pouvez interroger le DMO pour les types pris en charge par un flux de sortie en appelant IMediaObject::GetOutputType. Cette méthode retourne un type de sortie valide (même si dans certains cas partiellement incomplet) pour ce flux. Vous pouvez énumérer les types de médias pris en charge pour un flux de sortie en effectuant des appels répétés à GetOutputType, en incrémentant le paramètre de type avec chaque appel. Lorsque l’index de type que vous transmettez est hors limites, la méthode retourne DMO_E_NO_MORE_ITEMS. Les formats d’entrée peuvent être énumérés de la même façon à l’aide de la méthode IMediaObject::GetInputType .

Les types énumérés par le DMO sont uniquement les types « préférés », mais d’autres types peuvent être pris en charge. Vous pouvez valider un type de sortie en appelant IMediaObject::SetOutputType. Utilisez IMediaObject::SetInputType pour valider un type d’entrée. Les deux méthodes retournent DMO_E_TYPE_NOT_ACCEPTED si la structure de DMO_MEDIA_TYPE que vous avez passée n’est pas valide. Certains DMO nécessitent que vous définissiez un type de sortie avant d’énumérer les types d’entrée. Les DMO des codecs Audio et Vidéo Windows Media ont tous des entrées et des sorties qui ont une validation interdépendante. Autrement dit, le type de sortie que vous définissez définit les critères de validation pour le type d’entrée. Il existe également certaines propriétés qui, lorsqu’elles sont définies, modifient les types d’entrée et de sortie valides. Pour cette raison, vous devez définir toutes les propriétés souhaitées sur le DMO avant d’énumérer les types.

Une fois que vous avez défini les types de sortie et d’entrée pour le DMO, vous pouvez commencer à traiter des exemples. Chaque exemple d’entrée est passé au codec à l’aide d’un appel à IMediaObject::P rocessInput, et chaque exemple de sortie est remis par le codec lorsque vous effectuez un appel à IMediaObject::P rocessOutput.

Utilisation des DMO codecs