IMiniportWaveRTStream::AllocateAudioBuffer-Methode (portcls.h)
Die AllocateAudioBuffer-Methode weist einen zyklischen Puffer für Audiodaten zu.
Syntax
NTSTATUS AllocateAudioBuffer(
ULONG RequestedSize,
PMDL *AudioBufferMdl,
ULONG *ActualSize,
ULONG *OffsetFromFirstPage,
MEMORY_CACHING_TYPE *CacheType
);
Parameter
RequestedSize
Gibt die angeforderte Größe des Audiopuffers in Bytes an.
AudioBufferMdl
Ausgabezeiger für eine Speicherdeskriptorliste (Memory Descriptor List, MDL), die den Audiopuffer beschreibt. Dieser Parameter verweist auf eine vom Aufrufer zugewiesene Zeigervariable, in die die Methode einen Zeiger auf die MDL schreibt. Allgemeine Informationen zu Windows-Kernel-MDLs finden Sie unter Verwenden von MDLs.
ActualSize
Ausgabezeiger für die tatsächliche Größe des zugeordneten Puffers in Bytes. Dieser Parameter verweist auf eine ULONG-Variable, in die die Methode den Größenwert schreibt.
OffsetFromFirstPage
Ausgabezeiger für den Offset des Puffers in Bytes vom Anfang der ersten Seite in der MDL. Dieser Parameter verweist auf eine vom Aufrufer zugewiesene ULONG-Variable, in die die Methode den Offsetwert schreibt.
CacheType
Gibt den Typ der Zwischenspeicherung an, die der Client für den Audiopuffer anfordert. Dieser Parameter ist ein MEMORY_CACHING_TYPE Enumerationswert. Weitere Informationen finden Sie weiter unten im Abschnitt Hinweise.
Rückgabewert
Diese Methode gibt NTSTATUS zurück. AllocateAudioBuffer gibt STATUS_SUCCESS zurück, wenn der Aufruf erfolgreich war. Andernfalls gibt die Methode einen entsprechenden Fehler status Code zurück. In der folgenden Tabelle sind einige der möglichen Fehler status Codes aufgeführt.
Rückgabecode | Beschreibung |
---|---|
STATUS_UNSUCCESSFUL | Der Treiber unterstützt die angegebene Kombination von Pufferattributen nicht. |
STATUS_INSUFFICIENT_RESOURCES | Für die Zuweisung des Puffers ist nicht genügend Arbeitsspeicher verfügbar. |
STATUS_DEVICE_NOT_READY | Das Gerät ist nicht bereit. |
Hinweise
Hinweis: Miniports für Intel High Definition Audio Codecs müssen einen CacheType von MmWriteCombined angeben, um die Cachekohärenz sicherzustellen. Dies liegt daran, dass der Intel High Definition Audio Controller möglicherweise für den Nicht-Snoop-Betrieb konfiguriert ist.
Nach dem Empfang einer KSPROPERTY_RTAUDIO_BUFFER-Anforderung vom Client ruft der Porttreiber die Methode AllocateAudioBuffer auf, um einen zyklischen Puffer zuzuweisen, den der Porttreiber später dem virtuellen Adressraum des Clients zuordnen kann.
Während des Aufrufs von AllocateAudioBuffer weist der Miniporttreiber den zyklischen Puffer zu, indem er entweder IPortWaveRTStream::AllocatePagesForMdl oder IPortWaveRTStream::AllocateContiguousPagesForMdl aufruft. Der Miniporttreiber programmiert auch die Audiohardware für die Wiedergabe von oder Aufzeichnung in diesem Puffer, aber er startet die DMA-Übertragungen erst, wenn der Porttreiber IMiniportWaveRTStream::SetState mit State=KSSTATE_RUN aufruft. Die Ausgabeparameter der AllocateAudioBuffer-Methode umfassen die MDL für den Audiopuffer, die tatsächliche Größe des vom Treiber zugewiesenen Puffers und den Offset des Startes des Puffers vom Anfang der ersten Seite in der MDL.
RequestedSize ist ein Eingabeparameter, der die Größe angibt, die der Client für den Audiopuffer anfordert. ActualSize ist ein Ausgabeparameter, der die tatsächliche Größe des Audiopuffers angibt.
Das Audiogerät erfordert möglicherweise, dass der Audiopuffer an Beispielgrenzen beginnt und endet oder andere Arten von hardwareabhängigen Ausrichtungseinschränkungen erfüllt. Wenn genügend Arbeitsspeicher verfügbar ist, ist die tatsächliche Größe des Puffers die angeforderte Größe, die auf das nächste Beispiel oder eine andere hardwarebeschränkte Grenze gerundet (nach oben oder unten) gerundet ist. Die tatsächliche Größe muss mindestens die angeforderte Größe sein. Andernfalls verwendet die Audiositzungs-API (WASAPI) den Puffer nicht, und die Streamerstellung schlägt fehl.
Anforderungen
Anforderung | Wert |
---|---|
Header | portcls.h |
IRQL | PASSIVE_LEVEL |