Partilhar via


Interfaces auxiliares de Portcls para processamento de áudio descarregado

Este tópico apresenta as interfaces auxiliares que a Microsoft adicionou ao seu driver de classe de porta de áudio (PortCls), para simplificar a implementação de drivers que suportam processamento de áudio descarregado.

Quando desenvolve o seu driver de miniport WaveRT que funcionará com um adaptador de áudio capaz de processar fluxos de áudio processados por hardware, o seu driver de miniport funciona com o PortCls para transmitir e/ou processar dados de áudio.

O PortCls pode lidar com todas as propriedades de streaming do kernel (KS) relacionadas ao descarregamento, e é isso que simplifica o desenvolvimento de um driver de miniporta WaveRT para expor o suporte ao processamento de fluxos de áudio descarregados de hardware. Como resultado das atualizações, o PortCls só chama o controlador de miniporta subjacente para operações específicas de hardware e/ou do controlador através de duas interfaces recém-definidas.

Você deve desenvolver duas classes para trabalhar com essas interfaces, uma para cada interface.

Trabalhando com IMiniportAudioEngineNode

A classe que você desenvolve para trabalhar com IMiniportAudioEngineNode, também deve herdar de IMiniportWaveRT. Os métodos definidos em IMiniportAudioEngineNode permitem que o seu controlador use propriedades KS que acedem à infraestrutura de áudio através de um manipulador de filtro KS. A hierarquia de classe/interface é a seguinte:

Diagrama mostrando a classe de miniporta WaveRT personalizada herdada de IMiniportWaveRT e IMiniportAudioEngineNode.

Portanto, se, por exemplo, você desenvolver uma classe chamada CYourMiniportWaveRT, então, como você pode ver no diagrama anterior, CYourMiniportWaveRT deve implementar todos os métodos (mostrados como Operations) definidos para as duas interfaces pai.

Um modelo esquelético para tal classe conteria o seguinte código:

class CMiniportWaveRT : 
    public IMiniportWaveRT,
    public IMiniportAudioEngineNode,
    public CUnknown
{
...

    IMP_IMiniportWaveRT;
    IMP_IMiniportAudioEngineNode;
...

};

O arquivo de cabeçalho Portcls.h define essas interfaces.

Trabalhando com IMiniportStreamAudioEngineNode

A classe que você desenvolve para trabalhar com a segunda interface, IMiniportStreamAudioEngineNode, também deve herdar de IMiniportWaveRTStreamNotification. Os métodos definidos em IMiniportStreamAudioEngineNode permitem que seu driver use propriedades KS que acessam o mecanismo de áudio por meio de um identificador de instância de pino. A hierarquia de classe/interface é a seguinte:

Diagrama mostrando a classe customizada de miniport de fluxo WaveRT que herda de IMiniportWaveRTStreamNotification e IMiniportStreamAudioEngineNode.

Portanto, se, por exemplo, você desenvolver uma classe chamada CYourMiniportWaveRTStream, então, como você pode ver no diagrama anterior, CYourMiniportWaveRTStream deve implementar todos os métodos definidos para as duas interfaces pai.

Um modelo esquelético para tal classe conteria o seguinte código:

class CMiniportWaveRTStream : 
    public IMiniportWaveRTStreamNotification,
    public IMiniportStreamAudioEngineNode,
    public CUnknown
{
...
    IMP_IMiniportWaveRTStream;
    IMP_IMiniportWaveRTStreamNotification;
    IMP_IMiniportStreamAudioEngineNode;
...

};

O arquivo de cabeçalho Portcls.h define essas interfaces. E para obter mais informações sobre como desenvolver um driver que possa lidar com fluxos de áudio descarregados de hardware, consulte Implementação de driver de áudio descarregado de hardware.