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

El método ReleaseBuffer libera el espacio de búfer adquirido en la llamada anterior al método IAudioRenderClient::GetBuffer .

Sintaxis

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

Parámetros

[in] NumFramesWritten

Número de fotogramas de audio escritos por el cliente en el paquete de datos. El valor de este parámetro debe ser menor o igual que el tamaño del paquete de datos, como se especifica en el parámetro NumFramesRequested pasado al método IAudioRenderClient::GetBuffer .

[in] dwFlags

Marcas de configuración de búfer. El llamador puede establecer este parámetro en 0 o en el siguiente valor de enumeración _AUDCLNT_BUFFERFLAGS (un bit de marca):

AUDCLNT_BUFFERFLAGS_SILENT

Si se establece este bit de marca, el motor de audio trata el paquete de datos como si contiene silencio independientemente de los valores de datos contenidos en el paquete. Esta marca elimina la necesidad de que el cliente escriba explícitamente datos de silencio en el búfer de representación.

Valor devuelto

Si el método se realiza correctamente, devuelve S_OK. Si se produce un error, los códigos de retorno posibles incluyen, entre otros, los valores que se muestran en la tabla siguiente.

Código devuelto Descripción
AUDCLNT_E_INVALID_SIZE
El valor NumFramesWritten supera el valor NumFramesRequested especificado en la llamada anterior a IAudioRenderClient::GetBuffer .
AUDCLNT_E_BUFFER_SIZE_ERROR
La secuencia es el modo exclusivo y usa el almacenamiento en búfer controlado por eventos, pero el cliente intentó liberar un paquete que no era el tamaño del búfer.
AUDCLNT_E_OUT_OF_ORDER
Esta llamada no estaba precedida de una llamada correspondiente a IAudioRenderClient::GetBuffer.
AUDCLNT_E_DEVICE_INVALIDATED
El dispositivo de punto de conexión de audio se ha desconectado o el hardware de audio o los recursos de hardware asociados se han reconfigurado, deshabilitado, quitado o dejado de estar disponible para su uso.
AUDCLNT_E_SERVICE_NOT_RUNNING
El servicio de audio de Windows no se está ejecutando.
E_INVALIDARG
El parámetro dwFlags no es un valor válido.

Comentarios

El cliente debe liberar el mismo número de fotogramas que solicitó en la llamada anterior al método IAudioRenderClient::GetBuffer . La única excepción a esta regla es que el cliente siempre puede llamar a ReleaseBuffer para liberar 0 fotogramas (a menos que la secuencia sea el modo exclusivo y use el almacenamiento en búfer controlado por eventos).

Este comportamiento proporciona un medio práctico para que el cliente "libere" un paquete solicitado previamente de longitud 0. En este caso, la llamada a ReleaseBuffer es opcional. Después de llamar a GetBuffer para obtener un paquete de longitud 0, el cliente tiene la opción de no llamar a ReleaseBuffer antes de llamar a GetBuffer de nuevo.

Además, si la llamada getBuffer anterior obtuvo un paquete de tamaño distinto de cero, la llamada a ReleaseBuffer con NumFramesRequested establecida en 0 se realizará correctamente (a menos que la secuencia sea el modo exclusivo y use el almacenamiento en búfer controlado por eventos). El significado de la llamada es que el cliente no escribió ningún dato en el paquete antes de liberarlo. Por lo tanto, el método trata la parte del búfer representado por el paquete como no utilizado y hará que esta parte del búfer esté disponible de nuevo para el cliente en la siguiente llamada a GetBuffer .

Los clientes deben evitar retrasos excesivos entre la llamada GetBuffer que adquiere un búfer y la llamada ReleaseBuffer que libera el búfer. La implementación del motor de audio supone que la llamada GetBuffer y la llamada ReleaseBuffer correspondiente se producen dentro del mismo período de procesamiento del búfer. Clientes que retrasan la liberación de un búfer durante más de un período, lo que pierde datos de ejemplo.

Para obtener ejemplos de código que llaman al método ReleaseBuffer , consulte los temas siguientes:

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista [aplicaciones de escritorio | aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2008 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado audioclient.h

Consulte también

IAudioClient::Initialize

Interfaz IAudioRenderClient

IAudioRenderClient::GetBuffer