Implementação do driver de áudio descarregado por hardware
Ao implementar um driver para áudio descarregado, você desenvolve um driver capaz de processar fluxos de áudio descarregados e expor essa capacidade ao sistema de áudio do Windows.
Este tópico apresenta os detalhes de implementação de um driver de áudio desenvolvido para um adaptador de áudio capaz de processar fluxos de áudio descarregados por hardware.
Estes tópicos adicionais nesta seção discutem os problemas que você deve estar ciente ao desenvolver um driver de áudio para um adaptador de áudio que implementa um mecanismo de áudio de hardware para lidar com fluxos de áudio descarregados.
Interfaces auxiliares portcls para processamento de áudio descarregado
Relatório de falhas para áudio descarregado
Descarregamento de hardware – topologia de filtro KS
O Windows dá suporte ao uso de um adaptador de áudio que pode usar um mecanismo de áudio de hardware integrado para processar fluxos de áudio. Quando você desenvolve esse adaptador de áudio, o driver de áudio associado deve expor esse fato ao sistema de áudio do modo de usuário de maneira específica, para que o sistema de áudio possa descobrir, usar e expor corretamente os recursos desse adaptador e seu driver.
O GUID do KSNODETYPE_AUDIO_ENGINE para descritores de nó
Se um adaptador de áudio for capaz de processar fluxos de áudio descarregados, o driver de áudio do adaptador exporá essa funcionalidade usando um nó no filtro KS para o adaptador.
Se um adaptador de áudio for capaz de processar fluxos de áudio descarregados, o driver de áudio do adaptador exporá essa funcionalidade usando um nó específico no filtro KS para o adaptador.
Cada nó no caminho do fluxo de áudio tem um descritor de nó, para o hardware fora da carga, o driver deve definir o GUID de Tipo como KSNODETYPE_AUDIO_ENGINE.
Aqui está um exemplo de como o driver pode configurar o descritor de nó para este nó:
typedef struct _KSNODE_DESCRIPTOR {
const KSAUTOMATION_TABLE *AutomationTable; // drv specific
const GUID *Type; // must be set to KSNODETYPE_AUDIO_ENGINE
const GUID *Name; // drv specific (KSNODETYPE_AUDIO_ENGINE?)
} KSNODE_DESCRIPTOR, *PKSNODE_DESCRIPTOR;
Se o GUID de Nome estiver definido como KSNODETYPE_AUDIO_ENGINE, você deverá criar uma cadeia de caracteres de nome padrão para esse nó. Em seguida, adicione essa cadeia de caracteres a ks.inf, para que, durante a instalação do driver, a cadeia de caracteres possa ser usada para preencher a chave do Registro MediaCategories .
A definição do GUID para o tipo de nó, KSNODETYPE_AUDIO_ENGINE, é a seguinte:
Code style
#define STATIC_KSNODETYPE_AUDIO_ENGINE\
0x35caf6e4, 0xf3b3, 0x4168, 0xbb, 0x4b, 0x55, 0xe7, 0x7a, 0x46, 0x1c, 0x7e
DEFINE_GUIDSTRUCT("35CAF6E4-F3B3-4168-BB4B-55E77A461C7E", KSNODETYPE_AUDIO_ENGINE);
#define KSNODETYPE_AUDIO_ENGINE DEFINE_GUIDNAMED(KSNODETYPE_AUDIO_ENGINE)
Para obter mais informações, consulte o arquivo de cabeçalho ksmedia.h .
E com base nas informações anteriores, um descritor para um nó de miniport pode ser semelhante ao seguinte:
PCNODE_DESCRIPTOR MiniportNodes[] =
{
// KSNODE_WAVE_AUDIO_ENGINE
{
0, // Flags
NULL, // AutomationTable
&KSNODETYPE_AUDIO_ENGINE, // Type KSNODETYPE_AUDIO_ENGINE
NULL // Name
}
};
A propriedade KSPROPSETID_AudioEngine KS definida para mecanismos de áudio
O conjunto de propriedades KSPROPSETID_AudioEngine é usado para dar suporte a mecanismos de áudio de hardware e processamento de áudio descarregado por hardware. Portanto, o driver de um adaptador que pode processar fluxos de áudio descarregados deve dar suporte às propriedades nesse novo conjunto de propriedades.
O conjunto de propriedades, KSPROPSETID_AudioEngine, é definido da seguinte maneira:
#define STATIC_KSPROPSETID_AudioEngine\
0x3A2F82DCL, 0x886F, 0x4BAA, 0x9E, 0xB4, 0x8, 0x2B, 0x90, 0x25, 0xC5, 0x36
DEFINE_GUIDSTRUCT("3A2F82DC-886F-4BAA-9EB4-082B9025C536", KSPROPSETID_AudioEngine);
#define KSPROPSETID_AudioEngine DEFINE_GUIDNAMED(KSPROPSETID_AudioEngine)
Os nomes das propriedades nesse conjunto de propriedades são definidos na enumeração KSPROPERTY_AUDIOENGINE e o driver deve dar suporte a esses nomes.
Aqui estão as propriedades no conjunto de propriedades KSPROPSETID_AudioEngine :
KSPROPERTY_AUDIOENGINE_BUFFER_SIZE_RANGE
KSPROPERTY_AUDIOENGINE_DESCRIPTOR
KSPROPERTY_AUDIOENGINE_DEVICEFORMAT
KSPROPERTY_AUDIOENGINE_GFXENABLE
KSPROPERTY_AUDIOENGINE_LFXENABLE
KSPROPERTY_AUDIOENGINE_LOOPBACK_PROTECTION
KSPROPERTY_AUDIOENGINE_MIXFORMAT
KSPROPERTY_AUDIOENGINE_SUPPORTEDDEVICEFORMATS
KSPROPERTY_AUDIOENGINE_VOLUMELEVEL
Propriedades necessárias no conjunto de propriedades KSPROPSETID_ Audio
Além de dar suporte às propriedades no conjunto de propriedades KSPROPSETID_AudioEngine , o driver também deve dar suporte às seguintes propriedades existentes no conjunto de propriedades KSPROPSETID_Audio :
E para concluir a implementação do suporte de driver para processamento de áudio descarregado por hardware, as propriedades estão disponíveis para o conjunto de propriedades KSPROPSETID_ Audio .
KSPROPERTY_AUDIO_LINEAR_BUFFER_POSITION
KSPROPERTY_AUDIO_PRESENTATION_POSITION
KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION
Relatórios de falhas e atualizações de driver de classe de porta
Além do suporte descrito nas seções anteriores para processamento de áudio descarregado por hardware, o driver de classe de porta do Windows fornece "interfaces auxiliares" para simplificar o desenvolvimento de um driver que pode trabalhar com fluxos de áudio descarregados. E quando esse driver detecta falhas, há um mecanismo em vigor para permitir que o driver relate os erros de falha. Os tópicos a seguir fornecem mais detalhes sobre as interfaces auxiliares e os relatórios de falhas:
Interfaces auxiliares portcls para processamento de áudio descarregado Além do suporte descrito nas seções anteriores para processamento de áudio descarregado por hardware, o driver de classe de porta do Windows também inclui "interfaces auxiliares" para simplificar o desenvolvimento de um driver que pode trabalhar com fluxos de áudio descarregados. E quando esse driver detecta falhas, há um mecanismo em vigor para permitir que o driver relate os erros de falha. Os tópicos a seguir fornecem mais detalhes sobre as interfaces auxiliares e os relatórios de falhas: