Anforderungen für eine Nicht-PCM Pin Factory

Unter Windows XP und höher und Microsoft Windows Me sollten Treiber, die NICHT-PCM WAVEFORMATEX-Formate wiedergeben, ihre Nicht-PCM-Pins gemäß den folgenden Richtlinien verfügbar machen.

Definieren Sie zunächst eine Pinfactory für Ihr Nicht-PCM-Datenformat, das von allen PCM-Pinfactorys getrennt ist. PCM und Nicht-PCM können nicht dieselbe Single-instance Pin-Factory gemeinsam nutzen, da der einzige Pin instance automatisch KMixer zugeordnet wird. Wenn die Pinfactory mehrere Instanzen unterstützt, können PCM und Nicht-PCM gleichzeitig in derselben Pinfactory vorhanden sein. In diesem Fall können Sie jedoch nicht garantieren, dass diese Pininstanzen zur Laufzeit für einen Nicht-PCM-Client verfügbar sind– PCM-Clients haben sie möglicherweise bereits zugewiesen. Die sicherste Option besteht darin, eine separate Pinfactory für Ihr Nicht-PCM-Format bereitzustellen.

Damit der Pin ermittelt und von DirectSound 8 verwendet werden kann, definieren Sie diese Nicht-PCM-Pinfactory für einen Filter, der PCM bereits unterstützt. Andernfalls erkennt DirectSound den Nicht-PCM-Pin nicht. Dies bedeutet auch, dass ein Gerät, das PCM überhaupt nicht unterstützt, kein Nicht-PCM-Format unterstützen kann.

Implementieren Sie zweitens einen Datenschnitthandler für Ihren Nicht-PCM-Pin. PortCls bietet einen integrierten Handler, aber dieser Standardhandler wählt immer PCM aus. Daher sollten Sie einen eigenen Handler für Nicht-PCM-Formate hinzufügen. Sie sollten WAVE_FORMAT_PCM im Schnittpunkthandler für Ihren Nicht-PCM-Pin nicht unterstützen. Beachten Sie, dass dieser Handler mit einem OutputBufferLength von 0 aufgerufen werden kann. In diesem Fall fragt der Aufrufer nur nach der Größe des bevorzugten Datenbereichs, nicht nach den Daten selbst. In diesem Fall sollte der Handler reagieren, indem er die Größe des Nicht-PCM-Datenbereichs in den ResultantFormatLength-Parameter kopiert und STATUS_BUFFER_OVERFLOW zurückgibt. Das Msvad-Beispiel im Windows Driver Kit (WDK) enthält den Code für eine DataRangeIntersection-Routine , den Sie als Beispielhandler verwenden können. Um Ihre DataRangeIntersection-Routine zu testen, verwenden Sie das Hilfsprogramm KsStudio , um Ihre Pin zu instanziieren. Dabei wird zunächst der Schnittpunkthandler aufgerufen, um ein akzeptables Standardformat zu ermitteln. Um ein Nicht-PCM-Format zu unterstützen, muss ihr Treiber es an den folgenden Speicherorten ordnungsgemäß verarbeiten: