Partilhar via


Manipuladores de Data-Intersection padrão

O manipulador de interseção de dados proprietário de um adaptador (o método IMiniport::DataRangeIntersection do objeto de driver de miniporta) pode optar por não executar a verificação de interseção de dados retornando o código de status STATUS_NOT_IMPLEMENTED. Nesse caso, o manipulador de interseção de dados padrão do driver de porta executa a verificação em nome do adaptador.

Você pode implementar um manipulador de interseção de dados mínimo para o driver do adaptador como um método DataRangeIntersection que recusa todas as solicitações de interseção de dados retornando STATUS_NOT_IMPLEMENTED.

A implementação atual do manipulador padrão do driver de porta é limitada nos tipos de intervalos de dados que ele pode manipular:

  • Apenas formatos de dados PCM

  • Apenas fluxos de áudio mono e estéreo

Um driver de adaptador que suporte formatos não-PCM ou multicanal deve implementar um manipulador de interseção de dados proprietário em vez de depender do driver de porta para lidar com interseções de dados para esses formatos.

Além disso, o manipulador padrão suporta apenas formatos de áudio que podem ser especificados por uma estrutura KSDATAFORMAT_DSOUND ou KSDATAFORMAT_WAVEFORMATEX . Ele não suporta qualquer formato que contenha uma estrutura WAVEFORMATEXTENSIBLE , que é necessária, por exemplo, para especificar a máscara de canal para um formato com mais de dois canais.

Ao escolher um formato comum da interseção entre dois intervalos de dados, o manipulador padrão do driver de porta sempre seleciona o valor mais alto na região de interseção de cada parâmetro:

  • Se a interseção abranger mais de uma frequência de amostra válida (11, 22 e 44 kHz, por exemplo), o manipulador padrão selecionará a frequência mais alta.

  • Se a interseção abranger mais de um valor válido de bits por amostra (8, 16 e 32 bits, por exemplo), o manipulador padrão selecionará o maior valor.

  • Se a interseção abrange os formatos mono e estéreo, o manipulador padrão escolhe estéreo.

Se o manipulador padrão selecionar um formato que não seja satisfatório, o driver do adaptador tem a opção de rejeitar o formato ao falhar na chamada NewStream (por exemplo, veja IMiniportWavePci::NewStream) quando o SysAudio tenta criar um pino de saída com o formato. Se a chamada falhar, o SysAudio não continuará procurando interseções de dados. Em vez disso, ele tentará criar uma conexão iterando através de uma lista dos formatos PCM que são suportados por filtros do sistema, como o KMixer, até encontrar um que o pino de entrada do adaptador também possa suportar. A lista é ordenada com os formatos de maior qualidade primeiro. Como antes, o adaptador rejeita formatos insatisfatórios na lista, falhando as chamadas NewStream para esses formatos.