Étape 1. Choisir une classe de base

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

Il s’agit de l’étape 1 du didacticiel Écriture de filtres de transformation.

En supposant que vous décidez d’écrire un filtre et non un DMO, la première étape consiste à choisir la classe de base à utiliser. Les classes suivantes conviennent aux filtres de transformation :

  • CTransformFilter est conçu pour les filtres de transformation qui utilisent des tampons d’entrée et de sortie distincts. Ce type de filtre est parfois appelé filtre de copie-transformation. Lorsqu’un filtre de copie-transformation reçoit un exemple d’entrée, il écrit de nouvelles données dans un exemple de sortie et remet l’exemple de sortie au filtre suivant.

  • CTransInPlaceFilter est conçu pour les filtres qui modifient les données de la mémoire tampon d’origine, également appelés filtres trans-in-place. Lorsqu’un filtre trans-in-place reçoit un exemple, il modifie les données à l’intérieur de cet exemple et fournit le même exemple en aval. La broche d’entrée et la broche de sortie du filtre se connectent toujours aux types de média correspondants.

  • CVideoTransformFilter est principalement conçu pour les décodeurs vidéo. Il dérive de CTransformFilter, mais inclut des fonctionnalités permettant de supprimer des images si le convertisseur en aval prend du retard.

  • CBaseFilter est une classe de filtre générique. Les autres classes de cette liste dérivent toutes de CBaseFilter. Si aucun d’entre eux ne convient, vous pouvez vous rabattre sur cette classe. Toutefois, cette classe nécessite également le plus de travail de votre part.

  • ![Important]

    Les transformations vidéo sur place peuvent avoir un impact sérieux sur les performances de rendu. Les transformations sur place nécessitent des opérations de lecture-modification-écriture sur la mémoire tampon. Si la mémoire réside sur un carte graphique, les opérations de lecture sont beaucoup plus lentes. En outre, même une transformation de copie peut entraîner des opérations de lecture involontaires si vous ne l’implémentez pas avec soin. Par conséquent, vous devez toujours effectuer des tests de performances si vous écrivez une transformation vidéo.

     

Pour l’exemple d’encodeur RLE, le meilleur choix est CTransformFilter ou CVideoTransformFilter. En fait, les différences entre eux sont en grande partie internes, il est donc facile de convertir de l’un à l’autre. Étant donné que les types de média doivent être différents sur les deux broches, la classe CTransInPlaceFilter n’est pas appropriée pour ce filtre. Cet exemple utilise CTransformFilter.

Suivant : Étape 2. Déclarez la classe Filter.

Écriture de filtres DirectShow