Поделиться через


Метод IAudioRenderClient::ReleaseBuffer (audioclient.h)

Метод ReleaseBuffer освобождает пространство буфера, полученное в предыдущем вызове метода IAudioRenderClient::GetBuffer .

Синтаксис

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

Параметры

[in] NumFramesWritten

Количество аудиокадров, записанных клиентом в пакет данных. Значение этого параметра должно быть меньше или равно размеру пакета данных, как указано в параметре NumFramesRequested , переданном методу IAudioRenderClient::GetBuffer .

[in] dwFlags

Флаги конфигурации буфера. Вызывающий параметр может задать значение 0 или следующее значение перечисления _AUDCLNT_BUFFERFLAGS (бит флага):

AUDCLNT_BUFFERFLAGS_SILENT

Если этот бит флага задан, звуковой модуль обрабатывает пакет данных, как будто он содержит молчание независимо от значений данных, содержащихся в пакете. Этот флаг устраняет необходимость явного записи данных молчания клиента в буфер отрисовки.

Возвращаемое значение

Если метод выполнен успешно, он возвращает S_OK. В случае сбоя возможные коды возврата включаются, но не ограничиваются значениями, приведенными в следующей таблице.

Код возврата Description
AUDCLNT_E_INVALID_SIZE
Значение NumFramesWritten превышает значение NumFramesRequested , указанное в предыдущем вызове IAudioRenderClient::GetBuffer .
AUDCLNT_E_BUFFER_SIZE_ERROR
Поток является монопольным режимом и использует буфер на основе событий, но клиент попытался освободить пакет, который не был размером буфера.
AUDCLNT_E_OUT_OF_ORDER
Этот вызов не был предшествует соответствующему вызову IAudioRenderClient::GetBuffer.
AUDCLNT_E_DEVICE_INVALIDATED
Устройство конечной точки звука было отключено, или звуковое оборудование или связанные аппаратные ресурсы были перенастроены, отключены, удалены или недоступны для использования.
AUDCLNT_E_RESOURCES_INVALIDATED
Ресурсы потока были недействительны. Эта ошибка может возникать по следующим причинам:
— поток приостановлен.
— Поток эксклюзивной или разгрузки отключен.
— Упаковаемое приложение с монопольным режимом или потоком разгрузки.
— Поток "защищенных выходных данных" закрыт.
AUDCLNT_E_SERVICE_NOT_RUNNING
Звуковая служба Windows не запущена.
E_INVALIDARG
Параметр dwFlags не является допустимым значением.

Замечания

Клиент должен освободить то же количество кадров, которые он запрашивал в предыдущем вызове метода IAudioRenderClient::GetBuffer . Единственное исключение из этого правила заключается в том, что клиент всегда может вызывать ReleaseBuffer для выпуска 0 кадров (если поток не является монопольным режимом и использует буферизацию на основе событий).

Это поведение позволяет клиенту "освободить" ранее запрошенный пакет длиной 0. В этом случае вызов ReleaseBuffer необязателен. После вызова GetBuffer для получения пакета длиной 0 клиент имеет возможность не вызывать ReleaseBuffer перед вызовом GetBuffer еще раз.

Кроме того, если предыдущий вызов GetBuffer получил пакет ненулевого размера, вызов ReleaseBuffer с NumFramesRequested задано значение 0 (если поток не является эксклюзивным режимом и использует буферизацию на основе событий). Смысл вызова заключается в том, что клиент не написал данные в пакет перед его освобождением. Таким образом, метод обрабатывает часть буфера, представленную пакетом, как неиспользуемая, и сделает эту часть буфера доступной снова клиенту в следующем вызове GetBuffer .

Клиенты должны избегать чрезмерных задержек между вызовом GetBuffer , который получает буфер и вызов ReleaseBuffer , который освобождает буфер. Реализация звукового модуля предполагает, что вызов GetBuffer и соответствующий вызов ReleaseBuffer происходят в течение одного периода обработки буфера. Клиенты, которые задерживают освобождение буфера в течение нескольких периодов, рискуют потерять образец данных.

Примеры кода, вызывающие метод ReleaseBuffer , см. в следующих разделах:

Требования

Требование Ценность
Минимальный поддерживаемый клиент Windows Vista [классические приложения | Приложения UWP]
минимальный поддерживаемый сервер Windows Server 2008 [классические приложения | Приложения UWP]
целевая платформа Windows
Header audioclient.h

См. также

IAudioClient::Initialize

Интерфейс IAudioRenderClient

IAudioRenderClient::GetBuffer