Partager via


DMO Architecture

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture in 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 Audio/Video Capture dans Media Foundation au lieu de DirectShow, si 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 des entrées m et produit n sorties. Les entrées et les 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 média

Toutes les données sont typées à l’aide d’un type de média, 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 ; L’audio PCM stéréo 16 bits 44,1 kilohertz (kHz) est un autre type. Les types de média sont décrits à l’aide de la structure DMO_MEDIA_TYPE . Avant que le client puisse traiter des 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 plage de types de médias. Certains DMO prennent en charge un plus large éventail de types que d’autres. Les interfaces DMO définissent des méthodes permettant au client de découvrir 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’un autre peut prendre en charge uniquement 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 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.

Mémoires 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 le besoin de mémoires tampons distinctes. En revanche, il modifie les données d’origine, ce qui peut ne pas être acceptable 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 . Tous les DMO 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