Angeben von Pindatenbereichen

Nach dem Definieren einer Topologie zur Darstellung der Datenpfade und Steuerungsknoten auf Ihren Geräten besteht der nächste Schritt darin, die Datenbereiche für jeden konfigurierbaren Pin zu definieren. Ein konfigurierbarer Pin kann unter Softwaresteuerung erstellt, konfiguriert und mit einem Wave- oder MIDI-Stream verbunden werden. Im Gegensatz dazu ist eine physische Verbindung oder ein Bridge-Pin implizit vorhanden und kann weder erstellt noch unter Softwaresteuerung konfiguriert werden.

Vor dem Verbinden eines konfigurierbaren Pins, der als Senke oder Quelle für einen Wellen- oder MIDI-Stream dienen soll, muss der Pin für die Verarbeitung des Datenformats für den Stream konfiguriert werden. In der Regel kann der Pin so konfiguriert werden, dass eines von mehreren Streamformaten akzeptiert wird. Beispielsweise kann ein PCM-Wellenausgangspin die folgenden Bereiche von PCM-Streamparametern akzeptieren:

  • Abtastraten von 11,025 kHz, 22,05 kHz, 44,1 kHz und 48 kHz

  • Beispielgrößen von 8, 16, 24 und 32 Bit

  • Beliebige Anzahl von Kanälen von 1 bis 8

Für jeden Typ konfigurierbarer Pins beschreibt ein Miniporttreiber die verschiedenen Datenstromdatenformate, die der Pin verarbeiten kann. Diese Parameterbereiche können wie im folgenden Codebeispiel gezeigt als Array von Datenbereichsdeskriptoren angegeben werden.

static KSDATARANGE_AUDIO PinDataRangesPcm[] =
{
    {
        {
            sizeof(KSDATARANGE_AUDIO),
            0,
            0,
            0,
            STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
            STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
            STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
        },
        8,       // Maximum number of channels
        8,       // Minimum number of bits-per-sample
        32,      // Maximum number of bits-per-channel
        11025,   // Minimum rate
        48000    // Maximum rate
    }
};

Beachten Sie, dass das PinDataRangesPcm Array im vorherigen Beispiel einen einzelnen Datenbereichsdeskriptor vom Typ KSDATARANGE_AUDIO enthält. Im Allgemeinen kann ein Datenbereichsarray eine beliebige Anzahl von Deskriptoren enthalten. Beispielsweise kann ein Nicht-PCM-Wellenausgangspin die Formate AC-3-over-S/PDIF und WMA Pro-over-S/PDIF unterstützen. Jedes dieser beiden Formate wird durch einen separaten Datenbereichsdeskriptor angegeben. Daher würde das Datenbereichsarray des Pins mindestens zwei KSDATARANGE_AUDIO Strukturen enthalten.

Eine konfigurierbare Pin, die das Musikstreamformat einer Anwendung unterstützt, die DirectMusic oder die Windows Multimedia-Funktionen midiInXxx und midiOutXxx verwendet, verwendet einen Datenbereichsdeskriptor vom Typ KSDATARANGE_MUSIC.

Der Porttreiber ruft die Datenbereichsinformationen vom Miniporttreiber ab und verwendet diese Informationen, wo immer möglich, um Anforderungen für Informationen zu den Datenformaten zu verarbeiten, die jeder Pin unterstützen kann. Bei einem Pin mit einem einfachen PCM-Datenbereich kann der Porttreiber die Schnittmengenanforderungen für diesen Pin verarbeiten. In einer Schnittmengenanforderung stellt ein Client eine Reihe von Datenbereichen bereit, die mögliche Datenformate für einen Stream darstellen. Wenn möglich, wählt der Schnittpunkthandler des Porttreibers ein bestimmtes Datenformat aus den Datenbereichen in der Anforderung aus, das ebenfalls in die Datenbereiche der Pin fällt. Dieses Format stellt eine Schnittmenge der beiden Datenbereiche dar. Daher können sowohl der Client als auch der Pin einen Stream mit diesem Format verarbeiten. Für komplexere Datenbereiche kann der Miniporttreiber einen eigenen Schnittpunkthandler bereitstellen, den der Porttreiber dann anstelle eines eigenen Standardhandlers verwendet. Der Schnittpunkthandler des Miniporttreibers kann alle Formatanforderungen zulassen, die möglicherweise nur schwer an den Porttreiber als Array von Datenbereichen ausgedrückt werden können. Weitere Informationen finden Sie unter Data-Intersection-Handler undMehrere Kanal-Audiodaten und WAVE-Dateien.