Arquitetura de Plug-In de unidade de extensão

O driver classe de vídeo USB expõe unidades de extensão como nós no filtro proxy KS de vídeo USB. Os controles da Unidade de Extensão são expostos ainda mais no modo de usuário como uma propriedade definida no nó, que é do tipo KSNODETYPE_DEV_SPECIFIC. O GUID do conjunto de propriedades corresponde ao GUID do descritor de Unidade de Extensão.

Os controles individuais da Unidade de Extensão devem ser numerados continuamente de 1 para algum valor máximo n. Esses controles são mapeados diretamente para IDs (identificadores de propriedade) no conjunto de propriedades da Unidade de Extensão e podem ser acessados usando solicitações KSPROPERTY padrão por meio de IKsControl.

Em resposta a solicitações de propriedade de aplicativos, o driver UVC retorna valores de propriedade que têm o membro MembersFlags da estrutura KSPROPERTY_MEMBERSHEADER definido exclusivamente como KSPROPERTY_MEMBER_RANGES. O UVC não dá suporte a intervalos escalonados ou valores padrão de unidade de extensão de comprimento arbitrário.

Para expor as propriedades da Unidade de Extensão a um aplicativo, você pode escrever uma DLL de plug-in no modo de usuário que expõe uma API COM. Você pode implementar essa API fazendo solicitações para a propriedade KS definida usando a interface IKsControl . Vidcap.ax carrega automaticamente o plug-in da interface do nó com base em determinadas entradas do Registro. Um aplicativo pode acessar a interface usando IKsTopologyInfo::CreateNodeInstance seguido por uma chamada para QueryInterface no objeto de nó para obter a API COM necessária.

Os seguintes elementos são necessários para gravar e usar um plug-in de Unidade de Extensão:

  • Um cabeçalho e um arquivo cpp implementando a API de Unidade de Extensão e uma interface chamada IKsNodeControl. Vidcap.ax usa a interface IKsNodeControl para informar o plug-in do identificador de nó de extensão e fornecê-lo com uma instância de IKsControl. O código de exemplo para esses arquivos pode ser encontrado na DLL do plug-in de unidade de extensão de exemplo.

  • Um arquivo .rgs que registra as interfaces do nó e as IDs de classe (CLSIDs) na subchave do Registro HKLM\System\CCS\Control\NodeInterfaces\Property_Set_GUID . As entradas nessa subchave do Registro contêm os valores binários para a ID da Interface (IID) e CLSID. Para obter mais informações, consulte Entrada de registro de exemplo para unidades de extensão UVC.

  • Um aplicativo que invoca essa interface. O aplicativo primeiro cria uma instância de nó com a ID de nó correta usando IKsTopologyInfo::CreateNodeInstance. Em seguida, o aplicativo chama QueryInterface na instância do nó para obter a interface de Unidade de Extensão necessária. Para obter mais informações, consulte Aplicativo de exemplo para unidades de extensão UVC e Suporte a eventos de atualização automática com unidades de extensão

Os exemplos de código nesta seção ilustram todos esses elementos. Consulte Criando o controle de exemplo de unidade de extensão para saber como criar o plug-in de exemplo e o código do aplicativo de exemplo associado.

Depois que a DLL do plug-in for registrada e as entradas do Registro descritas acima forem fornecidas, Vidcap.ax carregará automaticamente as interfaces de nó relevantes quando a instância do nó for criada.

Nota A partir do Windows XP SP2, o conjunto de propriedades da Unidade de Extensão tem suporte apenas no nó e não no filtro.

Considerações do Registro

Para registrar o IID e o CLSID da interface exportada pelo plug-in, você pode usar o registro de DLL ou um arquivo INF (informações de instalação específicas do dispositivo).

Consulte Entrada de registro de exemplo para unidades de extensão UVC para obter um arquivo .rgs de exemplo que mostra os valores necessários para as entradas do Registro. Este tópico também demonstra como escrever um arquivo INF específico do dispositivo para instalar um dispositivo de vídeo USB e registrar a DLL do plug-in. Você pode escolher o registro de DLL ou um arquivo INF específico do dispositivo, com base em suas necessidades específicas.

Esquema

O diagrama esquema a seguir mostra as relações entre os vários módulos envolvidos na escrita e no uso de um plug-in de Unidade de Extensão. Em particular, ele rastreia a conexão do aplicativo até a DLL do plug-in, até o driver e, por fim, até a Unidade de Extensão no próprio dispositivo. O esquema também ilustra os vários GUIDs envolvidos; valores idênticos são realçados pelo uso de uma cor correspondente.

diagrama ilustrando o plug-in de unidade de extensão e os módulos associados.

Mecanismos de eventos

A Classe de Vídeo USB dá suporte a eventos de atualização automática, em que o dispositivo notifica o driver de host de alterações em qualquer um de seus controles. O driver de Classe de Vídeo USB da Microsoft dá suporte a esse conceito, permitindo que os aplicativos se registrem para eventos de atualização automática. O processo de obtenção de atualizações envolve três etapas:

  1. Registrando-se para eventos de atualização usando KSEVENTSETID_VIDCAPNotify::KSEVENT_VIDCAP_AUTO_UPDATE

  2. Escutando eventos no identificador de evento de notificação

  3. Cancelando a notificação quando terminar