Compartilhar via


Gravando minidrivers AVStream para hardware

No AVStrMiniDeviceStart fornecido pelo fornecedor, os minidrivers AVStream que dão suporte ao hardware devem primeiro analisar a lista de recursos e, em seguida, chamar IoConnectInterrupt para registrar uma ISR (rotina de serviço de interrupção).

Etapas adicionais serão necessárias se o driver der suporte ao DMA (acesso direto à memória). Se o driver implementar o DMA, consulte AVStream DMA Services.

Se mais de um aplicativo pode criar um grafo de filtro simultaneamente usando seu dispositivo, você deve ter cuidado para evitar interferência entre grafos. Especificamente, se você construir um grafo em um aplicativo usando o dispositivo, não deverá interferir em um aplicativo que esteja usando o dispositivo em um estado sem interrupção.

Você pode evitar interferência carregando o microcódigo após a transição do grafo para KSSTATE_ACQUIRE. Isso protegerá um grafo em execução no momento porque um novo grafo não fará a transição para KSSTATE_ACQUIRE enquanto outro grafo estiver em execução no momento. Para receber a notificação de alterações de estado do pin, forneça uma rotina de retorno de chamada AVStrMiniPinSetDeviceState na estrutura KSPIN_DISPATCH .

No entanto, para minimizar o tempo de inicialização do grafo, convém carregar o microcódigo antes que o grafo atinja KSSTATE_ACQUIRE. Nesse caso, considere carregar o microcódigo em um thread em segundo plano de baixa prioridade durante a inicialização. Essa solução não interfere em outros aplicativos, reduz o tempo de início do grafo e não deve alongar o tempo de inicialização se feito de forma assíncrona.

No entanto, após a inicialização, não recarregue o microcódigo ou manipule os registros de hardware até que o grafo atinja KSSTATE_ACQUIRE.

Para ver como a conexão de um novo grafo pode interferir em um grafo em execução, considere um dispositivo de captura de vídeo que dá suporte à codificação e à decodificação, mas executa apenas uma dessas tarefas por vez. O minidriver expõe um filtro de codificação e um filtro de decodificação.

Um aplicativo cria um grafo de filtro que contém o filtro de codificação. O minidriver carrega o microcódigo para codificação no momento da conexão do pino. O grafo de filtro é iniciado e o hardware inicia a codificação.

Enquanto o hardware está codificando, outro aplicativo coloca um filtro de decodificação em um grafo de filtro. Quando os pinos de decodificação são conectados, antes que os pinos alterem o estado para KSSTATE_ACQUIRE, o minidriver tenta configurar o hardware para decodificação. Essa reconfiguração interfere no grafo de codificação atualmente ativo e pode resultar em uma instabilidade de driver.