Partager via


traitement In-Place

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

Certaines transformations de données peuvent être effectuées en modifiant directement les données. C’est ce qu’on appelle le traitement sur place . De nombreux effets audio et vidéo peuvent être réalisés de cette manière. Si un DMO prend en charge le traitement sur place, il expose l’interface IMediaObjectInPlace . Le traitement sur place est généralement plus efficace que l’utilisation de mémoires tampons distinctes pour la sortie. (Une exception majeure est lorsque la mémoire tampon réside dans la mémoire vidéo. Dans ce cas, les opérations de lecture étant beaucoup plus lentes que les opérations d’écriture, le traitement sur place n’est pas recommandé.)

Pour traiter les données sur place, le client effectue un appel unique à la méthode IMediaObjectInPlace::P rocess , plutôt que des appels distincts à ProcessInput et ProcessOutput. La méthode Process est synchrone ; tout le traitement se produit à l’intérieur de l’appel. En outre, le traitement sur place n’utilise pas d’objets IMediaBuffer . La méthode Process prend un pointeur directement vers la mémoire tampon.

Un DMO qui prend en charge le traitement sur place doit toujours implémenter l’interface IMediaObject , y compris les méthodes ProcessInput et ProcessOutput . Le client peut choisir d’utiliser le traitement sur place ou d’utiliser des mémoires tampons distinctes. Toutefois, ne mélangez pas les deux types de traitement. Si vous appelez Process, n’appelez pas ProcessInput ou ProcessOutput, et vice versa.

Queues d’effet

Un DMO sur place peut créer une sortie supplémentaire après l’arrêt de l’entrée. C’est ce qu’on appelle une queue d’effet. Par exemple, un effet de réverbération se poursuit une fois que l’entrée a atteint le silence. S’il existe une fin d’effet, la méthode Process retourne S_FALSE. Une fois que l’application a traité toutes ses données, elle peut générer la fin de l’effet en envoyant des mémoires tampons vides à la méthode Process .

Hébergement direct d’un DMO