Compartir a través de


CDynamicOutputPin (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.

La CDynamicOutputPin clase implementa un pin de salida que admite reconexión dinámica y cambios de formato.

Esta clase deriva de la clase CBaseOutputPin e implementa la interfaz IPinFlowControl . Admite varias operaciones que son importantes para la creación dinámica de grafos:

  • Reconexión dinámica: el pin puede desconectarse y volver a conectarse mientras el filtro sigue activo (en pausa o en ejecución).
  • Cambio de formato dinámico: el pin puede negociar un nuevo tipo de medio mientras el filtro sigue activo, sin volver a conectarse.
  • Control de flujo: el filtro propietario (o una aplicación) puede bloquear el flujo de datos desde el pin sin detener el filtro.

Para obtener más información, vea Dynamic Graph Building.

El pin tiene tres estados posibles: bloqueado, desbloqueado y pendiente. En el estado pendiente , el pin está esperando que se complete alguna operación en otro subproceso, antes de que el pin cambie al estado bloqueado. Mientras se bloquea el pin, el filtro no puede entregar datos a través del pin o cambiar la conexión del pin.

Para coordinar entre varios subprocesos, el filtro propietario debe seguir ciertas reglas. (Para obtener más información sobre los subprocesos en el gráfico de filtros, vea Subprocesos y secciones críticas). En primer lugar, el subproceso de streaming siempre debe llamar al método CDynamicOutputPin::StartUsingOutputPin antes de llamar a cualquiera de los métodos siguientes:

Después, debe llamar al método CDynamicOutputPin::StopUsingOutputPin .

En segundo lugar, el subproceso de aplicación no debe llamar a ninguno de los métodos de la lista anterior. En tercer lugar, el subproceso de streaming no debe llamar a los métodos de clase que bloquean o desbloquean el pin. Estos métodos son: CDynamicOutputPin::Block, CDynamicOutputPin::SynchronousBlockOutputPin, CDynamicOutputPin::SyncBlockOutputPin y CDynamicOutputPin::UnblockOutputPin.

Estas reglas garantizan que el subproceso de la aplicación no puede bloquear la patilla mientras el subproceso de streaming lo usa y viceversa. Una vez que el subproceso de streaming haya llamado a StartUsingOutputPin, el pin no se bloqueará hasta que el subproceso de streaming llame a StopUsingOutputPin. Por el contrario, si el pin está bloqueado, StartUsingOutputPin espera hasta que se desbloquee el pin.

Para evitar olvidarse de llamar a StopUsingOutputPin, puede usar la clase CAutoUsingOutputPin . Llama automáticamente a StopUsingOutputPin cuando sale del ámbito.

Cuando el filtro propietario se une o deja el gráfico de filtros (en su método IBaseFilter::JoinFilterGraph ), debe llamar al método CDynamicOutputPin::SetConfigInfo del pin.

Variables miembro protegidas Descripción
m_BlockStateLock Sección crítica que protege el estado de bloqueo.
m_hUnblockOutputPinEvent Evento que se señala cuando el pin no está bloqueado.
m_hNotifyCallerPinBlockedEvent Evento que se señala cuando el anclaje se bloquea correctamente o el usuario cancela un bloque pendiente.
m_BlockState Estado de bloqueo.
m_dwBlockCallerThreadID Identificador del subproceso que llamó por última vez al método IPinFlowControl::Block en este pin.
m_dwNumOutstandingOutputPinUsers Número de subprocesos de streaming que usan este pin.
m_hStopEvent Evento que se señala cuando el filtro se detiene o el pin vacía los datos.
m_pGraphConfig Puntero a la interfaz IGraphConfig para realizar reconectaciones dinámicas.
m_bPinUsesReadOnlyAllocator Marca que especifica si las muestras del asignador del pin son de solo lectura.
Métodos protegidos Descripción
SynchronousBlockOutputPin Bloquea el pin; no devuelve hasta que se bloquee el pin.
AsynchronousBlockOutputPin Bloquea el pin; es posible que se devuelva antes de que se bloquee el pin.
DesbloquearOutputPin Desbloquea el pin.
BlockOutputPin Bloquea el pin.
WaitEvent Espera hasta que se señale el evento especificado.
Métodos públicos Descripción
CDynamicOutputPin Método constructor.
~CDynamicOutputPin Método de destructor.
SetConfigInfo Especifica el puntero IGraphConfig y el evento stop.
DeliverBeginFlush Solicita el pin de entrada conectado para iniciar una operación de vaciado.
DeliverEndFlush Solicita el pin de entrada conectado para finalizar una operación de vaciado.
Inactivo Notifica al pin que el filtro se ha detenido.
Activo Notifica al pin que el filtro ahora está activo.
CompleteConnect Completa una conexión a un pin de entrada. Virtual.
StartUsingOutputPin Obtiene acceso al pin de una operación de streaming. Virtual.
StopUsingOutputPin Libera el acceso al pin después de una operación de streaming. Virtual.
StreamingThreadUsingOutputPin Determina si algún subproceso está realizando una operación de streaming en la patilla. Virtual.
ChangeOutputFormat Cambia dinámicamente el tipo de medio para la conexión y proporciona información de segmento nueva.
ChangeMediaType Cambia dinámicamente el tipo de medio de la conexión.
DynamicReconnect Realiza una reconexión dinámica con un nuevo tipo de medio.
Métodos IPin Descripción
Desconectar Interrumpe la conexión de patillas actual.
Métodos IPinFlowControl Descripción
Bloquear Bloquea o desbloquea el flujo de datos del pin.

Requisitos

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