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 (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 Zwischenspeicherungstyp an, den der Client für den Audiopuffer anfordert. Dieser Parameter ist ein MEMORY_CACHING_TYPE Enumerationswert. Weitere Informationen finden Sie im Abschnitt "Hinweise" weiter unten.
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 Fehlerstatuscode zurück. In der folgenden Tabelle sind einige der möglichen Fehlerstatuscodes aufgeführt.
Rückgabecode | Beschreibung |
---|---|
STATUS_UNSUCCESSFUL | Der Treiber unterstützt nicht die angegebene Kombination von Pufferattributen. |
STATUS_INSUFFICIENT_RESOURCES | Nicht genügend Arbeitsspeicher ist verfügbar, um den Puffer zuzuweisen. |
STATUS_DEVICE_NOT_READY | Das Gerät ist nicht bereit. |
Bemerkungen
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.
Nachdem ein KSPROPERTY_RTAUDIO_BUFFER Anforderung vom Client empfangen wurde, ruft der Porttreiber die AllocateAudioBuffer-Methode 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 entweder IPortWaveRTStream::AllocatePagesForMdl oder IPortWaveRTStream::AllocateContiguousPagesForMdl aufgerufen wird. Der Miniport-Treiber programmiert auch die Audiohardware für die Wiedergabe von oder Aufzeichnung in diesen Puffer, startet jedoch nicht die DMA-Übertragungen, bis 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 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 auf 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 auf das nächste Beispiel oder eine andere hardwarebeschränkte Grenze aufgerundet (nach oben oder unten). Die tatsächliche Größe muss mindestens die angeforderte Größe aufweisen; andernfalls verwendet das Audiositzungs-API -Audiomodul (WASAPI) den Puffer nicht, und die Datenstromerstellung schlägt fehl.
Anforderungen
Anforderung | Wert |
---|---|
Header- | portcls.h |
IRQL- | PASSIVE_LEVEL |