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, IMFMediaEnginey captura de audio y 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 captura de audio y vídeo 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 la patilla 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 la patilla 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 la patilla VP al filtro de Video Port Manager y conecte el Administrador de puertos de vídeo al VMR-7.
- VMR-9: No puede usar VMR-9 si el dispositivo tiene un pin VP, ya que Direct3D 9 no admite puertos de vídeo. Use Video Renderer o VMR-7.
En escenarios de puerto de vídeo, se recomienda overlay Mixer y Video Renderer a través del Administrador de puertos de vídeo y VMR-7, ya que no todos los controladores admiten el Administrador de puertos de vídeo. En general, overlay Mixer 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.
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 grafo, llame a findPin de nuevo para buscar el pin 0 en el mezclador de superposición. El pin 0 siempre es el primer pin de entrada del filtro.
pBuild->FindPin(pOvMix, PINDIR_INPUT, NULL, NULL, TRUE, 0, &pOVPin);
Conecte los dos pines llamando a IGraphBuilder::Connect.
pGraph->Connect(pVPPin, pOvPin);
A continuación, conecte el pin de salida del mezclador de superposición al filtro Video Renderer. Puede ocultar el vídeo llamando a los métodos IVideoWindow::p ut_AutoS how y 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 a la filtro de asignador de superficie de VBI. Para obtener más información, consulte Visualización de subtítulos.
Temas relacionados
-
usar el mezclador de superposición en el de captura de vídeo