Partilhar via


Como os dispositivos de hardware participam do gráfico de filtro

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEnginee Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda vivamente que o novo código utilize MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no 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 Invólucro

Todos os filtros DirectShow são componentes de software de modo de usuário. Para que um dispositivo de hardware de modo kernel, como uma placa de captura de vídeo, ingresse em um gráfico de filtro DirectShow, o dispositivo deve ser representado como um filtro de modo de usuário. Esta função é executada por filtros especializados de "wrapper" fornecidos com o DirectShow. Esses filtros incluem o filtro Audio Capture, o filtro VFW Capture, o filtro TV Tuner, o filtro TV Audio e o filtro Analog Video Crossbar. O DirectShow também fornece um filtro chamado KsProxy, que pode representar qualquer tipo de dispositivo de streaming WDM (Windows Driver Model). Os fornecedores de hardware podem estender o KsProxy para oferecer suporte à funcionalidade personalizada, fornecendo um plug-in Ksproxy , que é um objeto COM agregado pelo 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 traduz as chamadas do método COM em chamadas de driver de dispositivo, passa essas informações para o driver no modo kernel e, em seguida, traduz o resultado de volta para o aplicativo. Os filtros Sintonizador de TV, Áudio de TV, Crossbar de Vídeo Analógico e KsProxy suportam propriedades de driver personalizadas através da interfaceIKsPropertySet. O filtro VFW Capture e o filtro Audio Capture não são extensíveis desta forma.

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

Vídeo para dispositivos Windows

O filtro VFW Capture suporta placas de captura de vídeo para Windows (VfW) anteriores. Quando uma placa VfW está presente no sistema de destino, ela pode ser descoberta e adicionada ao gráfico de filtro usando o DirectShow System Device Enumerator. Para obter detalhes, consulte enumerando dispositivos e filtros.

Dispositivos de captura e mistura de áudio (placas de som)

As placas de som mais recentes têm tomadas de entrada para microfones e outros tipos de dispositivos. Normalmente, essas placas também têm recursos de mistura on-board para controlar o volume, agudos e graves de cada entrada individual. No DirectShow, as entradas da placa de som e o mixer são envolvidos pelo filtro de captura de áudio. Cada placa de som pode ser descoberta com o System Device Enumerator. Para visualizar as placas de som no seu sistema, execute GraphEdit e selecione na categoria Fontes de captura de áudio. Cada filtro nessa categoria é uma instância separada do filtro Captura de áudio. (Consulte Usando o GraphEdit.)

dispositivos de streaming WDM

Os descodificadores de hardware e as placas de captura mais recentes estão em conformidade com a especificação WDM (Windows Driver Model). Estes dispositivos têm maior funcionalidade do que os dispositivos VfW. As placas de captura de vídeo WDM podem suportar recursos que não estão disponíveis em 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 a sintonizador de TV.

Para suportar dispositivos de streaming WDM, o DirectShow fornece o filtro KsProxy (ksproxy.ax). KsProxy tem sido chamado de "filtro canivete suíço" porque faz muitas coisas diferentes. O número de pinos no filtro e o número de interfaces COM expostas pelo filtro dependem das capacidades do driver subjacente. KsProxy não aparece no gráfico de filtro sob o nome "KsProxy". Ele sempre leva o nome amigável do dispositivo, que é encontrado no registro. Para visualizar os dispositivos WDM em seu sistema, execute o GraphEdit e selecione entre as categorias WDM Streaming. Mesmo que você tenha apenas uma placa WDM no sistema, essa placa 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 System Device Enumerator para localizar monikers de dispositivo WDM no sistema. KsProxy é instanciado chamando BindToObject no moniker. Como KsProxy pode representar todos os tipos de dispositivos WDM, ele deve consultar o driver para determinar quais conjuntos de propriedades o driver suporta. 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. KsProxy configura-se para expor as interfaces COM que correspondem a esses conjuntos de propriedades. KsProxy traduz as chamadas do método COM em conjuntos de propriedades e envia-os 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 são escondidos do aplicativo. O aplicativo controla o dispositivo por meio de KsProxy, da mesma forma que qualquer outro filtro DirectShow.

Transmissão de Kernel

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

Do ponto de vista de um aplicativo, parece que os dados são movidos 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 em vez disso podem ser transmitidos diretamente de um dispositivo de modo kernel para outro até que sejam renderizados na placa gráfica de vídeo. Alguns cenários, como a captura para um arquivo, exigem que os dados passem do modo kernel para o modo usuário em algum momento. No entanto, essa opção não requer 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 do kernel, exceto como informações básicas. Consulte o DDK da Microsoft para obter informações mais detalhadas sobre WDM, streaming do kernel, KsProxy e tópicos relacionados.

O gráfico de filtros e seus componentes