Partager via


Introduction aux classes de base de filtres

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Elle a été remplacée par MediaPlayer, IMFMediaEngine et Capture audio/vidéo dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Si possible, Microsoft recommande vivement d’utiliser MediaPlayer, IMFMediaEngine et Capture audio/vidéo dans Media Foundation pour le nouveau code, plutôt que DirectShow. 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 auteurs d'applications pourraient trouver certaines des classes utilitaires et des 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 dans la bibliothèque.

Classes d’objets COM

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

classe Descriptif
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 de débogage en conservant le nombre d’objets actifs dans la DLL au moment de l’exécution. Dans les versions de débogage, la DLL génère une assertion 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érence.

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 les classes

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

classe Descriptif
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 utilisant les 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 Descriptif
CSource Classe de base pour les filtres sources. Cette classe est conçue pour créer des sources Push. Il n’est pas adapté 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 des 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 de qualité.
CBaseRenderer Classe de base pour les filtres de renderer. La broche d’entrée de 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 de code vous devrez écrire dans votre classe dérivée.

Objets d’assistance

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

classe Descriptif
CPullPin Objet d'assistance pour les ports d'entrée des filtres de parseur. Prend en charge les connexions IAsyncReader avec des sources de collecte.
COutputQueue Objet auxiliaire pour les broches de sortie qui met en file d'attente des échantillons à livrer dans un fil 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, telles que les analyseurs.)
CEnumPins Objet Énumérateur destiné à l'énumération des broches sur un filtre. Implémente l’interface IEnumPins .
CEnumMediaTypes Objet Énumérateur pour énumérer les types de supports préférés sur une broche. Implémente l’interface IEnumMediaTypes .
CMemAllocator Objet gestionnaire de mémoire. Implémente l’interface IMemAllocator .
CMediaSample Exemple d’objet multimé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 manipuler des structures AM_MEDIA_TYPE .