Überlegungen zum Kernelstreaming
In diesem Artikel werden die Anforderungen und besonderen Überlegungen zum Kernelstreaming im Zusammenhang mit Bluetooth-Umgehungs-Audiostreaming erläutert.
Der Audiotreiber sollte den WaveRT-Porttreiber vollständig unterstützen, einschließlich des "Pullmodus". Weitere Informationen finden Sie unter Einführung in den WaveRT-Porttreiber. Obwohl es keine Notwendigkeit gibt, eine Hardwareaudio-Engine für die synchrone verbindungsorientierte (SCO)-Umgehungsausgabe zu implementieren, ist dies nicht schadet.
Die Windows-Logoanforderungen für die Formatunterstützung umfassen eine Ausnahme für Bluetooth.
Der Audiotreiber sollte die Formate unterstützen, die über die Sidebandhardware möglich sind, in der Regel 8kHz Mono-Audiostreaming.
Topologie
Alle Bluetooth Hands-Free-Geräte unterstützen sowohl die Erfassung als auch das Rendern. Der Audiotreiber sollte eine Kernelstreamingtopologie (KS) für das Hands-Free-Gerät verfügbar machen, wie im folgenden Diagramm gezeigt, um sowohl Rendern als auch Erfassen zu unterstützen.
Hinweis: Der Audiotreiberentwickler kann auswählen, ob ein einzelner Filter für Aufnahme- und Renderpfade oder separate Filter implementiert werden soll. Das HFP-Gerät lässt jedoch nur ein einzelnes Dateiobjekt auf der GUID_DEVINTERFACE_BLUETOOTH_HFP_SCO_HCIBYPASS Geräteschnittstelle zu. Daher muss ein Entwurf, der zwei Filter verwendet, zulassen, dass beide Filter das einzelne Dateiobjekt gemeinsam nutzen können.
Die DAC- und ADC-Knoten stellen die analogen/digitalen Konvertierungen dar, unterstützen jedoch keine KS-Eigenschaften.
Die Volumeknoten unterstützen KSPROPERTY_AUDIO_VOLUMELEVEL und KSEVENT_CONTROL_CHANGE , indem sie die SETVOLUME- und GETVOLUMESTATUSUPDATE-IOCTLs an den HFP-Treiber senden.
Der Volumeknoten sollte wie folgt implementiert werden:
- Wenn das Bluetooth-Headset die Lautstärkeregelung unterstützt, sollte der Audiotreiber einen Volumeknoten in seine KS-Topologie aufnehmen. Die Volumeeigenschaftenhandler des Audiotreibers senden die oben genannten IOCLTs an den Bluetooth HFP-Treiber, um das Volume zu verarbeiten.
- Wenn das Bluetooth-Headset kein Hardwarevolume implementiert und der Codec (oder DSP) über eine Hardwarelautstärke verfügt, sollte der Audiotreiber die Lautstärkeregelung auf dem Codec (oder DSP) verarbeiten.
- Wenn weder das Bluetooth-Headset noch das Audiogerät über Eine Hardware-Lautstärkeregelung verfügen, sollte kein Lautstärkeknoten angezeigt werden, und Windows fügt einen Softwarelautsteuerungsknoten ein.
- Der Stummschaltungsknoten ist optional. Der Audiotreiber sollte den Stummschaltungsknoten nur implementieren, wenn der DSP oder Audiocodec die Möglichkeit bietet, das Umgehungs-PCM-Signal stummzuschalten, bevor es an den Bluetooth-Controller übergeben wird. Die Stummschaltungsknoten unterstützen KSPROPERTY_AUDIO_MUTE.
Eigenschaftenanforderungen
Der Audiotreiber verwendet die folgenden KS-Eigenschaften, um Informationen zu beliebigen Audiobuchsen oder Buchsen im Audiopfad abzurufen. Der Audiotreiber kann auch die entsprechende Eigenschaftsanforderung verwenden, um eine Verbindung mit einem beliebigen Bluetooth-Audiogerät im Audiopfad herzustellen oder zu unterbrechen.
KSPROPERTY_JACK_DESCRIPTION
Diese Eigenschaft gibt eine KSJACK_DESCRIPTION-Struktur zurück. Der Audiotreiber sollte die KSPROPERTY_JACK_DESCRIPTION Felder wie folgt festlegen.
- ChannelMapping = KSAUDIO_SPEAKER_MONO
- Farbe = 0
- ConnectionType = eConnTypeOtherDigital
- GeoLocation = eGeoLocNotApplicable
- GenLocation = eGenLocOther
- PortConnection = ePortConnUnknown
- IsConnected = <BOOL für aktuelle Verbindungs-status>
KSPROPERTY_JACK_DESCRIPTION2
Diese Eigenschaft gibt eine KSJACK_DESCRIPTION2-Struktur zurück. Der Audiotreiber sollte die KSPROPERTY_JACK_DESCRIPTION2 Felder wie folgt festlegen.
- DeviceStateInfo = 0
- JackCapabilities = JACKDESC2_PRESENCE_DETECT_CAPABILITY
KSPROPERTY_ONESHOT_RECONNECT
Der Filter des Audiotreibers sollte KSPROPERTY_ONESHOT_RECONNECT unterstützen. Zum Erstellen und Initialisieren dieser Struktur sendet der Audiotreiber IOCTL_BTHHFP_DEVICE_REQUEST_CONNECT an den HFP-Treiber. Der HFP-Treiber führt diese Anforderung aus und versucht dann, asynchron eine Verbindung mit dem Bluetooth-Audiogerät herzustellen.
KSPROPERTY_ONESHOT_DISCONNECT
Der Filter des Audiotreibers sollte KSPROPERTY_ONESHOT_DISCONNECT unterstützen. Um diese Struktur zu erstellen und zu initialisieren, sendet der Audiotreiber IOCTL_BTHHFP_DEVICE_REQUEST_DISCONNECT an den HFP-Treiber. Der HFP-Treiber schließt diese Anforderung ab und versucht dann, die Verbindung mit dem Bluetooth-Audiogerät asynchron zu trennen.
Wenn ein Audiotreiber diese Eigenschaften unterstützt, werden im Dialogfeld Sound im Systemsteuerung die Befehle Verbinden und Trennen für den HFP-Endpunkt verfügbar gemacht.