Compartilhar via


Método IMiniportWaveRTStream::AllocateAudioBuffer (portcls.h)

O método AllocateAudioBuffer aloca um buffer cíclico para dados de áudio.

Sintaxe

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

Parâmetros

RequestedSize

Especifica o tamanho solicitado, em bytes, do buffer de áudio.

AudioBufferMdl

Ponteiro de saída para uma MDL (lista de descritores de memória) que descreve o buffer de áudio. Esse parâmetro aponta para uma variável de ponteiro alocada pelo chamador na qual o método grava um ponteiro no MDL. Para obter informações gerais sobre MDLs de kernel do Windows, consulte Usando MDLs.

ActualSize

Ponteiro de saída para o tamanho real, em bytes, do buffer alocado. Esse parâmetro aponta para uma variável ULONG na qual o método grava o valor de tamanho.

OffsetFromFirstPage

Ponteiro de saída para o deslocamento do buffer, em bytes, desde o início da primeira página no MDL. Esse parâmetro aponta para uma variável ULONG alocada pelo chamador na qual o método grava o valor de deslocamento.

CacheType

Especifica o tipo de cache que o cliente solicita para o buffer de áudio. Esse parâmetro é um valor de enumeração MEMORY_CACHING_TYPE. Para obter mais informações, consulte a seção Comentários abaixo.

Retornar valor

Esse método retorna NTSTATUS. AllocateAudioBuffer retornará STATUS_SUCCESS se a chamada tiver sido bem-sucedida. Caso contrário, o método retornará um erro apropriado status código. A tabela a seguir mostra alguns dos possíveis códigos de status de erro.

Código de retorno Descrição
STATUS_UNSUCCESSFUL O driver não dá suporte à combinação especificada de atributos de buffer.
STATUS_INSUFFICIENT_RESOURCES A memória insuficiente está disponível para alocar o buffer.
STATUS_DEVICE_NOT_READY O dispositivo não está pronto.

Comentários

Observação: miniportos para codecs de áudio de alta definição intel devem especificar um CacheType de MmWriteCombined para garantir a coerência do cache. Isso ocorre porque o Controlador de Áudio de Alta Definição da Intel pode estar configurado para a operação não bisbilhoteira.

Depois de receber uma solicitação KSPROPERTY_RTAUDIO_BUFFER do cliente, o driver de porta chama o método AllocateAudioBuffer para alocar um buffer cíclico que o driver de porta pode mapear posteriormente para o espaço de endereço virtual do cliente.

Durante a chamada para AllocateAudioBuffer, o driver de miniporto aloca o buffer cíclico chamando IPortWaveRTStream::AllocatePagesForMdl ou IPortWaveRTStream::AllocateContiguousPagesForMdl. O driver de miniporto também programa o hardware de áudio a ser reproduzido ou registrado nesse buffer, mas não inicia as transferências de DMA até que o driver de porta chame IMiniportWaveRTStream::SetState com State=KSSTATE_RUN. Os parâmetros de saída do método AllocateAudioBuffer incluem o MDL para o buffer de áudio, o tamanho real do buffer alocado pelo driver e o deslocamento do início do buffer desde o início da primeira página no MDL.

RequestedSize é um parâmetro de entrada que indica o tamanho que o cliente está solicitando para o buffer de áudio. ActualSize é um parâmetro de saída que indica o tamanho real do buffer de áudio.

O dispositivo de áudio pode exigir que o buffer de áudio comece e termine em limites de exemplo ou para atender a outros tipos de restrições de alinhamento dependentes de hardware. Se houver memória suficiente disponível, o tamanho real do buffer será o tamanho solicitado arredondado (para cima ou para baixo) para o exemplo mais próximo ou outro limite restrito por hardware. O tamanho real deve ser pelo menos o tamanho solicitado; caso contrário, o mecanismo de áudio da API de Sessão de Áudio (WASAPI) não usará o buffer e a criação do fluxo falhará.

Requisitos

Requisito Valor
Cabeçalho portcls.h
IRQL PASSIVE_LEVEL

Confira também

IMiniPortWaveRTStream