Fournir un redimensionnement vidéo personnalisé

[Cette API n’est pas prise en charge et peut être modifiée ou non disponible à l’avenir.]

Notes

Cette fonctionnalité nécessite DirectX 9,0 ou une version ultérieure.

lorsque DirectShow Services de modification (DES) redimensionne un clip source vidéo, le comportement par défaut est un StretchBlt, qui est rapide, mais pas avec anticrénelage. vous pouvez modifier le comportement de redimensionnement en implémentant un dimensionnement personnalisé en tant que DirectShow filtre de transformation. Le filtre doit exposer l’interface IResize , qui permet à des de spécifier la taille vidéo d’entrée et de sortie. Pour plus d’informations sur l’écriture d’un filtre de transformation, consultez écriture de filtres de transformation. La classe de base CTransformFilter est recommandée comme point de départ. Lorsque vous implémentez le filtre, notez les points suivants :

  • Prend en charge l’interface IResize sur le filtre (pas les broches).
  • Le filtre doit accepter uniquement les formats VIDEOINFOHEADER (format _ videoinfo). Refuser les autres types de format.
  • Le format vidéo à partir de peut être n’importe quel type RVB non compressé, y compris les RGB 32 bits avec alpha (MEDIASUBTYPE _ ARGB32). Votre filtre peut rejeter en toute sécurité les formats avec la bihauteur < 0.
  • Avant que le moteur de rendu connecte la broche de sortie du filtre, il appelle IResize ::p ut _ MediaType pour définir le type de sortie. Elle peut également appeler IResize ::p ut _ pour ajuster la taille de sortie. Il peut appeler ces deux méthodes dans n’importe quel ordre, le nombre de fois, avant de connecter la broche de sortie.
  • Une fois que le moteur de rendu a connecté la broche de sortie, il peut appeler à nouveau put _ Size . Le filtre de redimensionnement doit reconnecter sa broche de sortie avec la nouvelle taille.
  • À l’intérieur de la méthode CTransformFilter :: Transform du filtre, étendez la vidéo d’entrée à la taille de sortie.
  • Votre filtre ne doit jamais définir l’indicateur de discontinuité sur l’exemple de sortie, ni attacher un type de média à l’exemple de sortie.
  • Pour enregistrer l’état du filtre dans un fichier GraphEdit (. GRF), implémentez l’interface IPersistStream . (Cette option est facultative, mais utile pour les tests.)

Pour utiliser le filtre de redimensionnement, le filtre doit être inscrit en tant qu’objet COM sur le système de l’utilisateur. Avant que l’application n’affiche le projet vidéo, interrogez le moteur de rendu de l’interface IRenderEngine2 et appelez IRenderEngine2 :: SETRESIZERGUID avec le CLSID du filtre de redimensionnement.

Rendu d’un Project