Partilhar via


Requisitos para uma fábrica de pinos não PCM

No Windows XP e posterior e no Microsoft Windows Me, os drivers que reproduzem formatos WAVEFORMATEX não PCM devem expor seus pinos não PCM de acordo com as diretrizes a seguir.

Primeiro, defina uma fábrica de pinos para o formato de dados não PCM separado de qualquer fábrica de pinos pcm. O PCM e o não PCM não podem compartilhar a mesma fábrica de pinos de instância única porque a única instância de pino é alocada automaticamente ao KMixer. Se a fábrica de pinos der suporte a várias instâncias, PCM e não PCM poderão coexistir na mesma fábrica de pinos. Nesse caso, no entanto, você não pode garantir que essas instâncias de fixação estejam disponíveis para um cliente não PCM em runtime – os clientes PCM podem já tê-las alocado. A opção mais segura é fornecer uma fábrica de pinos separada para o formato não PCM.

Para que o pino seja descoberto e usado pelo DirectSound 8, defina essa fábrica de pinos não PCM em um filtro que já dá suporte ao PCM. Caso contrário, o DirectSound não detectará o pino não PCM. Isso também significa que um dispositivo que não dá suporte ao PCM não pode dar suporte a um formato não PCM.

Em segundo lugar, implemente um manipulador de interseção de dados no pin não PCM. PortCls fornece um manipulador interno, mas esse manipulador padrão sempre escolhe PCM, portanto, você deve adicionar seu próprio manipulador para formatos não PCM. Você não deve dar suporte a WAVE_FORMAT_PCM no manipulador de interseção para seu pino não PCM. Observe que esse manipulador pode ser chamado com um OutputBufferLength de 0, nesse caso, o chamador está solicitando apenas o tamanho do intervalo de dados preferido, não para os dados em si. Nesse caso, o manipulador deve responder copiando o tamanho do intervalo de dados não PCM para o parâmetro ResultantFormatLength e retornando STATUS_BUFFER_OVERFLOW. O exemplo msvad no WDK (Kit de Driver do Windows) contém o código para uma rotina DataRangeIntersection que você pode usar como um manipulador de exemplo. Para testar sua rotina DataRangeIntersection , use o utilitário KsStudio para criar uma instância do pin– ele primeiro chama o manipulador de interseção para determinar um formato padrão aceitável. Para dar suporte a um formato não PCM, o driver deve lidar corretamente com ele nos seguintes locais: