Share via


À propos des exemples multimédias et des allocateurs

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

Les filtres fournissent des données entre les connexions de broches. Les données passent de la broche de sortie d’un filtre à la broche d’entrée d’un autre filtre. La méthode la plus courante pour que la broche de sortie fournisse les données consiste à appeler la méthode IMemInputPin::Receive sur l’entrée, bien que quelques autres mécanismes existent également.

Selon le filtre, la mémoire des données multimédias peut être allouée de différentes manières : sur le tas, dans une surface DirectDraw, à l’aide de la mémoire GDI partagée ou à l’aide d’un autre mécanisme d’allocation. L’objet responsable de l’allocation de la mémoire est appelé un allocator, qui est un objet COM qui expose l’interface IMemAllocator .

Lorsque deux broches se connectent, l’une des broches doit fournir un allocateur. DirectShow définit une séquence d’appels de méthode qui est utilisée pour établir quelle broche fournit l’allocateur. Les broches conviennent également du nombre de mémoires tampons créées par l’allocateur et de la taille des mémoires tampons.

Avant le début de la diffusion en continu, l’allocateur crée un pool de mémoires tampons. Pendant la diffusion en continu, le filtre amont remplit les mémoires tampons avec des données et les remet au filtre en aval. Toutefois, le filtre amont ne donne pas aux filtres en aval des pointeurs bruts vers les mémoires tampons. Au lieu de cela, il utilise des objets COM appelés exemples multimédias, que l’allocateur crée pour gérer les mémoires tampons. Les exemples multimédias exposent l’interface IMediaSample . Un exemple de média contient :

  • pointeur vers la mémoire tampon sous-jacente
  • horodatage
  • différents indicateurs
  • si vous le souhaitez, un type de média

L’horodatage définit l’heure de présentation, que le filtre du convertisseur utilise pour planifier le rendu. Les indicateurs indiquent par exemple s’il y a eu une interruption des données depuis l’exemple précédent. Le type de média permet aux filtres de modifier les formats à mi-flux. En règle générale, l’exemple n’a aucun type de média, ce qui indique que le format n’a pas changé depuis l’exemple précédent.

Lorsqu’un filtre utilise une mémoire tampon, il contient le nombre de références sur l’exemple. L’allocateur utilise le nombre de références pour déterminer quand il peut réutiliser la mémoire tampon. Cela empêche un filtre de remplacer une mémoire tampon qu’un autre filtre utilise toujours. Un exemple ne retourne pas au pool d’exemples disponibles de l’allocator tant que chaque filtre n’a pas libéré.

Pour plus d'informations, voir les rubriques suivantes :

Les rubriques suivantes sont destinées aux développeurs qui écrivent leurs propres filtres personnalisés :

Le graphe de filtre et ses composants