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 _AUDCLNT_BUFFERFLAGS valor de enumeração (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 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.
Retornar valor
Se o método for bem-sucedido, 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 | Descrição |
---|---|
|
O valor NumFramesWritten excede o valor NumFramesRequested especificado na chamada IAudioRenderClient::GetBuffer anterior. |
|
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. |
|
Essa chamada não foi precedida por uma chamada correspondente para IAudioRenderClient::GetBuffer. |
|
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 não estão disponíveis para uso. |
|
O serviço de áudio do Windows não está em execução. |
|
O parâmetro dwFlags não é um valor válido. |
Comentários
O cliente deve liberar o mesmo número de quadros solicitados 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 solicitado anteriormente de comprimento 0. 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 anterior do GetBuffer 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 o 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 de ReleaseBuffer correspondente ocorram no mesmo período de processamento de buffer. Clientes que atrasam 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:
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows Vista [aplicativos da área de trabalho | Aplicativos UWP] |
Servidor mínimo com suporte | Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP] |
Plataforma de Destino | Windows |
Cabeçalho | audioclient.h |