Compartir a través de


Cómo participan los dispositivos de hardware en el gráfico de filtros

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

En este artículo se describe cómo DirectShow interactúa con el hardware de audio y vídeo.

Filtros de contenedor

Todos los filtros DirectShow son componentes de software en modo de usuario. Para que un dispositivo de hardware en modo kernel, como una tarjeta de captura de vídeo, se una un gráfico de filtros DirectShow, el dispositivo debe representarse como filtro en modo de usuario. Esta función se realiza mediante filtros especializados de "contenedor" proporcionados con DirectShow. Estos filtros incluyen el filtro de captura de audio , el filtro de captura VFW , el filtro de tuner de TV , el filtro audio de TV y el filtro de barra cruzada de vídeo analógico . DirectShow también proporciona un filtro denominado KsProxy, que puede representar cualquier tipo de dispositivo de streaming del modelo de controlador de Windows (WDM). Los proveedores de hardware pueden ampliar KsProxy para admitir la funcionalidad personalizada, proporcionando un complemento Ksproxy, que es un objeto COM agregado por KsProxy.

Los filtros de contenedor exponen interfaces COM que representan las funcionalidades del dispositivo. La aplicación usa estas interfaces para pasar información hacia y desde el filtro. El filtro traduce las llamadas del método COM a las llamadas del controlador del dispositivo, pasa esa información al controlador en modo kernel y, a continuación, convierte el resultado de nuevo en la aplicación. Los filtros Tv Tuner, TV Audio, Analog Video Crossbar y KsProxy admiten propiedades de controlador personalizadas a través de la interfaz IKsPropertySet . El filtro de captura de VFW y el filtro captura de audio no son extensibles de esta manera.

En el caso de los desarrolladores de aplicaciones, los filtros de contenedor permiten que la aplicación controle los dispositivos igual que cualquier otro filtro directShow. No se requiere programación especial; Los detalles de la comunicación con el dispositivo en modo kernel se encapsulan dentro del filtro.

Vídeo para dispositivos Windows

El filtro de captura de VFW admite tarjetas de captura de Vídeo para Windows (VfW). Cuando una tarjeta VfW está presente en el sistema de destino, se puede detectar y agregar al gráfico de filtros mediante el enumerador de dispositivos del sistema DirectShow. Para obtener más información, consulte Enumerar dispositivos y filtros.

Dispositivos de mezcla y captura de audio (tarjetas de sonido)

Las tarjetas de sonido más recientes tienen conectores de entrada para micrófonos y otros tipos de dispositivos. Normalmente, estas tarjetas también tienen funcionalidades de mezcla a bordo para controlar el volumen, el treble y el bajo de cada entrada individual. En DirectShow, las entradas y el mezclador de la tarjeta de sonido se encapsulan mediante el filtro Captura de audio. Cada tarjeta de sonido se puede detectar con el enumerador de dispositivos del sistema. Para ver las tarjetas de sonido en el sistema, ejecute GraphEdit y seleccione en la categoría Orígenes de captura de audio. Cada filtro de esa categoría es una instancia independiente del filtro Captura de audio. (Consulte Uso de GraphEdit).

Dispositivos de streaming de WDM

Los descodificadores de hardware y las tarjetas de captura más recientes se ajustan a la especificación del modelo de controlador de Windows (WDM). Estos dispositivos tienen una mayor funcionalidad que los dispositivos VfW. Las tarjetas de captura de vídeo WDM pueden admitir características que no están disponibles en VfW, incluida la enumeración de formatos de captura, el control mediante programación de parámetros de vídeo, como el tono y el brillo, la selección de entrada mediante programación y la compatibilidad con tuner de TV.

Para admitir dispositivos de streaming de WDM, DirectShow proporciona el filtro KsProxy (ksproxy.ax). KsProxy se ha llamado el "filtro de cuchillo del ejército suizo" porque hace tantas cosas diferentes. El número de patillas del filtro y el número de interfaces COM expuestas por el filtro dependen de las funcionalidades del controlador subyacente. KsProxy no aparece en el gráfico de filtros bajo el nombre "KsProxy". Siempre toma el nombre descriptivo del dispositivo, que se encuentra en el registro. Para ver los dispositivos WDM en el sistema, ejecute GraphEdit y seleccione en las categorías de streaming de WDM. Incluso si solo tiene una tarjeta WDM en el sistema, esa tarjeta podría contener más de un dispositivo. Cada dispositivo se representa como un filtro independiente y cada uno de estos filtros es en realidad KsProxy.

Una aplicación usa el enumerador de dispositivos del sistema para buscar monikers de dispositivos WDM en el sistema. KsProxy se crea una instancia mediante una llamada a BindToObject en el moniker. Dado que KsProxy puede representar todo tipo de dispositivos WDM, debe consultar al controlador para determinar qué propiedad establece el controlador. Los conjuntos de propiedades son colecciones de estructuras de datos usadas por los controladores WDM y también por algunos filtros de modo de usuario, como los descodificadores de software MPEG-2. KsProxy se configura para exponer las interfaces COM que corresponden a esos conjuntos de propiedades. KsProxy traduce las llamadas de método COM a conjuntos de propiedades y las envía al controlador. Los proveedores de hardware pueden ampliar KsProxy proporcionando complementos, que son interfaces específicas del proveedor que exponen las funcionalidades especiales de un dispositivo. Todos estos detalles están ocultos de la aplicación. La aplicación controla el dispositivo mediante KsProxy, de la misma manera que cualquier otro filtro directShow.

Kernel Streaming

Los dispositivos WDM admiten el streaming del kernel, en el que los datos se transmiten completamente en modo kernel sin cambiar nunca al modo de usuario. El cambio entre el modo kernel y el modo de usuario es costoso computacionalmente; el streaming de kernel permite velocidades de bits altas sin sobrecargar la CPU del host. Los filtros basados en WDM pueden usar el streaming de kernel para pasar datos multimedia directamente desde un dispositivo de hardware a otro, ya sea en la misma tarjeta o en una tarjeta diferente, sin copiar los datos en la memoria principal del sistema.

Desde el punto de vista de una aplicación, aparece como si los datos se mueven de un filtro en modo de usuario a la siguiente. En realidad, es posible que los datos nunca pasen al modo de usuario, sino que se puedan transmitir directamente desde un dispositivo en modo kernel a otro hasta que se represente en la tarjeta gráfica de vídeo. Algunos escenarios, como la captura en un archivo, requieren que los datos pasen del modo kernel al modo de usuario en algún momento. Sin embargo, este modificador no requiere necesariamente que los datos se copien en una nueva ubicación en la memoria.

Por lo general, los desarrolladores de aplicaciones no necesitan preocuparse por los detalles del streaming del kernel, excepto como información en segundo plano. Consulte Microsoft DDK para obtener información más detallada sobre WDM, streaming de kernel, KsProxy y temas relacionados.

Gráfico de filtros y sus componentes