Partager via


Modèle d’extraction

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

Dans l’interface IMemInputPin, le filtre amont détermine les données à envoyer et envoie les données au filtre en aval. Pour certains filtres, un modèle d’extraction est plus approprié. Ici, le filtre en aval demande des données à partir du filtre amont. Les échantillons circulent toujours en aval, de la broche de sortie à la broche d’entrée, mais le filtre en aval lance le flux de données. Ce type de connexion utilise l’interface IAsyncReader .

L’utilisation classique du modèle d’extraction est dans la lecture de fichiers. Par exemple, dans un graphique de lecture AVI, le filtre source de fichier Async effectue des opérations de lecture de fichiers génériques et fournit les données sous forme de flux d’octets, sans informations de format. Le filtre de fractionnement AVI lit les en-têtes AVI et analyse le flux dans des exemples vidéo et audio. Le fractionnement AVI peut déterminer les données dont il a besoin mieux que le filtre source de fichier asynchrone, et par conséquent, il utilise IAsyncReader au lieu d’IMemInputPin.

Pour demander des données à partir de la broche de sortie, la broche d’entrée appelle l’une des méthodes suivantes :

La première méthode est asynchrone, pour prendre en charge plusieurs lectures qui se chevauchent. Les autres sont synchrones.

En théorie, n’importe quel filtre peut prendre en charge IAsyncReader, mais dans la pratique, il est conçu pour les filtres sources qui se connectent aux filtres d’analyseur. L’analyseur agit très comme un filtre source dans le modèle push. Lorsqu’il s’interrompt, il crée un thread de streaming qui extrait les données de la connexion IAsyncReader et les envoie en aval. Les broches de sortie utilisent IMemInputPin et le reste du graphique utilise le modèle push standard.

Data Flow dans le graphe de filtre