Compartir a través de


Patillas de puerto de vídeo

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

Un dispositivo de captura con un puerto de vídeo de hardware podría usar las extensiones de puerto de vídeo (VPE) en Microsoft® DirectX®. Si es así, el filtro de captura tendrá un pin de puerto de vídeo (VP). Ningún dato de vídeo viaja desde el pin vp a través del gráfico de filtros. En su lugar, los fotogramas de vídeo se generan en hardware y se envían directamente a la memoria de vídeo. La patilla VP permite enviar mensajes de control al hardware.

Es importante conectar el pin VP, incluso si la aplicación solo realiza la captura de archivos sin vista previa. Si deja el anclaje sin conectar, el gráfico no se ejecutará correctamente. Esto es diferente de los patillas de vista previa, que no tienen que estar conectados.

Los diferentes representadores de vídeo directShow proporcionan compatibilidad variable con patillas VP:

  • Representador de vídeo: conecte el pin VP para anclar 0 en el filtro Mezclador de superposición y conecte el filtro Mezclador de superposición al representador de vídeo.
  • VMR-7: conecte el pin VP al filtro Video Port Manager y conecte video Port Manager al VMR-7.
  • VMR-9: No puede usar VMR-9 si el dispositivo tiene un pin VP, porque Direct3D 9 no admite puertos de vídeo. Use Video Renderer o VMR-7.

Para escenarios de puerto de vídeo, se recomienda superponer mezclador y Video Renderer a través del Administrador de puertos de vídeo y VMR-7, ya que no todos los controladores admiten video Port Manager. En general, el mezclador de superposición es la opción más confiable para los puertos de vídeo.

El método ICaptureGraphBuilder2::RenderStream inserta automáticamente el mezclador de superposición si hay un pin VP. Si va a compilar el grafo sin usar este método, debe comprobar si hay un pin de puerto de vídeo en el filtro de captura y, si hay uno presente, conéctelo al filtro Mezclador de superposición, como se muestra en el diagrama siguiente.

conectando un pin de puerto de vídeo al filtro mezclador de superposición.

Puede usar el método ICaptureGraphBuilder2::FindPin para buscar un pin VP en el filtro de captura:

hr = pBuild->FindPin(
    pCap,                    // Pointer to the capture filter.
    PINDIR_OUTPUT,           // Look for an output pin.
    &PIN_CATEGORY_VIDEOPORT, // Look for a video port pin.
    NULL,                    // Any media type.
    FALSE,                   // Pin can be connected.
    0,                       // Retrieve the first matching pin.
    &pVPPin                  // Receives a pointer to the pin.
);

Después de agregar el mezclador de superposición al gráfico, llame a FindPin de nuevo para buscar el pin 0 en el mezclador de superposición. Pin 0 es siempre el primer pin de entrada del filtro.

pBuild->FindPin(pOvMix, PINDIR_INPUT, NULL, NULL, TRUE, 0, &pOVPin);

Conecte los dos patillas mediante una llamada a IGraphBuilder::Connect.

pGraph->Connect(pVPPin, pOvPin);

A continuación, conecte el pin de salida del mezclador de superposición al filtro Video Renderer. Para ocultar el vídeo, llame a los métodos IVideoWindow::p ut_AutoShow e IVideoWindow::p ut_Visible en el Administrador de gráficos de filtros.

En el caso de los sintonizadores de TV, el filtro de captura también puede tener un pin VBI de puerto de vídeo (PIN_CATEGORY_VIDEOPORT_VBI). Si es así, conecte ese pin al filtro de asignador de Superficie VBI . Para obtener más información, vea Ver subtítulos.

Temas de captura avanzada

Usar el mezclador de superposición en la captura de vídeo