Compartilhar via


Pinos de topologia

O driver do sistema WDMAud converte pinos de topologia em filtros KS para as linhas de mixer de origem e destino que a API do mixer expõe aos aplicativos. Os pinos de entrada (coletor) tornam-se linhas do mixer de origem e os pinos de saída (origem) tornam-se linhas de mixer de destino.

Conforme descrito em Pin Factories, um driver de miniporto fornece uma matriz de descritores de pino, cada um deles é uma estrutura do tipo PCPIN_DESCRIPTOR que descreve uma fábrica de pinos pertencente a um filtro. Cada descritor de pin inclui as seguintes informações:

  • Especificador de direção do fluxo de dados

    Indica se o fluxo de dados entra (KSPIN_DATAFLOW_IN) ou sai (KSPIN_DATAFLOW_OUT) do filtro por meio do pino.

  • GUID da categoria de pino KS

    Indica a categoria de pino à qual o pino pertence. Por exemplo, em um dispositivo de reprodução de áudio, um pino pode aceitar um fluxo de áudio digital formatado em onda e outro pode gerar um sinal de áudio analógico para conduzir um alto-falante. O driver de miniporta identifica esses dois tipos de pinos como pertencentes a categorias de pino distintas.

  • Especificador de tipo de comunicação

    Indica o tipo de comunicações IRP compatíveis com o pin. Um pino que dá suporte a comunicações IRP pode ser um coletor IRP (KSPIN_COMMUNICATION_SINK), uma origem IRP (KSPIN_COMMUNICATION_SOURCE) ou ambos (KSPIN_COMMUNICATION_BOTH). Um pino que não dá suporte a comunicações IRP pode estar dentro de um grafo de filtro KS (KSPIN_COMMUNICATION_NONE) ou ser um pino de ponte no ponto de extremidade de um grafo (KSPIN_COMMUNICATION_BRIDGE).

Para obter mais informações sobre pinos de ponte, consulte Gráficos de filtro de áudio.

O WDMAud converte as informações do descritor de pino do driver de miniporto em um descritor de linha de mixer, que é uma estrutura do tipo MIXERLINE que inclui as seguintes informações:

  • Tipo de componente de linha de combinação

    Indica se a linha do mixer é uma linha de origem ou de destino e também indica a função geral da linha do mixer. Por exemplo, o tipo de componente para uma linha de mixer que transporta um sinal analógico gerado a partir de um fluxo de saída de onda (renderização) para conduzir um conjunto de fones de ouvido é MIXERLINE_COMPONENTTYPE_DST_HEADPHONES.

  • Tipo de destino de linha de combinação

    Indica o tipo de fluxo de dados que a linha do mixer transporta. Por exemplo, o tipo de destino para um fluxo de saída de onda (renderização) é MIXERLINE_TARGETTYPE_WAVEOUT e o tipo de destino para um fluxo de entrada de onda (captura) é MIXERLINE_TARGETTYPE_WAVEIN.

Para obter mais informações, consulte a estrutura MIXERLINE na documentação do SDK.

As duas tabelas a seguir mostram como o WDMAud converte linhas do mixer de origem de pinos de entrada (KSPIN_DATAFLOW_IN).

A primeira tabela mostra como os GUIDs da categoria de pino KS de entrada (valores PCPIN_DESCRIPTOR) são mapeados para os tipos de destino MIXERLINE associados.

GUID da categoria de pino KS Pino de ponte? Tipo de destino MIXERLINE
KSNODETYPE_MICROPHONE - MIXERLINE_TARGETTYPE_WAVEIN
KSNODETYPE_DESKTOP_MICROPHONE - MIXERLINE_TARGETTYPE_WAVEIN
KSNODETYPE_LEGACY_AUDIO_CONNECTOR - MIXERLINE_TARGETTYPE_WAVEOUT
KSCATEGORY_AUDIO - MIXERLINE_TARGETTYPE_WAVEOUT
KSNODETYPE_SPEAKER - MIXERLINE_TARGETTYPE_WAVEOUT
KSNODETYPE_CD_PLAYER - MIXERLINE_TARGETTYPE_UNDEFINED
KSNODETYPE_SYNTHESIZER - MIXERLINE_TARGETTYPE_MIDIOUT
KSNODETYPE_LINE_CONNECTOR - MIXERLINE_TARGETTYPE_UNDEFINED
KSNODETYPE_TELEPHONE - MIXERLINE_TARGETTYPE_UNDEFINED
KSNODETYPE_PHONE_LINE - MIXERLINE_TARGETTYPE_UNDEFINED
KSNODETYPE_DOWN_LINE_PHONE - MIXERLINE_TARGETTYPE_UNDEFINED
KSNODETYPE_ANALOG_CONNECTOR Yes MIXERLINE_TARGETTYPE_WAVEIN
KSNODETYPE_ANALOG_CONNECTOR No MIXERLINE_TARGETTYPE_WAVEOUT
KSNODETYPE_SPDIF_INTERFACE Yes MIXERLINE_TARGETTYPE_WAVEIN
KSNODETYPE_SPDIF_INTERFACE No MIXERLINE_TARGETTYPE_WAVEOUT

A tabela a seguir mostra como os GUIDs da categoria de pino KS do pino de entrada são mapeados para os tipos de componente MIXERLINE associados.

PCPIN_DESCRIPTOR valores Valores MIXERLINE
GUID da categoria de pino KS Tipo de componente

KSNODETYPE_MICROPHONE

KSNODETYPE_DESKTOP_MICROPHONE

MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE

KSNODETYPE_LEGACY_AUDIO_CONNECTOR

KSCATEGORY_AUDIO

KSNODETYPE_SPEAKER

MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT

KSNODETYPE_CD_PLAYER

MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC

KSNODETYPE_SYNTHESIZER

MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER

KSNODETYPE_LINE_CONNECTOR

MIXERLINE_COMPONENTTYPE_SRC_LINE

KSNODETYPE_TELEPHONE

KSNODETYPE_PHONE_LINE

KSNODETYPE_DOWN_LINE_PHONE

MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE

KSNODETYPE_ANALOG_CONNECTOR

MIXERLINE_COMPONENTTYPE_SRC_ANALOG

KSNODETYPE_ANALOG_CONNECTOR

MIXERLINE_COMPONENTTYPE_SRC_ANALOG

KSNODETYPE_SPDIF_INTERFACE

MIXERLINE_COMPONENTTYPE_SRC_DIGITAL

KSNODETYPE_SPDIF_INTERFACE

MIXERLINE_COMPONENTTYPE_SRC_DIGITAL

Nas tabelas anteriores, a coluna à esquerda especifica o GUID da categoria de pino da estrutura PCPIN_DESCRIPTOR do pino e as colunas à direita especificam o tipo de destino e o tipo de componente correspondentes para a estrutura MIXERLINE.

As entradas na coluna rotulada como "Pino de Ponte?" indicam se o pino é um pino de ponte. Um "Sim" significa que o tipo de comunicação de pino é KSPIN_COMMUNICATION_BRIDGE. Um "Não" significa que o tipo de comunicação de pino é um valor KSPIN_COMMUNICATION_Xxx diferente de KSPIN_COMMUNICATION_BRIDGE. Se WDMAud ignorar o tipo de comunicação de pino ao traduzir os parâmetros de pino para parâmetros de linha de mixer, a entrada "Bridge Pin?" será um traço (-).

Para todas as categorias de pino que não aparecem nas tabelas anteriores, o WDMAud converte os pinos de entrada em linhas do mixer de origem com tipos de destino de MIXERLINE_TARGETTYPE_UNDEFINED e tipos de componente de MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED.

As tabelas a seguir mostram como o WDMAud converte pinos de saída (KSPIN_DATAFLOW_OUT) em linhas de mixer de destino. Os títulos de coluna têm os mesmos significados que na tabela anterior. A primeira tabela mostra como os GUIDs da categoria de pino KS do pino de saída são mapeados para os tipos de destino MIXERLINE associados.

GUID de categoria de pino KS Pino de ponte? Tipo de destino MIXERLINE
KSNODETYPE_SPEAKER - MIXERLINE_TARGETTYPE_WAVEOUT
KSNODETYPE_DESKTOP_SPEAKER - MIXERLINE_TARGETTYPE_WAVEOUT
KSNODETYPE_ROOM_SPEAKER - MIXERLINE_TARGETTYPE_WAVEOUT
KSNODETYPE_COMMUNICATION_SPEAKER - MIXERLINE_TARGETTYPE_WAVEOUT
KSCATEGORY_AUDIO - MIXERLINE_TARGETTYPE_WAVEIN
PINNAME_CAPTURE - MIXERLINE_TARGETTYPE_WAVEIN
KSNODETYPE_HEADPHONES - MIXERLINE_TARGETTYPE_WAVEOUT
KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO - MIXERLINE_TARGETTYPE_WAVEOUT
KSNODETYPE_TELEPHONE - MIXERLINE_TARGETTYPE_UNDEFINED
KSNODETYPE_PHONE_LINE - MIXERLINE_TARGETTYPE_UNDEFINED
KSNODETYPE_DOWN_LINE_PHONE - MIXERLINE_TARGETTYPE_UNDEFINED
KSNODETYPE_ANALOG_CONNECTOR Yes MIXERLINE_TARGETTYPE_WAVEOUT
KSNODETYPE_ANALOG_CONNECTOR No MIXERLINE_TARGETTYPE_WAVEIN
KSNODETYPE_SPDIF_INTERFACE Yes MIXERLINE_TARGETTYPE_WAVEOUT
KSNODETYPE_SPDIF_INTERFACE No MIXERLINE_TARGETTYPE_WAVEIN

A tabela a seguir mostra como os GUIDs da categoria de pino KS do pino de saída são mapeados para os tipos de componente MIXERLINE associados.

PCPIN_DESCRIPTOR valores Valores MIXERLINE
GUID de categoria de pino KS Tipo de componente

KSNODETYPE_SPEAKER

KSNODETYPE_DESKTOP_SPEAKER

KSNODETYPE_ROOM_SPEAKER

KSNODETYPE_COMMUNICATION_SPEAKER

MIXERLINE_COMPONENTTYPE_DST_SPEAKERS

KSCATEGORY_AUDIO

PINNAME_CAPTURE

MIXERLINE_COMPONENTTYPE_DST_WAVEIN

KSNODETYPE_HEADPHONES

KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO

MIXERLINE_COMPONENTTYPE_DST_HEADPHONES

KSNODETYPE_TELEPHONE

KSNODETYPE_PHONE_LINE

KSNODETYPE_DOWN_LINE_PHONE

MIXERLINE_COMPONENTTYPE_DST_TELEPHONE

KSNODETYPE_ANALOG_CONNECTOR

MIXERLINE_COMPONENTTYPE_DST_SPEAKERS

KSNODETYPE_ANALOG_CONNECTOR

MIXERLINE_COMPONENTTYPE_DST_WAVEIN

KSNODETYPE_SPDIF_INTERFACE

MIXERLINE_COMPONENTTYPE_DST_SPEAKERS

KSNODETYPE_SPDIF_INTERFACE

MIXERLINE_COMPONENTTYPE_DST_WAVEIN

Para todas as categorias de pin que não aparecem nas tabelas anteriores, WDMAud converte os pinos de saída em linhas de mixer de destino com tipos de destino de MIXERLINE_TARGETTYPE_UNDEFINED e tipos de componente de MIXERLINE_COMPONENTTYPE_DST_UNDEFINED.

Nas tabelas anteriores, a maioria dos GUIDs da categoria de pino KS tem nomes KSNODETYPE_Xxx . Esses nomes são definidos nos arquivos de cabeçalho Ksmedia.h e Dmusprop.h. (Duas saídas dessa convenção de nomenclatura são GUIDs KSCATEGORY_AUDIO e PINNAME_CAPTURE, que também são definidos em Ksmedia.h.) Conforme descrito em Nós de Topologia, guids KSNODETYPE_Xxx também podem ser usados para designar tipos de nó KS. A maioria dos GUIDs KSNODETYPE_Xxx especificam categorias de pino ou tipos de nó, mas não ambos. A exceção é KSNODETYPE_SYNTHESIZER, que pode especificar uma categoria de pino ou um tipo de nó, dependendo do contexto no qual é usado. Para obter uma lista de GUIDs KSNODETYPE_Xxx que representam categorias de pino, consulte Propriedade Categoria de Pino. Para obter uma lista de GUIDs KSNODETYPE_Xxx que representam tipos de nó, consulte Nós de Topologia de Áudio.

KSCATEGORY_AUDIO é outro GUID de uso duplo. Ele pode ser usado como um GUID de categoria de pino KS ou um GUID de categoria de filtro KS, dependendo do contexto. Durante a instalação do dispositivo, um driver de áudio registra sua interface de dispositivo na categoria de filtro KSCATEGORY_AUDIO. Para obter mais informações, consulte Instalando interfaces de dispositivo para um adaptador de áudio.

Para uma categoria de pino de KSNODETYPE_ANALOG_CONNECTOR ou KSNODETYPE_SPDIF_INTERFACE, wdmaud precisa saber se o pino é um pino de ponte para traduzir corretamente o pino para seu equivalente de linha de mixer. Por exemplo, um pino S/PDIF (com categoria de pino KSNODETYPE_SPDIF_INTERFACE) é convertido em um dos quatro tipos de linha de mixer mostrados na figura a seguir. A tradução depende da direção de dados do pino (dentro ou fora) e se é um pino de ponte (sim ou não), que juntos produzem quatro tipos possíveis de linha de mixer (in+yes, in+no, out+yes e out+no). Os quatro tipos de linha de mixer mostrados na figura representam os pares inferiores de entradas das tabelas anteriores.

Diagrama ilustrando a tradução de pinos S/PDIF para linhas de mixer.

Observe que dois fluxos no lado direito do dispositivo de áudio na figura estão no formato S/PDIF e os dois fluxos à esquerda estão em formato de onda. O dispositivo de áudio executa a conversão entre os dois formatos digitais.

O aplicativo SndVol32 é um cliente da API do mixer. A API do mixer converte cada pino encontrado na topologia em uma linha de mixer de origem ou de destino, mas a linha pode não ser mostrada em SndVol32, que reconhece apenas um subconjunto dos tipos de componente de linha de mixer que o arquivo de cabeçalho Mmsystem.h define para a API do mixer. Para obter mais informações sobre SndVol32, consulte SysTray e SndVol32.