Portcls-Hilfsschnittstellen für die ausgeladene Audioverarbeitung

In diesem Thema werden die Hilfsschnittstellen vorgestellt, die Microsoft seinem Port-Class-Audiotreiber (PortCls) hinzugefügt hat, um die Implementierung von Treibern zu vereinfachen, die die Ausladungs-Audioverarbeitung unterstützen.

Wenn Sie Ihren WaveRT-Miniporttreiber entwickeln, der mit einem Audioadapter funktioniert, der hardwareoffene Audiodatenströme verarbeiten kann, arbeitet Ihr Miniporttreiber mit PortCls, um Audiodaten zu streamen und/oder zu verarbeiten.

PortCls kann alle KS-Eigenschaften (Offload-related Kernel Streaming) verarbeiten, und das macht es einfach, einen WaveRT-Miniporttreiber zu entwickeln, um Unterstützung für die Verarbeitung von hardwareausgeladenen Audiostreams verfügbar zu machen. Als Ergebnis der Updates ruft PortCls den zugrunde liegenden Miniporttreiber nur für hardware- und/oder treiberspezifische Vorgänge über zwei neu definierte Schnittstellen auf:

Sie müssen zwei Klassen entwickeln, um mit diesen Schnittstellen zu arbeiten, eine für jede Schnittstelle.

Arbeiten mit IMiniportAudioEngineNode

Die Klasse, die Sie für die Arbeit mit IMiniportAudioEngineNode entwickeln, muss ebenfalls von IMiniportWaveRT erben. Die in IMiniportAudioEngineNode definierten Methoden ermöglichen es Ihrem Treiber, KS-Eigenschaften zu verwenden, die über ein KS-Filterhandle auf die Audio-Engine zugreifen. Die Klassen-/Schnittstellenhierarchie sieht wie folgt aus:

Diagramm der benutzerdefinierten WaveRT-Miniportklasse, die von IMiniportWaveRT und IMiniportAudioEngineNode erbt.

Wenn Sie also z. B. eine Klasse mit dem Namen CYourMiniportWaveRT entwickeln, muss CYourMiniportWaveRT, wie Sie aus dem vorherigen Diagramm sehen können, alle Methoden (dargestellt als Operations) implementieren, die für die beiden übergeordneten Schnittstellen definiert sind.

Eine Skelettvorlage für eine solche Klasse würde den folgenden Code enthalten:

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

    IMP_IMiniportWaveRT;
    IMP_IMiniportAudioEngineNode;
...

};

Die Headerdatei Portcls.h definiert diese Schnittstellen.

Arbeiten mit IMiniportStreamAudioEngineNode

Die Klasse, die Sie für die Arbeit mit der zweiten Schnittstelle IMiniportStreamAudioEngineNode entwickeln, muss ebenfalls von IMiniportWaveRTStreamNotification erben. Die in IMiniportStreamAudioEngineNode definierten Methoden ermöglichen es Ihrem Treiber, KS-Eigenschaften zu verwenden, die über eine Pin instance Handle auf die Audio-Engine zugreifen. Die Klassen-/Schnittstellenhierarchie sieht wie folgt aus:

Diagramm der benutzerdefinierten WaveRT-Stream-Miniportklasse, die von IMiniportWaveRTStreamNotification und IMiniportStreamAudioEngineNode erbt.

Wenn Sie also beispielsweise eine Klasse mit dem Namen CYourMiniportWaveRTStream entwickeln, muss CYourMiniportWaveRTStream, wie Sie aus dem vorherigen Diagramm sehen können, alle Methoden implementieren, die für die beiden übergeordneten Schnittstellen definiert sind.

Eine Skelettvorlage für eine solche Klasse würde den folgenden Code enthalten:

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

};

Die Headerdatei Portcls.h definiert diese Schnittstellen. Weitere Informationen zur Entwicklung eines Treibers, der mit hardwareausgeladenen Audiostreams umgehen kann, finden Sie unter Hardware Offloaded Audio Driver Implementation( Hardware Offloaded Audio Driver Implementation).