Udostępnij przez


Interfejsy pomocnicze Portcls do odciążonego przetwarzania dźwięku

W tym temacie przedstawiono interfejsy pomocnicze, które firma Microsoft dodała do sterownika klasy portów audio (PortCls), aby uprościć implementację sterowników obsługujących przetwarzanie audio z odciążeniem.

Gdy opracowujesz sterownik miniportu WaveRT, współpracujący z adapterem audio zdolnym do przetwarzania strumieni audio odciążanych sprzętowo, sterownik miniportu współpracuje z PortCls w celu przesyłania oraz/lub przetwarzania danych audio.

PortCls może obsługiwać wszystkie właściwości przesyłania strumieniowego jądra związane z offload (KS), i to sprawia, że można łatwo opracować sterownik miniportu WaveRT, aby zapewnić obsługę przetwarzania sprzętowo odciążonych strumieni audio. Po aktualizacji, PortCls wywołuje sterownik miniportu tylko dla operacji sprzętowych i/lub specyficznych dla sterowników za pośrednictwem dwóch nowo zdefiniowanych interfejsów.

Aby pracować z tymi interfejsami, należy opracować dwie klasy, po jednym dla każdego interfejsu.

Praca z węzłem IMiniportAudioEngineNode

Klasa opracowywana do pracy z IMiniportAudioEngineNode musi również dziedziczyć z IMiniportWaveRT. Metody zdefiniowane w IMiniportAudioEngineNode umożliwiają sterownikowi używanie właściwości KS, które uzyskują dostęp do aparatu audio za pośrednictwem uchwytu filtru KS. Hierarchia klasy/interfejsu jest następująca:

Diagram przedstawiający niestandardową klasę miniportu WaveRT dziedziczącą z elementów IMiniportWaveRT i IMiniportAudioEngineNode.

Więc jeśli na przykład utworzysz klasę o nazwie CYourMiniportWaveRT, to jak widać na powyższym diagramie, CYourMiniportWaveRT musi zaimplementować wszystkie metody (pokazane jako Operacje) zdefiniowane dla dwóch interfejsów nadrzędnych.

Szablon szkieletowy dla takiej klasy będzie zawierać następujący kod:

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

    IMP_IMiniportWaveRT;
    IMP_IMiniportAudioEngineNode;
...

};

Plik nagłówka Portcls.h definiuje te interfejsy.

Praca z modułem IMiniportStreamAudioEngineNode

Klasa opracowywana do pracy z drugim interfejsem IMiniportStreamAudioEngineNode musi również dziedziczyć z klasy IMiniportWaveRTStreamNotification. Metody zdefiniowane w IMiniportStreamAudioEngineNode umożliwiają sterownikowi używanie właściwości KS, które uzyskują dostęp do aparatu audio za pośrednictwem uchwytu instancji pinu. Hierarchia klasy/interfejsu jest następująca:

Diagram przedstawiający niestandardową klasę miniportu strumienia WaveRT dziedziczącą z klasy IMiniportWaveRTStreamNotification i IMiniportStreamAudioEngineNode.

Więc jeśli na przykład utworzysz klasę o nazwie CYourMiniportWaveRTStream, to jak widać na powyższym diagramie, CYourMiniportWaveRTStream musi zaimplementować wszystkie metody zdefiniowane dla dwóch interfejsów nadrzędnych.

Szablon szkieletowy dla takiej klasy będzie zawierać następujący kod:

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

};

Plik nagłówka Portcls.h definiuje te interfejsy. Aby uzyskać więcej informacji o sposobie opracowywania sterownika, który może obsługiwać odciążane strumienie audio sprzętu, zobacz Hardware Offloaded Audio Driver Implementation (Implementacja odciążonego sterownika audio sprzętu).