Metode IAudioRenderClient::ReleaseBuffer (audioclient.h)
Metode ReleaseBuffer merilis ruang buffer yang diperoleh dalam panggilan sebelumnya ke metode IAudioRenderClient::GetBuffer .
Sintaks
HRESULT ReleaseBuffer(
[in] UINT32 NumFramesWritten,
[in] DWORD dwFlags
);
Parameter
[in] NumFramesWritten
Jumlah bingkai audio yang ditulis oleh klien ke paket data. Nilai parameter ini harus kurang dari atau sama dengan ukuran paket data, seperti yang ditentukan dalam parameter NumFramesRequested yang diteruskan ke metode IAudioRenderClient::GetBuffer .
[in] dwFlags
Bendera konfigurasi buffer. Pemanggil dapat mengatur parameter ini baik ke 0 atau ke nilai enumerasi _AUDCLNT_BUFFERFLAGS berikut (bit bendera):
AUDCLNT_BUFFERFLAGS_SILENT
Jika bit bendera ini diatur, mesin audio memperlakukan paket data seolah-olah berisi keheningan terlepas dari nilai data yang terkandung dalam paket. Bendera ini menghilangkan kebutuhan klien untuk secara eksplisit menulis data keheningan ke buffer penyajian.
Nilai kembali
Jika metode berhasil, metode akan mengembalikan S_OK. Jika gagal, kemungkinan kode pengembalian disertakan, tetapi tidak terbatas pada, nilai yang diperlihatkan dalam tabel berikut.
Menampilkan kode | Deskripsi |
---|---|
|
Nilai NumFramesWritten melebihi nilai NumFramesRequested yang ditentukan dalam panggilan IAudioRenderClient::GetBuffer sebelumnya. |
|
Streaming adalah mode eksklusif dan menggunakan buffering berbasis peristiwa, tetapi klien mencoba untuk merilis paket yang bukan ukuran buffer. |
|
Panggilan ini tidak didahului oleh panggilan yang sesuai ke IAudioRenderClient::GetBuffer. |
|
Perangkat titik akhir audio telah dicabut, atau perangkat keras audio atau sumber daya perangkat keras terkait telah dikonfigurasi ulang, dinonaktifkan, dihapus, atau tidak tersedia untuk digunakan. |
|
Layanan audio Windows tidak berjalan. |
|
Parameter dwFlags bukan nilai yang valid. |
Keterangan
Klien harus merilis jumlah bingkai yang sama dengan yang dimintanya dalam panggilan sebelumnya ke metode IAudioRenderClient::GetBuffer . Pengecualian tunggal untuk aturan ini adalah bahwa klien selalu dapat memanggil ReleaseBuffer untuk merilis 0 bingkai (kecuali aliran adalah mode eksklusif dan menggunakan buffering berbasis peristiwa).
Perilaku ini menyediakan cara yang nyaman bagi klien untuk "merilis" paket yang diminta sebelumnya dengan panjang 0. Dalam hal ini, panggilan ke ReleaseBuffer bersifat opsional. Setelah memanggil GetBuffer untuk mendapatkan paket panjang 0, klien memiliki opsi untuk tidak memanggil ReleaseBuffer sebelum memanggil GetBuffer lagi.
Selain itu, jika panggilan GetBuffer sebelumnya mendapatkan paket ukuran bukan nol, memanggil ReleaseBuffer dengan NumFramesRequested diatur ke 0 akan berhasil (kecuali aliran adalah mode eksklusif dan menggunakan buffering berbasis peristiwa). Arti dari panggilan adalah bahwa klien tidak menulis data ke paket sebelum merilisnya. Dengan demikian, metode memperlakukan bagian buffer yang diwakili oleh paket sebagai tidak digunakan dan akan membuat bagian buffer ini tersedia lagi untuk klien dalam panggilan GetBuffer berikutnya.
Klien harus menghindari penundaan berlebihan antara panggilan GetBuffer yang memperoleh buffer dan panggilan ReleaseBuffer yang merilis buffer. Implementasi mesin audio mengasumsikan bahwa panggilan GetBuffer dan panggilan ReleaseBuffer yang sesuai terjadi dalam periode pemrosesan buffer yang sama. Klien yang menunda merilis buffer untuk lebih dari satu periode berisiko kehilangan data sampel.
Untuk contoh kode yang memanggil metode ReleaseBuffer , lihat topik berikut:
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows Vista [aplikasi desktop | Aplikasi UWP] |
Server minimum yang didukung | Windows Server 2008 [aplikasi desktop | Aplikasi UWP] |
Target Platform | Windows |
Header | audioclient.h |