Compartilhar via


Fixar fábricas

As fábricas de pinos de um filtro de áudio descrevem todos os pinos que o filtro pode instanciar. Conforme mencionado anteriormente, um driver de miniporto de áudio armazena informações de pino em uma matriz de estruturas de PCPIN_DESCRIPTOR . Cada estrutura especifica uma fábrica de pinos e uma fábrica de pinos é identificada por seu índice na matriz. Esse índice é frequentemente chamado de ID do pino.

Uma estrutura PCPIN_DESCRIPTOR contém uma tabela de automação e uma estrutura KSPIN_DESCRIPTOR .

A estrutura KSPIN_DESCRIPTOR contém as seguintes informações sobre os pinos na fábrica de pinos:

  • Direção relativa ao filtro do fluxo de dados

  • Direção relativa ao filtro do fluxo de comunicação (em todas as versões atuais do Windows, os filtros KS usam IRPs para comunicação.)

  • Categoria de pino

  • Nome amigável

  • Recursos de instância

  • Recursos de formato de dados

Os membros Categoria e Nome da estrutura especificam a categoria de pino e o nome amigável da fábrica de pinos. Para cada fábrica de pinos no filtro, o driver de miniporto especifica uma combinação de GUIDs de Categoria e Nome que juntos identificam exclusivamente a fábrica de pinos. Se duas ou mais fábricas de pinos compartilharem o mesmo valor de Categoria , cada fábrica de pinos terá um valor Name que o distingue dos outros. Se apenas uma fábrica de pinos tiver um valor de Categoria específico, esse valor será suficiente para identificar a fábrica de pinos e o valor Nome dessa fábrica de pinos poderá ser definido como NULL. Para obter um exemplo de codificação, consulte Expondo topologia de filtro. Para obter informações sobre categorias de pin, consulte Fixar propriedade category.

Uma fábrica de pinos especifica o intervalo de formatos de dados que ele dá suporte como uma matriz de estruturas KSDATARANGE estendidas:

  • Uma fábrica de pinos que dá suporte a um intervalo de formatos de dados wave ou DirectSound para seu fluxo de entrada ou saída especifica uma matriz de estruturas de KSDATARANGE_AUDIO .

  • Uma fábrica de pinos que dá suporte a um intervalo de formatos de dados MIDI ou DirectMusic para seu fluxo de entrada ou saída especifica uma matriz de estruturas de KSDATARANGE_MUSIC .

KSDATARANGE_AUDIO e KSDATARANGE_MUSIC são versões estendidas do KSDATARANGE. Para obter exemplos de ambos os tipos de intervalos de dados, consulte Formatos de dados de áudio e intervalos de dados.

Antes de conectar um pino de coletor em um filtro a um pino de origem em outro filtro, um construtor de grafo (por exemplo, o driver do sistema SysAudio) pode pesquisar os intervalos de dados para obter um formato compatível. O construtor de grafo normalmente chama o manipulador de interseção de dados do filtro, o que permite que o próprio filtro escolha um formato compatível.

Um filtro pode ter várias fábricas de pinos e uma fábrica de pinos pode dar suporte a várias instâncias de pino.

  • Ter várias fábricas de pinos em um filtro é útil para distinguir caminhos de dados separados para os diferentes tipos de dados que fluem pelo filtro. Por exemplo, uma fábrica de pinos pode dar suporte a fluxos de dados pcm e outra fábrica de pinos pode dar suporte a fluxos AC-3.

  • Um único filtro pode dar suporte à renderização e à captura de fluxos simultaneamente. Os caminhos de renderização e captura têm conjuntos separados de fábricas de filtros.

  • Ter várias instâncias de pino em uma fábrica de pinos de coletor frequentemente implica a combinação, nesse caso, o filtro contém um nó SUM (KSNODETYPE_SUM).

Assim como os filtros, os pinos são objetos kernel e são identificados por identificadores de kernel. O identificador de uma instância de pin é criado chamando KsCreatePin. Como um objeto kernel, um pino pode ser especificado como o destino de um IRP. Um cliente do driver especifica o identificador de pino ao enviar uma solicitação IOCTL para um pino.

Ao criar um grafo de filtro de áudio, o SysAudio vincula um filtro a outro conectando seus pinos. Um pino de origem de um filtro pode ser conectado ao pino do coletor de outro filtro. Dados e IRPs do fluxo do pino de origem para o pino do coletor por meio dessa conexão. Para fazer a conexão, um construtor de grafo (normalmente SysAudio) cria o pino de origem primeiro chamando KsCreatePin e, em seguida, cria o pino do coletor chamando KsCreatePin novamente. Na segunda chamada, no entanto, o cliente especifica que o novo pino do coletor deve ser conectado ao pino de origem que foi criado na primeira chamada.