Partilhar 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 por 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 por 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.

Valor de retorno

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

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

Observações

Observação: os 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 uma operação que não seja de espionagem.

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 WASAPI (API de Sessão de Áudio) não usará o buffer e a criação do fluxo falhará.

Requisitos

Requisito Valor
cabeçalho portcls.h
IRQL PASSIVE_LEVEL

Consulte também

IMiniPortWaveRTStream