Compartir a través de


Modelo de extracción

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

En la interfaz IMemInputPin , el filtro ascendente determina qué datos se van a enviar e inserta los datos en el filtro de bajada. Para algunos filtros, un modelo de extracción es más adecuado. Aquí, el filtro de bajada solicita datos del filtro ascendente. Los ejemplos siguen moverse de bajada, desde el pin de salida hasta el pin de entrada, pero el filtro de bajada inicia el flujo de datos. Este tipo de conexión usa la interfaz IAsyncReader .

El uso típico del modelo de extracción está en la reproducción de archivos. Por ejemplo, en un gráfico de reproducción AVI, el filtro de origen de archivo asincrónico realiza operaciones genéricas de lectura de archivos y entrega los datos como una secuencia de bytes, sin información de formato. El filtro divisor AVI lee los encabezados AVI y analiza la secuencia en muestras de vídeo y audio. El divisor AVI puede determinar qué datos necesita mejor que el filtro de origen de archivo asincrónico y, por lo tanto, usa IAsyncReader en lugar de IMemInputPin.

Para solicitar datos del pin de salida, el pin de entrada llama a uno de los métodos siguientes:

El primer método es asincrónico, para admitir varias lecturas superpuestas. Los demás son sincrónicos.

En teoría, cualquier filtro puede admitir IAsyncReader, pero en la práctica está diseñado para filtros de origen que se conectan a filtros del analizador. El analizador actúa muy parecido a un filtro de origen en el modelo de inserción. Cuando se pausa, crea un subproceso de streaming que extrae datos de la conexión IAsyncReader e lo inserta en bajada. Los pines de salida usan IMemInputPin y el resto del grafo usa el modelo de inserción estándar.

Data Flow en el gráfico de filtros