다음을 통해 공유


IAudioRenderClient::ReleaseBuffer 메서드(audioclient.h)

ReleaseBuffer 메서드는 IAudioRenderClient::GetBuffer 메서드에 대한 이전 호출에서 획득한 버퍼 공간을 해제합니다.

구문

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

매개 변수

[in] NumFramesWritten

클라이언트가 데이터 패킷에 쓴 오디오 프레임의 수입니다. 이 매개 변수의 값은 IAudioRenderClient::GetBuffer 메서드에 전달된 NumFramesRequested 매개 변수에 지정된 데이터 패킷의 크기보다 작거나 같아야 합니다.

[in] dwFlags

버퍼 구성 플래그입니다. 호출자는 이 매개 변수를 0으로 설정하거나 다음 _AUDCLNT_BUFFERFLAGS 열거형 값(플래그 비트)으로 설정할 수 있습니다.

AUDCLNT_BUFFERFLAGS_SILENT

이 플래그 비트가 설정되면 오디오 엔진은 패킷에 포함된 데이터 값에 관계없이 데이터 패킷을 무음이 포함된 것처럼 처리합니다. 이 플래그는 클라이언트가 렌더링 버퍼에 무음 데이터를 명시적으로 쓸 필요가 없습니다.

반환 값

메서드가 성공하면 S_OK가 반환되고, 실패할 경우 가능한 반환 코드는 다음 표에 표시된 값을 포함하지만 이에 국한되지 않습니다.

반환 코드 설명
AUDCLNT_E_INVALID_SIZE
NumFramesWritten 값이 이전 IAudioRenderClient::GetBuffer 호출에 지정된 NumFramesRequested 값을 초과합니다.
AUDCLNT_E_BUFFER_SIZE_ERROR
스트림은 전용 모드이며 이벤트 기반 버퍼링을 사용하지만 클라이언트는 버퍼 크기가 아닌 패킷을 해제하려고 했습니다.
AUDCLNT_E_OUT_OF_ORDER
이 호출은 IAudioRenderClient::GetBuffer에 대한 해당 호출이 선행되지 않았습니다.
AUDCLNT_E_DEVICE_INVALIDATED
오디오 엔드포인트 디바이스가 분리되었거나 오디오 하드웨어 또는 관련 하드웨어 리소스가 다시 구성, 비활성화, 제거 또는 사용할 수 없게 되었습니다.
AUDCLNT_E_SERVICE_NOT_RUNNING
Windows 오디오 서비스가 실행되고 있지 않습니다.
E_INVALIDARG
매개 변수 dwFlags 가 유효한 값이 아닙니다.

설명

클라이언트는 IAudioRenderClient::GetBuffer 메서드에 대한 이전 호출에서 요청한 것과 동일한 수의 프레임을 해제해야 합니다. 이 규칙의 단일 예외는 클라이언트가 항상 ReleaseBuffer 를 호출하여 0 프레임을 해제할 수 있다는 것입니다(스트림이 배타적 모드이고 이벤트 기반 버퍼링을 사용하지 않는 한).

이 동작은 클라이언트가 이전에 요청한 길이 0 패킷을 "해제"하는 편리한 수단을 제공합니다. 이 경우 ReleaseBuffer 에 대한 호출은 선택 사항입니다. GetBuffer를 호출하여 길이가 0인 패킷을 가져온 후 클라이언트는 GetBuffer를 다시 호출하기 전에 ReleaseBuffer를 호출하지 않을 수 있습니다.

또한 이전 GetBuffer 호출에서 0이 아닌 크기의 패킷을 가져온 경우 NumFramesRequested가 0으로 설정된 ReleaseBuffer를 호출하면 성공합니다(스트림이 단독 모드이고 이벤트 기반 버퍼링을 사용하지 않는 한). 호출의 의미는 클라이언트가 패킷을 해제하기 전에 패킷에 데이터를 쓰지 않는다는 것입니다. 따라서 메서드는 패킷이 나타내는 버퍼 부분을 사용하지 않는 것으로 처리하고 다음 GetBuffer 호출에서 버퍼의 이 부분을 클라이언트에서 다시 사용할 수 있게 합니다.

클라이언트는 버퍼를 획득하는 GetBuffer 호출과 버퍼를 해제하는 ReleaseBuffer 호출 간에 과도한 지연을 방지해야 합니다. 오디오 엔진의 구현에서는 GetBuffer 호출 및 해당 ReleaseBuffer 호출이 동일한 버퍼 처리 기간 내에 발생한다고 가정합니다. 둘 이상의 기간 동안 버퍼 해제를 지연하는 클라이언트는 샘플 데이터를 잃을 위험이 있습니다.

ReleaseBuffer 메서드를 호출하는 코드 예제는 다음 topics 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 audioclient.h

추가 정보

IAudioClient::Initialize

IAudioRenderClient 인터페이스

IAudioRenderClient::GetBuffer