Notificaciones de fin de secuencia
[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.
Cuando un filtro de origen ha terminado de enviar datos, llama al método IPin::EndOfStream en el pin de entrada de bajada. El filtro de bajada propaga la llamada al siguiente filtro, etc. Cuando la llamada a EndOfStream llega al representador, el representador envía un evento EC_COMPLETE al Administrador de gráficos de filtros. Si el representador tiene varios pines de entrada, entrega el evento EC_COMPLETE después de que cada pin de entrada haya recibido la notificación de fin de secuencia.
Un filtro debe serializar las llamadas EndOfStream con otras llamadas de streaming, como IMemInputPin::Receive. (En otras palabras, el filtro de bajada siempre debe recibir las llamadas en el orden correcto).
En algunos casos, un filtro de bajada podría detectar el final de la secuencia antes de que lo haga el filtro de origen. (Por ejemplo, el filtro de bajada podría analizar la secuencia). En ese caso, el filtro de bajada puede enviar la notificación de fin de secuencia, en cuyo caso debe devolver S_FALSE desde IMemInputPin::Receive hasta que el gráfico se detenga o vacíe. El valor devuelto S_FALSE informa al filtro de origen para dejar de enviar datos.
Control predeterminado de EC_COMPLETE
De forma predeterminada, el Administrador de gráficos de filtros no reenvía todos los eventos de EC_COMPLETE a la aplicación. En su lugar, espera hasta que todas las secuencias hayan señalado EC_COMPLETE y, a continuación, envíe un único evento de EC_COMPLETE. Por lo tanto, la aplicación recibe el evento después de que se haya completado cada secuencia.
Para determinar el número de secuencias, Filter Graph Manager cuenta el número de filtros que admiten la búsqueda (a través de IMediaSeeking o IMediaPosition) y tienen un pin de entrada representado , que se define como un pin de entrada sin salidas correspondientes. El Administrador de gráficos de filtros determina si una patilla se representa de una de estas dos maneras:
- El método IPin::QueryInternalConnections del pin devuelve cero en el parámetro nPin .
- El filtro expone la interfaz IAMFilterMiscFlags y devuelve la marca AM_FILTER_MISC_FLAGS_IS_RENDERER.
Notificaciones de fin de secuencia en modo de extracción
En una conexión IAsyncReader , el filtro de origen no envía una notificación de fin de secuencia. Instread, esto se realiza mediante el filtro de bajada, que suele ser un filtro de analizador. El analizador envía la llamada EndOfStream de bajada. No envía una ascendente al filtro de origen.
Temas relacionados