Partager via


Classe CTransformFilter

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement au nouveau code d’utiliser MediaPlayer, IMFMediaEngine et La 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.]

Hiérarchie de classes ctransformfilter

La CTransformFilter classe est une classe de base permettant d’implémenter des filtres de transformation. Cette classe est conçue pour implémenter un filtre de transformation avec une broche d’entrée et une broche de sortie. Il utilise des répartiteurs distincts pour la broche d’entrée et la broche de sortie. Pour créer un filtre qui traite les données en place, utilisez la classe CTransInPlaceFilter .

Ce filtre utilise la classe CTransformInputPin pour sa broche d’entrée et la classe CTransformOutputPin pour sa broche de sortie. En règle générale, vous n’avez pas besoin de remplacer ces classes d’épingles. La plupart des méthodes de broche appellent des méthodes correspondantes sur la CTransformFilter classe. Vous pouvez donc remplacer les méthodes de filtre si nécessaire. Le filtre crée les deux broches dans la méthode CTransformFilter::GetPin . Si vous remplacez les classes d’épingle, vous devez remplacer GetPin pour créer vos épingles personnalisées.

Pour utiliser cette classe, dérivez une nouvelle classe à partir de CTransformFilter et implémentez les méthodes suivantes :

Vous devrez peut-être également remplacer d’autres méthodes, en fonction des exigences de votre filtre.

Types de médias

La broche d’entrée de ce filtre ne propose aucun type de média ; il s’appuie sur le filtre amont pour proposer les types de médias pour la connexion. La raison de cette conception est que dans la plupart des cas, le filtre amont peut fournir plus d’informations sur le format. Par exemple, avec les formats vidéo, le filtre amont connaît les dimensions de la vidéo et la fréquence d’images, alors que le filtre de transformation n’a aucun moyen de déterminer ces informations. Si vous souhaitez modifier ce comportement, remplacez la méthode GetMediaType de la broche d’entrée. Lorsque le filtre amont propose un type de média, la broche d’entrée appelle la méthode CheckInputType du filtre (pure virtual).

Tant que la broche d’entrée n’est pas connectée, la broche de sortie refuse toutes les connexions et ne retourne aucun type de média préféré. Une fois la broche d’entrée connectée, la broche de sortie retourne une liste de types préférés en appelant la méthode GetMediaType du filtre. Il vérifie les types de sortie pour la connexion via la méthode CheckTransform du filtre. (Les deux méthodes sont purement virtuelles.) En règle générale, le type d’entrée détermine en partie les types de sortie acceptables.

En fonction du filtre, vous souhaiterez peut-être inscrire certains des types de médias pris en charge du filtre, afin que l’objet Filter Mapper puisse localiser votre filtre. Pour plus d’informations, consultez Comment inscrire des filtres DirectShow.

Diffusion en continu

Cette classe ne met pas en file d’attente les données de sortie. Chaque exemple de sortie est fourni à l’intérieur de la méthode IMemInputPin::Receive . La méthode Receive appelle la méthode Transform du filtre (également virtuelle pure) pour traiter les données.

Pour plus d’informations sur l’utilisation de cette classe, consultez Écriture de filtres de transformation.

Variables membres protégées Description
m_bEOSDelivered Indicateur qui indique si le filtre a envoyé une notification de fin de flux.
m_bSampleSkipped Indicateur qui indique si l’exemple le plus récent a été supprimé.
m_bQualityChanged Indicateur qui indique si la qualité a changé.
m_csFilter Section critique qui protège l’état du filtre.
m_csReceive Section critique qui protège l’état de diffusion en continu.
m_pInput Pointeur vers la broche d’entrée.
m_pOutput Pointeur vers la broche de sortie.
Méthodes publiques Description
CTransformFilter Méthode du constructeur.
~ CTransformFilter Méthode de destructeur.
GetPinCount Récupère le nombre de broches sur le filtre. Virtuel.
GetPin Récupère une broche. Virtuel.
Transform Transforme un exemple d’entrée pour produire un exemple de sortie. Virtuel.
DémarrerStreaming Appelé lorsque le filtre passe à l’état suspendu. Virtuel.
StopStreaming Appelé lorsque le filtre passe à l’état arrêté. Virtuel.
AlterQuality Avertit le filtre qu’une modification de qualité est demandée. Virtuel.
SetMediaType Appelé lorsque le type de média est défini sur l’une des broches du filtre. Virtuel.
CheckConnect Détermine si une connexion de broche est appropriée. Virtuel.
BreakConnect Libère une broche à partir d’une connexion. Virtuel.
CompleteConnect Termine une connexion de broche. Virtuel.
Recevoir Reçoit un exemple multimédia, le traite et remet un exemple de sortie au filtre en aval. Virtuel.
InitializeOutputSample Récupère un nouvel exemple de sortie et l’initialise.
EndOfStream Avertit le filtre qu’aucune donnée supplémentaire n’est attendue de la broche d’entrée. Virtuel.
BeginFlush Commence une opération de vidage. Virtuel.
EndFlush Met fin à une opération de vidage. Virtuel.
NewSegment Avertit le filtre que les exemples multimédias reçus après cet appel sont regroupés en tant que segment. Virtuel.
Méthodes virtuelles pures Description
CheckInputType Vérifie si un type de média spécifié est acceptable pour l’entrée.
CheckTransform Vérifie si un type de média d’entrée est compatible avec un type de média de sortie.
DecideBufferSize Définit les exigences de mémoire tampon de la broche de sortie.
GetMediaType Récupère un type de média préféré pour l’épingle de sortie.
Méthodes IMediaFilter Description
Arrêter Arrête le filtre.
Suspendre Interrompt le filtre.
Méthodes IBaseFilter Description
FindPin Récupère la broche avec l’identificateur spécifié.

Configuration requise

Condition requise Valeur
En-tête
Transfrm.h (include Streams.h)
Bibliothèque
Strmbase.lib (builds de vente au détail) ;
Strmbasd.lib (builds de débogage)