Compartilhar via


Como os dispositivos de hardware participam do grafo de filtro

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Este artigo descreve como o DirectShow interage com o hardware de áudio e vídeo.

Filtros de wrapper

Todos os filtros do DirectShow são componentes de software do modo de usuário. Para que um dispositivo de hardware no modo kernel, como um cartão de captura de vídeo, ingresse em um grafo de filtro do DirectShow, o dispositivo deve ser representado como um filtro de modo de usuário. Essa função é executada por filtros "wrapper" especializados fornecidos com o DirectShow. Esses filtros incluem o filtro captura de áudio , o filtro captura VFW , o filtro sintonizador de TV , o filtro de áudio de TV e o filtro de barra cruzada vídeo analógico . O DirectShow também fornece um filtro chamado KsProxy, que pode representar qualquer tipo de dispositivo de streaming WDM (Modelo de Driver do Windows). Os fornecedores de hardware podem estender o KsProxy para dar suporte à funcionalidade personalizada, fornecendo um plug-in Ksproxy, que é um objeto COM agregado por KsProxy.

Os filtros wrapper expõem interfaces COM que representam os recursos do dispositivo. O aplicativo usa essas interfaces para passar informações de e para o filtro. O filtro converte as chamadas do método COM em chamadas de driver de dispositivo, passa essas informações para o driver no modo kernel e converte o resultado de volta para o aplicativo. Os filtros Sintonizador de TV, Áudio de TV, Barra Cruzada de Vídeo Analógico e KsProxy dão suporte a propriedades de driver personalizadas por meio da interface IKsPropertySet . O filtro captura VFW e o filtro de Captura de Áudio não são extensíveis dessa maneira.

Para desenvolvedores de aplicativos, os filtros de wrapper permitem que o aplicativo controle dispositivos assim como eles controlam qualquer outro filtro DirectShow. Nenhuma programação especial é necessária; os detalhes da comunicação com o dispositivo no modo kernel são encapsulados dentro do filtro.

Vídeo para dispositivos Windows

O filtro captura VFW dá suporte a cartões de captura de Vídeo para Windows (VfW). Quando um cartão VfW está presente no sistema de destino, ele pode ser descoberto e adicionado ao grafo de filtro usando o Enumerador de Dispositivo do Sistema DirectShow. Para obter detalhes, consulte Enumerando dispositivos e filtros.

Captura de áudio e combinação de dispositivos (placas de som)

As placas de som mais recentes têm entradas para microfones e outros tipos de dispositivos. Normalmente, esses cartões também têm recursos de combinação a bordo para controlar o volume, os agudos e os baixos de cada entrada individual. No DirectShow, as entradas e o mixer do cartão de som são encapsulados pelo filtro Captura de Áudio. Cada cartão de som pode ser descoberta com o Enumerador de Dispositivo do Sistema. Para exibir as placas de som em seu sistema, execute GraphEdit e selecione na categoria Fontes de Captura de Áudio. Cada filtro nessa categoria é uma instância separada do filtro de Captura de Áudio. (Consulte Usando GraphEdit.)

Dispositivos de streaming WDM

Os decodificadores de hardware e os cartões de captura mais recentes estão em conformidade com a especificação WDM (Modelo de Driver do Windows). Esses dispositivos têm maior funcionalidade do que os dispositivos VfW. As placas de captura de vídeo WDM podem dar suporte a recursos que não estão disponíveis no VfW, incluindo a enumeração de formatos de captura, controle programático de parâmetros de vídeo, como matiz e brilho, seleção de entrada programática e suporte ao Sintonizador de TV.

Para dar suporte a dispositivos de streaming WDM, o DirectShow fornece o filtro KsProxy (ksproxy.ax). KsProxy foi chamado de "filtro de Faca do Exército Suíço" porque faz tantas coisas diferentes. O número de pinos no filtro e o número de interfaces COM expostas pelo filtro dependem dos recursos do driver subjacente. KsProxy não aparece no grafo de filtro sob o nome "KsProxy". Ele sempre usa o nome amigável do dispositivo, que é encontrado no registro. Para exibir os dispositivos WDM em seu sistema, execute GraphEdit e selecione entre as categorias de Streaming do WDM. Mesmo que você tenha apenas um cartão WDM em seu sistema, esse cartão pode conter mais de um dispositivo. Cada dispositivo é representado como um filtro separado e cada um desses filtros é, na verdade, KsProxy.

Um aplicativo usa o Enumerador de Dispositivo do Sistema para localizar monikers de dispositivo WDM no sistema. O KsProxy é instanciado chamando BindToObject no moniker. Como o KsProxy pode representar todos os tipos de dispositivos WDM, ele deve consultar o driver para determinar quais conjuntos de propriedades o driver dá suporte. Conjuntos de propriedades são coleções de estruturas de dados usadas por drivers WDM e também por alguns filtros de modo de usuário, como decodificadores de software MPEG-2. O KsProxy configura-se para expor as interfaces COM que correspondem a esses conjuntos de propriedades. O KsProxy converte as chamadas de método COM em conjuntos de propriedades e as envia para o driver. Os fornecedores de hardware podem estender o KsProxy fornecendo plug-ins, que são interfaces específicas do fornecedor que expõem os recursos especiais de um dispositivo. Todos esses detalhes estão ocultos do aplicativo. O aplicativo controla o dispositivo por meio de KsProxy, da mesma forma que qualquer outro filtro directShow.

Kernel Streaming

Os dispositivos WDM dão suporte ao streaming de kernel, no qual os dados são transmitidos inteiramente no modo kernel sem nunca alternar para o modo de usuário. Alternar entre o modo kernel e o modo de usuário é computacionalmente caro; O streaming de kernel permite altas taxas de bits sem sobrecarregar a CPU do host. Os filtros baseados em WDM podem usar o streaming de kernel para passar dados multimídia diretamente de um dispositivo de hardware para outro, seja no mesmo cartão ou em um cartão diferente, sem copiar os dados para a memória main do sistema.

Do ponto de vista de um aplicativo, ele aparece como se os dados se movessem de um filtro de modo de usuário para o próximo. Na realidade, os dados podem nunca passar para o modo de usuário, mas podem ser transmitidos diretamente de um dispositivo no modo kernel para outro até que sejam renderizados nos gráficos de vídeo cartão. Alguns cenários, como capturar em um arquivo, exigem que os dados passem do modo kernel para o modo de usuário em algum momento. No entanto, essa opção não exige necessariamente que os dados sejam copiados para um novo local na memória.

Os desenvolvedores de aplicativos geralmente não precisam se preocupar com os detalhes do streaming de kernel, exceto como informações em segundo plano. Consulte o DDK da Microsoft para obter informações mais detalhadas sobre WDM, streaming de kernel, KsProxy e tópicos relacionados.

O grafo de filtro e seus componentes