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 |