Présentation des classes de base de filtres

[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.]

Cet article décrit la bibliothèque de classes de base Microsoft DirectShow. Cette bibliothèque est destinée aux développeurs de filtres, mais les enregistreurs d’applications peuvent trouver certaines des classes d’assistance et utilitaires de débogage utiles. Toutefois, la bibliothèque de classes de base n’est pas requise pour la programmation DirectShow.

Les sections suivantes résument les classes de base les plus importantes de la bibliothèque.

Classes d’objets COM

Les classes suivantes prennent en charge la création d’objets COM :

Classe Description
CBaseObject Classe d’objet de base.
CUnknown Implémente l’interface IUnknown .

 

La plupart des classes DirectShow dérivent de CBaseObject. Cette classe fournit une assistance au débogage en conservant le nombre de tous les objets actifs dans la DLL au moment de l’exécution. Dans les builds de débogage, la DLL indique si elle est déchargée alors que le nombre d’objets est supérieur à zéro. Cela facilite le suivi des fuites causées par des problèmes de comptage de références.

Toutes les classes de base qui prennent en charge les interfaces COM dérivent de CUnknown, qui hérite de CBaseObject. La classe CUnknown prend en charge le comptage de références, QueryInterface et l’agrégation. Pour plus d’informations, consultez Comment implémenter IUnknown.

Filtrer et épingler des classes

Les classes suivantes prennent en charge la création d’objets de filtre et d’épingle DirectShow :

Classe Description
CBaseFilter Classe de base pour les filtres. Implémente l’interface IBaseFilter .
CBasePin Classe de base pour les broches. Implémente les interfaces IPin et IQualityControl .
CBaseInputPin Classe de base pour les broches d’entrée qui utilisent le transport de mémoire locale. Implémente l’interface IMemInputPin . Cette classe dérive de CBasePin.
CBaseOutputPin Classe de base pour les broches de sortie qui utilisent des connexions IMemInputPin . Cette classe dérive de CBasePin.

 

Les classes suivantes sont utiles pour créer des types de filtres plus spécialisés :

Classe Description
CSource Classe de base pour les filtres sources. Cette classe est conçue pour créer des sources push. Il ne convient pas aux sources d’extraction, telles que les lecteurs de fichiers. Pour créer des broches de sortie pour cette classe, utilisez la classe CSourceStream .
CTransformFilter Classe de base pour les filtres de transformation. Cette classe effectue une copie sur les données. Les broches de cette classe sont CTransformInputPin et CTransformOutputPin.
CTransInPlaceFilter Classe de base pour les filtres de transformation qui ne copient pas de données. Cette classe effectue le traitement des données directement sur les données d’entrée avant de les transmettre en aval. Les broches de cette classe sont CTransInPlaceInputPin et CTransInPlaceOutputPin.
CVideoTransformFilter Classe de base pour les filtres de transformation vidéo. Cette classe dérive de CTransformFilter et ajoute la prise en charge du contrôle qualité.
CBaseRenderer Classe de base pour les filtres de convertisseur. La broche d’entrée pour cette classe est CRendererInputPin.
CBaseVideoRenderer Classe de base pour les convertisseurs vidéo. Cette classe dérive de CBaseRenderer.

 

Pour utiliser ces classes, vous devez dériver votre propre classe et écrire du code pour prendre en charge les fonctionnalités spécifiques à votre filtre. Plus la classe de base est spécialisée, moins vous devrez écrire de code dans votre classe dérivée.

Objets d’assistance

Les classes suivantes implémentent des objets d’assistance qui sont utilisés par les filtres et les broches. La plupart de ces classes peuvent être utilisées sans en dériver de nouvelles classes :

Classe Description
CPullPin Objet d’assistance pour les broches d’entrée sur les filtres de l’analyseur. Prend en charge les connexions IAsyncReader avec des sources d’extraction.
COutputQueue Objet d’assistance pour les broches de sortie qui génèrent des exemples en file d’attente pour la remise sur un thread de travail.
CSourceSeeking Objet d’aide pour l’implémentation de la recherche sur un filtre source avec exactement une broche de sortie. (Cette classe n’est pas conçue pour les filtres avec plusieurs broches, comme les analyseurs.)
CEnumPins Objet Énumérateur pour l’énumération des broches sur un filtre. Implémente l’interface IEnumPins .
CEnumMediaTypes Objet Énumérateur pour l’énumération des types de média préférés sur une broche. Implémente l’interface IEnumMediaTypes .
CMemAllocator Objet d’allocation de mémoire. Implémente l’interface IMemAllocator .
CMediaSample Objet d’exemple de média. Implémente l’interface IMediaSample2 .
CBaseReferenceClock Classe de base pour les horloges de référence. Implémente l’interface IReferenceClock .
CMediaType Objet d’assistance pour la manipulation de structures AM_MEDIA_TYPE .