Compartir a través de


Filtros de captura de vídeo de DirectShow

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

Los filtros de captura de DirectS tienen algunas características que las distinguen de otros tipos de filtros. Aunque Capture Graph Builder oculta muchos de los detalles, es una buena idea leer esta sección, con el fin de tener un conocimiento general de los gráficos de captura de DirectShow.

Categorías de patillas

Un filtro de captura suele tener dos o más pines de salida que entregan el mismo tipo de datos, por ejemplo, un pin de vista previa y un pin de captura. Por lo tanto, los tipos de medios no son una buena manera de distinguir los patillas. En su lugar, los pines se distinguen por su funcionalidad, que se identifica mediante un GUID, denominado categoría de patillas.

Para obtener una explicación sobre cómo consultar patillas para su categoría, vea Trabajar con categorías de pin. Sin embargo, para la mayoría de las aplicaciones, no tendrá que consultar las patillas directamente. En su lugar, varios métodos ICaptureGraphBuilder2 toman parámetros que especifican la categoría de patillas en la que se va a operar. Capture Graph Builder busca automáticamente el pin correcto.

Anclares de vista previa y pins de captura

Algunos dispositivos de captura de vídeo tienen patillas de salida independientes para la vista previa y captura. El pin de vista previa se usa para representar vídeo en la pantalla, mientras que el pin de captura se usa para escribir vídeo en un archivo.

Un pin de vista previa y un pin de captura tienen las siguientes diferencias:

  • Un pin de vista previa quita fotogramas según sea necesario para mantener el rendimiento en el pin de captura.
  • Cada fotograma de un pin de captura se marca con la hora de la secuencia cuando se capturó el fotograma. Un pin de vista previa no marca la hora de las muestras que entrega.

La razón por la que los fotogramas de vista previa no tienen marcas de tiempo es que el gráfico de filtros introduce una pequeña cantidad de latencia en la secuencia. Si el tiempo de captura se usa como tiempo de presentación, el representador de vídeo trata cada muestra como un poco tarde. Esto puede hacer que el representador de vídeo quite fotogramas mientras intenta ponerse al día. Quitar las marcas de tiempo garantiza que el representador presente cada muestra cuando llegue, sin quitar fotogramas.

La categoría de patillas de la versión preliminar es PIN_CATEGORY_PREVIEW. La categoría de pins de captura es PIN_CATEGORY_CAPTURE.

Pines de puerto de vídeo

Un puerto de vídeo es una conexión de hardware entre un dispositivo de vídeo (como un sintonizador de TV analógico) y la tarjeta de vídeo. Un puerto de vídeo permite al dispositivo enviar datos de vídeo directamente a la tarjeta gráfica. El vídeo se muestra en la pantalla mediante una superposición de hardware. Un puerto de vídeo podría ser un cable real que conecta dos dispositivos en tarjetas independientes; o puede ser una conexión cableada de forma dura en la misma tarjeta.

La ventaja de un puerto de vídeo es que el vídeo entra directamente en la memoria de vídeo, sin ningún trabajo por parte de la CPU. Sin embargo, los puertos de vídeo tienen algunos inconvenientes:

  • Un puerto de vídeo siempre usa la superficie de superposición durante la captura, independientemente de si desea obtener una vista previa del vídeo.
  • El volteo entre fotogramas se produce automáticamente, lo que dificulta la sincronización del volteo con otras operaciones de vídeo.

Si un dispositivo de captura usa un puerto de vídeo, el filtro de captura tiene un pin de puerto de vídeo en lugar de un pin de vista previa. La categoría de patillas del puerto de vídeo es PIN_CATEGORY_VIDEOPORT.

Cada filtro de captura tiene al menos un pin de captura. Además, podría tener un pin de vista previa o un pin de puerto de vídeo, pero nunca ambos. Los filtros pueden tener varios pines de captura y patillas de vista previa, cada uno de los cuales proporciona un tipo de medio independiente. Por lo tanto, un único filtro podría tener un pin de captura de vídeo, un pin de vista previa de vídeo, un pin de captura de audio y un pin de vista previa de audio. (Sin embargo, no hay nada equivalente a un puerto de vídeo para audio).

Filtros WDM ascendentes

Los dispositivos windows Driver Model (WDM) pueden requerir algunos filtros adicionales ascendentes del filtro de captura. Estos filtros incluyen lo siguiente:

  • Filtro de sintonizador de TV. Controla la optimización de los sintonizadores de TV analógicos.
  • Filtro de audio de TV. Controla la configuración de audio para los sintonizadores de TV analógicos.
  • Filtro de barra cruzada de vídeo analógico. Enruta las señales de vídeo y audio a través del dispositivo de hardware. Por ejemplo, un dispositivo puede tener varias entradas, como S-Video y vídeo compuesto. El filtro de barra cruzada permite a la aplicación seleccionar la entrada.

Aunque estos son filtros independientes en DirectShow, normalmente representan el mismo dispositivo de hardware. Cada filtro controla una función diferente del dispositivo. Los filtros están conectados mediante patillas, pero ningún dato multimedia se mueve a través de las conexiones de patillas. Por lo tanto, las patillas de estos filtros no se conectan estableciendo un tipo de medio. En su lugar, usan valores GUID denominados medios. Los GUID medianos se definen de forma única para un minidriver de dispositivo determinado. Por ejemplo, el filtro Tuner de TV y el filtro Captura de vídeo para la misma tarjeta de TV admitirán el mismo medio, lo que permite a la aplicación compilar el gráfico correctamente.

En la práctica, siempre y cuando use ICaptureGraphBuilder2 para compilar los gráficos de captura, estos filtros se agregan automáticamente al grafo. Para obtener una explicación más detallada, consulte Filtros de controlador de clase WDM.

Acerca de la captura de vídeo en DirectShow