Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
As fábricas de terminais de um filtro de áudio descrevem todos os terminais que o filtro pode instanciar. Como mencionado anteriormente, um driver de miniporta de áudio armazena informações de pinos em uma matriz de estruturas PCPIN_DESCRIPTOR . Cada estrutura especifica uma fábrica de pinos e uma fábrica de pinos é identificada por seu índice na matriz. Este índice é frequentemente referido como o 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 do fluxo de dados relativa ao filtro
Direção relativa do fluxo de comunicação do filtro (Em todas as versões atuais do Windows, os filtros KS utilizam IRPs para comunicação.)
Categoria do pino
Nome amigável
Capacidades de instância
Recursos de formato de dados
Os membros Categoria e Nome da estrutura especificam a categoria de pinos e o nome amigável da fábrica de pinos. Para cada fábrica de pinos no filtro, o driver de miniporta 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 compartilham o mesmo valor de Categoria , cada fábrica de pinos tem um valor de Nome que a distingue das outras. Se apenas uma fábrica de pinos tiver um determinado valor de Categoria, esse valor será suficiente para identificar a fábrica de pinos e o valor Name 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 pinos, consulte Propriedade de categoria de pino.
Uma fábrica de pinos especifica o intervalo de formatos de dados que suporta como uma matriz de estruturas KSDATARANGE estendidas:
Uma fábrica de pins que suporta uma variedade de formatos de dados Wave ou DirectSound para o seu fluxo de entrada ou saída especifica uma matriz de estruturas KSDATARANGE_AUDIO.
Uma fábrica de pinos que suporta uma variedade de formatos de dados MIDI ou DirectMusic para seu fluxo de entrada ou saída especifica uma matriz de estruturas 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 receptor em um filtro a um pino de saída em outro filtro, um construtor de gráficos (por exemplo, o driver do sistema SysAudio) pode verificar os intervalos de dados para um formato de dados compatível. O construtor de gráficos 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 suportar várias instâncias de pinos.
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 através do filtro. Por exemplo, uma fábrica de pinos pode suportar fluxos de dados PCM e outra fábrica de pinos pode suportar fluxos AC-3.
Um único filtro pode suportar fluxos de renderização e captura simultaneamente. Os caminhos de renderização e captura têm conjuntos separados de fábricas de filtros.
Ter várias instâncias de pinos em uma fábrica de pinos de sumidouro frequentemente implica misturar, caso em que o filtro contém um nó SOMA (KSNODETYPE_SUM).
Como filtros, os pinos são objetos do kernel e são identificados por identificadores de kernel. O identificador para uma instância de pino é criado chamando KsCreatePin. Como objeto de kernel, um pino pode ser especificado como o alvo de um IRP. Um cliente do driver especifica o identificador de pino ao enviar uma solicitação IOCTL para um pino.
Ao criar um gráfico 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 dissipador de outro filtro. Os dados e IRPs do pino de origem fluem para o pino de destino através desta ligação. Para estabelecer a ligação, um construtor de gráficos (normalmente SysAudio) cria primeiro o pino de origem chamando KsCreatePin e, depois, cria o pino de receção 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.