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:
- CDynamicOutputPin::ChangeOutputFormat
- CDynamicOutputPin::ChangeMediaType
- CDynamicOutputPin::D ynamicReconnect
- CBaseOutputPin::D eliver
- CBaseOutputPin::D eliverEndOfStream
- CBaseOutputPin::D eliverNewSegment
- IMemInputPin::Receive
- IMemInputPin::ReceiveMultiple
- IPin::EndOfStream
- IPin::NewSegment
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 |
|
Biblioteca |
|