Compartilhar via


Método IAudioRenderClient::ReleaseBuffer (audioclient.h)

O método ReleaseBuffer libera o espaço de buffer adquirido na chamada anterior para o método IAudioRenderClient::GetBuffer .

Sintaxe

HRESULT ReleaseBuffer(
  [in] UINT32 NumFramesWritten,
  [in] DWORD  dwFlags
);

Parâmetros

[in] NumFramesWritten

O número de quadros de áudio gravados pelo cliente no pacote de dados. O valor desse parâmetro deve ser menor ou igual ao tamanho do pacote de dados, conforme especificado no parâmetro NumFramesRequested passado para o método IAudioRenderClient::GetBuffer .

[in] dwFlags

Os sinalizadores de configuração de buffer. O chamador pode definir esse parâmetro como 0 ou para o seguinte valor de enumeração _AUDCLNT_BUFFERFLAGS (um bit de sinalizador):

AUDCLNT_BUFFERFLAGS_SILENT

Se esse bit de sinalizador estiver definido, o mecanismo de áudio tratará o pacote de dados como se ele contivesse silêncio, independentemente dos valores de dados contidos no pacote. Esse sinalizador elimina a necessidade de o cliente gravar explicitamente dados de silêncio no buffer de renderização.

Valor de retorno

Se o método for bem-sucedido, ele retornará S_OK. Se falhar, os códigos de retorno possíveis incluem, mas não se limitam a, os valores mostrados na tabela a seguir.

Código de retorno Description
AUDCLNT_E_INVALID_SIZE
O valor NumFramesWritten excede o valor NumFramesRequested especificado na chamada anterior de IAudioRenderClient::GetBuffer .
AUDCLNT_E_BUFFER_SIZE_ERROR
O fluxo é um modo exclusivo e usa buffer controlado por eventos, mas o cliente tentou liberar um pacote que não era do tamanho do buffer.
AUDCLNT_E_OUT_OF_ORDER
Essa chamada não foi precedida por uma chamada correspondente para IAudioRenderClient::GetBuffer.
AUDCLNT_E_DEVICE_INVALIDATED
O dispositivo de ponto de extremidade de áudio foi desconectado ou o hardware de áudio ou os recursos de hardware associados foram reconfigurados, desabilitados, removidos ou indisponíveis para uso.
AUDCLNT_E_RESOURCES_INVALIDATED
Os recursos do fluxo foram invalidados. Esse erro pode ser gerado pelos seguintes motivos:
- O fluxo está suspenso.
- Um fluxo exclusivo ou de descarregamento é desconectado.
- Um aplicativo empacotado que tem um modo exclusivo ou fluxo de descarregamento é quiesced.
- Um fluxo de "saída protegida" é fechado.
AUDCLNT_E_SERVICE_NOT_RUNNING
O serviço de áudio do Windows não está em execução.
E_INVALIDARG
DwFlags de parâmetro não é um valor válido.

Observações

O cliente deve liberar o mesmo número de quadros solicitado na chamada anterior para o método IAudioRenderClient::GetBuffer . A única exceção a essa regra é que o cliente sempre pode chamar ReleaseBuffer para liberar 0 quadros (a menos que o fluxo seja um modo exclusivo e use buffer controlado por eventos).

Esse comportamento fornece um meio conveniente para o cliente "liberar" um pacote de comprimento 0 solicitado anteriormente. Nesse caso, a chamada para ReleaseBuffer é opcional. Depois de chamar GetBuffer para obter um pacote de comprimento 0, o cliente tem a opção de não chamar ReleaseBuffer antes de chamar GetBuffer novamente.

Além disso, se a chamada getbuffer anterior obteve um pacote de tamanho diferente de zero, chamar ReleaseBuffer com NumFramesRequested definido como 0 terá êxito (a menos que o fluxo seja um modo exclusivo e use buffer controlado por eventos). O significado da chamada é que o cliente não escreveu nenhum dado no pacote antes de liberá-lo. Assim, o método trata a parte do buffer representada pelo pacote como não usada e disponibilizará essa parte do buffer novamente para o cliente na próxima chamada getbuffer .

Os clientes devem evitar atrasos excessivos entre a chamada getbuffer que adquire um buffer e a chamada ReleaseBuffer que libera o buffer. A implementação do mecanismo de áudio pressupõe que a chamada getbuffer e a chamada do ReleaseBuffer correspondente ocorram no mesmo período de processamento de buffer. Os clientes que atrasarem a liberação de um buffer por mais de um período correm o risco de perder dados de exemplo.

Para obter exemplos de código que chamam o método ReleaseBuffer , consulte os seguintes tópicos:

Requirements

Requirement Value
Cliente mínimo suportado Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo compatível Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP]
da Plataforma de Destino Windows
Header audioclient.h

Consulte também

IAudioClient::Initialize

IAudioRenderClient Interface

IAudioRenderClient::GetBuffer