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。 如果失敗,可能的傳回碼包括但不限於下表所示的值。
傳回碼 | Description |
---|---|
|
NumFramesWritten 值超過先前 IAudioRenderClient::GetBuffer 呼叫中指定的 NumFramesRequested 值。 |
|
數據流是獨佔模式,並使用事件驅動緩衝,但客戶端嘗試釋放不是緩衝區大小的封包。 |
|
此呼叫前面沒有對應的 IAudioRenderClient::GetBuffer 呼叫。 |
|
音訊端點裝置已解除叢集,或音訊硬體或相關聯的硬體資源已重新設定、停用、移除或無法使用。 |
|
Windows 音訊服務未執行。 |
|
參數 dwFlags 不是有效的值。 |
備註
客戶端必須釋放先前呼叫 IAudioRenderClient::GetBuffer 方法時所要求的相同畫面格數目。 此規則的單一例外狀況是用戶端一律可以呼叫 ReleaseBuffer 來釋放 0 個畫面格 (,除非數據流是獨佔模式,並使用事件驅動緩衝) 。
此行為提供方便的方式,讓用戶端「釋放」先前要求的封包長度為 0。 在此情況下, 對 ReleaseBuffer 的呼叫是選擇性的。 呼叫 GetBuffer 以取得長度為 0 的封包之後,用戶端可以選擇在再次呼叫 GetBuffer 之前未呼叫 ReleaseBuffer。
此外,如果上述 GetBuffer 呼叫取得非零大小的封包,則呼叫 NumFramesRequested 設為 0 的 ReleaseBuffer 將會成功 (,除非數據流是獨佔模式,並使用事件驅動緩衝) 。 呼叫的意義是客戶端在釋放封包之前,不會將數據寫入封包。 因此,方法會將封包所表示的緩衝區部分視為未使用,並將下一個 GetBuffer 呼叫中的這個部分重新提供給用戶端使用。
客戶端應該避免 GetBuffer 呼叫之間取得緩衝區和釋放緩衝區的 ReleaseBuffer 呼叫之間的過度延遲。 音訊引擎的實作假設 GetBuffer 呼叫和對應的 ReleaseBuffer 呼叫發生在相同的緩衝區處理期間內。 延遲釋放緩衝區超過一段時間的用戶端,可能會遺失範例數據。
如需呼叫 ReleaseBuffer 方法的程式代碼範例,請參閱下列主題:
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2008 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | audioclient.h |