CBaseRenderer (clase)

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

Jerarquía de clases cbaserenderer

La CBaseRenderer clase es una clase base para implementar filtros de representador. Admite un pin de entrada, implementado por la clase CRendererInputPin . Para usar esta clase, declare una clase derivada que hereda CBaseRenderer. Como mínimo, la clase derivada debe implementar los métodos siguientes, que se declaran como virtuales puros en la clase base:

La clase base controla los cambios de estado y los problemas de sincronización. También programa ejemplos para la representación, aunque no implementa ninguna medida de control de calidad. La clase base también declara varios métodos de "controlador". Estos son métodos a los que el filtro llama en puntos específicos del proceso de streaming. No hacen nada en la clase base, pero la clase derivada puede invalidarlos. En la tabla siguiente, se muestran bajo el encabezado Métodos públicos: Controladores.

El controlador CBaseRenderer::OnReceiveFirstSample merece una mención especial. El filtro llama a este método si recibe un ejemplo mientras el filtro está en pausa. Esto puede ocurrir si el gráfico cambia de detenido a en pausa, o si se busca el gráfico mientras está en pausa. Normalmente, los representadores de vídeo usan el ejemplo para mostrar un fotograma todavía. Cuando el filtro cambia de pausa a en ejecución, envía el mismo ejemplo al método CBaseRenderer::D oRenderSample , como primer ejemplo de la secuencia.

La CBaseRenderer clase expone las interfaces IMediaSeeking e IMediaPosition a través del objeto CRendererPosPassThru . Pasa todas las solicitudes de búsqueda al siguiente filtro ascendente.

Scheduling

Cuando el filtro ascendente llama al método IMemInputPin::Receive del pin de entrada para entregar un ejemplo, el pin pasa esta llamada al método CBaseRenderer::Receive del filtro. El filtro quita el ejemplo, lo representa inmediatamente o lo programa para su representación.

Si el ejemplo no tiene marcas de tiempo o si no hay ningún reloj de referencia disponible, el filtro representa el ejemplo inmediatamente. De lo contrario, el filtro llama al método CBaseRenderer::ShouldDrawSampleNow para determinar qué hacer. De forma predeterminada, el ejemplo se programa en función de sus marcas de tiempo. La clase derivada puede invalidar ShouldDrawSampleNow para admitir el control de calidad.

Para programar un ejemplo, el filtro llama al método IReferenceClock::AdviseTime , que crea una solicitud de aviso. A continuación, el método Receive se bloquea hasta la hora programada o hasta que el filtro cambie de estado. El bloqueo impide que el filtro ascendente entregue más muestras hasta que se represente la muestra actual.

Cuando el filtro ascendente llama al método IPin::EndOfStream para indicar el final de la secuencia, el filtro envía un evento EC_COMPLETE al administrador de gráficos de filtros. El filtro espera el tiempo de detención del ejemplo actual antes de enviar el evento.

Variables miembro protegidas Descripción
m_bAbort Marca que indica si se detiene la representación y se rechazan más ejemplos.
m_bEOS Marca que indica si se alcanzó el final del flujo.
m_bEOSDelivered Marca que indica si el filtro ha publicado el evento EC_COMPLETE.
m_bInReceive Marca que indica si el filtro está procesando una llamada Receive .
m_bRepaintStatus Marca que habilita o deshabilita los eventos de reintentos.
m_bStreaming Marca que indica si el filtro es datos de streaming.
m_dwAdvise Identificador del evento del temporizador que programa la representación.
m_EndOfStreamTimer Identificador de evento del temporizador para programar EC_COMPLETE notificaciones.
m_evComplete Evento que se señala cuando se completa una transición de estado.
m_InterfaceLock Bloqueo de estado de filtro.
m_ObjectCreationLock Bloquear para proteger la creación de objetos dentro del filtro.
m_pInputPin Puntero al pin de entrada del filtro.
m_pMediaSample Puntero al ejemplo de medio actual.
m_pPosition Objeto auxiliar para pasar comandos seek ascendentes.
m_pQSink Puntero al objeto que recibe mensajes de control de calidad.
m_RendererLock Bloqueo de streaming.
m_RenderEvent Evento usado para programar la representación.
m_SignalTime Hora de detención en el ejemplo actual.
m_ThreadSignal Evento usado para liberar el subproceso de streaming.
Métodos públicos Descripción
CancelNotification Cancela el evento del temporizador que programa la representación. Virtual.
CBaseRenderer Método constructor.
~CBaseRenderer Método de destructor.
GetMediaPositionInterface Recupera los punteros de interfaz IMediaPosition e IMediaSeeking del filtro. Virtual.
GetPin Recupera un pin. Virtual.
GetPinCount Recupera el número de patillas. Virtual.
GetSampleTimes Recupera las marcas de tiempo de un ejemplo. Virtual.
OnDisplayChange Publica un evento de EC_DISPLAY_CHANGED en el administrador de gráficos de filtros.
PrepareReceive Se prepara para representar un ejemplo. Virtual.
Recepción Recibe el siguiente ejemplo multimedia en la secuencia. Virtual.
Representación Representa un ejemplo. Virtual.
ScheduleSample Programa un ejemplo para la representación. Virtual.
SendNotifyWindow Notifica al filtro ascendente del identificador de ventana de vídeo.
SendRepaint Envía un evento repaint al administrador de gráficos de filtros.
SetMediaType Se llama cuando se establece el tipo de medio del pin. Virtual.
SignalTimerFired Borra el identificador del temporizador usado para programar la representación.
SourceThreadCanWait Contiene o libera el subproceso de streaming. Virtual.
WaitForReceiveToComplete Espera a que se complete el método CBaseRenderer::Receive .
WaitForRenderTime Espera el tiempo de presentación del ejemplo actual. Virtual.
Métodos públicos: métodos de descriptor de acceso Descripción
ClearPendingSample Libera el ejemplo actual. Virtual.
GetCurrentSample Recupera el ejemplo actual. Virtual.
GetRealState Recupera el estado del filtro.
GetRenderEvent Recupera el evento que programa la representación.
HaveCurrentSample Determina si el filtro tiene un ejemplo. Virtual.
IsEndOfStream Consulta si se recibió la notificación de fin de secuencia.
IsEndOfStreamDelivered Consulta si el evento EC_COMPLETE se ha entregado al administrador de gráficos de filtros.
IsStreaming Consulta si el filtro es datos de streaming.
SetAbortSignal Establece una marca que indica si se va a detener la representación y rechazar más ejemplos.
SetRepaintStatus Habilita o deshabilita los eventos de reintentos.
Métodos públicos: métodos de State-Change Descripción
Activo Se llama cuando el estado se cambia a en pausa o en ejecución. Virtual.
BeginFlush Inicia una operación de vaciado. Virtual.
BreakConnect Libera el pin de entrada de una conexión. Virtual.
CheckReady Consulta si se ha completado una transición de estado.
CompleteConnect Completa la conexión del pin de entrada a otro pin. Virtual.
CompleteStateChange Determina si se ha completado una transición al estado en pausa. Virtual.
EndFlush Finaliza una operación de vaciado. Virtual.
Inactivo Se llama cuando el estado se cambia a detenido. Virtual.
NotReady Indica que aún no se ha completado una transición de estado.
Listo Indica que se ha completado una transición de estado.
StartStreaming Inicia el streaming cuando el filtro cambia a un estado en ejecución. Virtual.
StopStreaming Detiene el streaming cuando el filtro sale del estado en ejecución. Virtual.
Métodos públicos: métodos de fin de secuencia Descripción
EndOfStream Notifica al filtro que el pin de entrada recibió una notificación de fin de secuencia. Virtual.
NotifyEndOfStream Publica un evento EC_COMPLETE en el administrador de gráficos de filtros.
ResetEndOfStream Restablece las marcas de fin de secuencia.
ResetEndOfStreamTimer Cancela el temporizador que programa EC_COMPLETE notificaciones. Virtual.
SendEndOfStream Si se alcanzó el final del flujo, programa un evento de EC_COMPLETE para el administrador de gráficos de filtros. Virtual.
TimerCallback Método de devolución de llamada para el evento de temporizador de fin de secuencia.
Métodos públicos: controladores Descripción
OnReceiveFirstSample Se llama cuando el filtro recibe un ejemplo mientras está en pausa. Virtual.
OnRenderEnd Se llama después de representar un ejemplo. Virtual.
OnRenderStart Se llama cuando la representación está a punto de iniciarse. Virtual.
OnStartStreaming Se llama cuando el filtro comienza a transmitirse. Virtual.
OnStopStreaming Se llama cuando el filtro detiene el streaming. Virtual.
OnWaitEnd Se llama cuando el filtro se realiza esperando el tiempo de presentación de un ejemplo. Virtual.
OnWaitStart Se llama cuando el filtro comienza a esperar el tiempo de presentación de un ejemplo. Virtual.
PrepareRender Se llama antes de que el filtro represente un ejemplo. Virtual.
ShouldDrawSampleNow Determina cómo se programa un ejemplo para la representación. Virtual.
Métodos virtuales puros Descripción
CheckMediaType Determina si el filtro acepta un tipo de medio específico.
DoRenderSample Representa un ejemplo.
Métodos IMediaFilter Descripción
GetState Recupera el estado del filtro (en ejecución, detenido o en pausa).
Pausa Pausa el filtro.
Ejecutar Ejecuta el filtro.
Stop Detiene el filtro.
Métodos IBaseFilter Descripción
FindPin Recupera el pin con el identificador especificado.

Requisitos

Requisito Value
Encabezado
Renbase.h (include Streams.h)
Biblioteca
Strmbase.lib (compilaciones comerciales);
Strmbasd.lib (compilaciones de depuración)