Partager via


DMO Architecture

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngineet audio/vidéo capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer, IMFMediaEngine et capture audio/vidéo dans Media Foundation au lieu de directShow, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

Cette section décrit l’architecture globale d’un DMO.

Flux

Un DMO est un objet qui prend m entrées et produit des sorties n. Les entrées et sorties sont appelées flux. Chaque DMO a au moins un flux. Les flux ne sont pas des objets ; ils sont simplement référencés sur le DMO par numéro d’index. Le nombre de flux est fixe au moment du design.

types de supports

Toutes les données sont typées à l’aide d’un type de support , qui définit comment interpréter le contenu des données. Par exemple, la vidéo RVB 320 x 240 24 bits est un type ; 44,1 kilohertz (kHz) audio stéréo PCM 16 bits est un autre type. Les types de supports sont décrits à l’aide de la structure DMO_MEDIA_TYPE. Avant que le client puisse traiter toutes les données, il doit définir le type de média pour chaque flux sur le DMO.

En règle générale, un flux peut accepter une gamme de types de supports. Certains DMO prennent en charge un plus large éventail de types que d’autres. Les interfaces DMO définissent des méthodes pour que le client découvre les types pris en charge. Par exemple, un DMO peut prendre en charge la vidéo RVB à n’importe quelle profondeur de bits, tandis qu’une autre peut prendre en charge uniquement le RVB 24 bits. En outre, un DMO peut être limité à certaines combinaisons d’entrées et de sorties. Par exemple, si le type d’entrée est une vidéo 16 bits, le flux de sortie peut nécessiter la même profondeur de bits. Le client peut énumérer les types préférés de chaque flux, puis tester des combinaisons spécifiques.

tampons

Dans le modèle DMO par défaut, le client alloue des mémoires tampons d’entrée et des mémoires tampons de sortie distinctes. Il remplit les mémoires tampons d’entrée avec des données et les remet au DMO, et le DMO écrit de nouvelles données dans les mémoires tampons de sortie.

Si vous le souhaitez, un DMO peut prendre en charge le traitement « sur place ». Avec le traitement sur place, le DMO écrit la sortie directement dans la mémoire tampon d’entrée, sur les données d’origine. Le traitement sur place élimine la nécessité de mémoires tampons distinctes. En revanche, il modifie les données d’origine, qui peuvent ne pas être acceptables pour certaines applications.

Le modèle de mise en mémoire tampon par défaut (non sur place) est pris en charge via l’interface IMediaObject. Toutes les DMV doivent implémenter cette interface. Si un DMO prend en charge le traitement sur place, il expose également l’interface IMediaObjectInPlace. Le client est responsable de l’allocation de toutes les mémoires tampons, à la fois en entrée et en sortie.

À propos des DMO