Metodo IMiniportWaveRTStream::AllocateAudioBuffer (portcls.h)

Il metodo AllocateAudioBuffer alloca un buffer ciclico per i dati audio.

Sintassi

NTSTATUS AllocateAudioBuffer(
  ULONG               RequestedSize,
  PMDL                *AudioBufferMdl,
  ULONG               *ActualSize,
  ULONG               *OffsetFromFirstPage,
  MEMORY_CACHING_TYPE *CacheType
);

Parametri

RequestedSize

Specifica le dimensioni richieste, in byte, del buffer audio.

AudioBufferMdl

Puntatore di output per un elenco di descrittori di memoria (MDL) che descrive il buffer audio. Questo parametro punta a una variabile puntatore allocata dal chiamante in cui il metodo scrive un puntatore nel file MDL. Per informazioni generali sugli MDL del kernel di Windows, vedere Using MDLs (Uso di MDLs).

ActualSize

Puntatore di output per le dimensioni effettive, in byte, del buffer allocato. Questo parametro punta a una variabile ULONG in cui il metodo scrive il valore della dimensione.

OffsetFromFirstPage

Puntatore di output per l'offset del buffer, in byte, dall'inizio della prima pagina nel file MDL. Questo parametro punta a una variabile ULONG allocata dal chiamante in cui il metodo scrive il valore di offset.

CacheType

Specifica il tipo di memorizzazione nella cache richiesto dal client per il buffer audio. Questo parametro è un valore di enumerazione MEMORY_CACHING_TYPE. Per altre informazioni, vedere la sezione Osservazioni di seguito.

Valore restituito

Questo metodo restituisce NTSTATUS. AllocateAudioBuffer restituisce STATUS_SUCCESS se la chiamata ha avuto esito positivo. In caso contrario, il metodo restituisce un codice di stato di errore appropriato. La tabella seguente illustra alcuni dei possibili codici di stato di errore.

Codice restituito Descrizione
STATUS_UNSUCCESSFUL Il driver non supporta la combinazione specificata di attributi del buffer.
STATUS_INSUFFICIENT_RESOURCES Memoria insufficiente per allocare il buffer.
STATUS_DEVICE_NOT_READY Il dispositivo non è pronto.

Commenti

Nota: i miniport per i codec audio ad alta definizione Intel devono specificare un valore CacheType di MmWriteCombined per garantire la coerenza della cache. Ciò è dovuto al fatto che il controller audio intel ad alta definizione può essere configurato per l'operazione non snoop.

Dopo aver ricevuto una richiesta di KSPROPERTY_RTAUDIO_BUFFER dal client, il driver della porta chiama il metodo AllocateAudioBuffer per allocare un buffer ciclico che il driver di porta può eseguire in un secondo momento il mapping allo spazio indirizzi virtuale del client.

Durante la chiamata a AllocateAudioBuffer, il driver miniport alloca il buffer ciclico chiamando IPortWaveRTStream::AllocatePagesForMdl o IPortWaveRTStream::AllocateContiguousPagesForMdl. Il driver miniport programma anche l'hardware audio da riprodurre o registrare in questo buffer, ma non avvia il trasferimento DMA fino a quando il driver di porta chiama IMiniportWaveRTStream::SetState con State=KSSTATE_RUN. I parametri di output del metodo AllocateAudioBuffer includono il MDL per il buffer audio, le dimensioni effettive del buffer allocato dal driver e l'offset dell'inizio del buffer dall'inizio della prima pagina nel file MDL.

RequestedSize è un parametro di input che indica le dimensioni richieste dal client per il buffer audio. ActualSize è un parametro di output che indica le dimensioni effettive del buffer audio.

Il dispositivo audio potrebbe richiedere l'inizio e la fine del buffer audio sui limiti di esempio o per soddisfare altri tipi di vincoli di allineamento dipendenti dall'hardware. Se è disponibile memoria sufficiente, le dimensioni effettive del buffer sono le dimensioni richieste arrotondate (verso l'alto o verso il basso) al campione più vicino o ad altri limiti vincolati hardware. Le dimensioni effettive devono essere almeno le dimensioni richieste; in caso contrario, il motore audio DELL'API sessione audio (WASAPI) non userà il buffer e la creazione del flusso avrà esito negativo.

Requisiti

Requisito Valore
Intestazione portcls.h
IRQL PASSIVE_LEVEL

Vedi anche

IMiniPortWaveRTStream