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.]
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 :
- CTransformFilter::CheckInputType
- CTransformFilter::CheckTransform
- CTransformFilter::D ecideBufferSize
- CTransformFilter::GetMediaType
- CTransformFilter::Transform
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 |
|
Bibliothèque |
|