Metode IAudioClient::GetCurrentPadding (audioclient.h)
Metode GetCurrentPadding mengambil jumlah bingkai padding di buffer titik akhir.
Sintaks
HRESULT GetCurrentPadding(
[out] UINT32 *pNumPaddingFrames
);
Parameter
[out] pNumPaddingFrames
Penunjuk ke variabel UINT32 tempat metode menulis jumlah bingkai (jumlah bingkai audio padding di buffer).
Nilai kembali
Jika metode berhasil, metode akan mengembalikan S_OK. Jika gagal, kemungkinan kode pengembalian menyertakan, tetapi tidak terbatas pada, nilai yang diperlihatkan dalam tabel berikut.
Menampilkan kode | Deskripsi |
---|---|
|
Aliran audio belum berhasil diinisialisasi. |
|
Perangkat titik akhir audio telah dicabut, atau perangkat keras audio atau sumber daya perangkat keras terkait telah dikonfigurasi ulang, dinonaktifkan, dihapus, atau dibuat tidak tersedia untuk digunakan. |
|
Layanan audio Windows tidak berjalan. |
|
Parameter pNumPaddingFrames adalah NULL. |
Keterangan
Metode ini memerlukan inisialisasi sebelumnya dari antarmuka IAudioClient . Semua panggilan ke metode ini akan gagal dengan kesalahan AUDCLNT_E_NOT_INITIALIZED sampai klien menginisialisasi aliran audio dengan berhasil memanggil metode IAudioClient::Initialize .
Metode ini mengambil nilai padding yang menunjukkan jumlah data yang valid dan belum dibaca yang saat ini dimuat buffer titik akhir. Aplikasi penyajian dapat menggunakan nilai padding untuk menentukan berapa banyak data baru yang dapat ditulis dengan aman ke buffer titik akhir tanpa menimpa data yang ditulis sebelumnya yang belum dibaca mesin audio dari buffer. Aplikasi penangkapan dapat menggunakan nilai padding untuk menentukan berapa banyak data baru yang dapat dibaca dengan aman dari buffer titik akhir tanpa membaca data yang tidak valid dari wilayah buffer tempat mesin audio belum menulis data yang valid.
Nilai padding dinyatakan sebagai sejumlah bingkai audio. Ukuran bingkai audio ditentukan oleh anggota nBlockAlign dari struktur WAVEFORMATEX (atau WAVEFORMATEXTENSIBLE) yang diteruskan klien ke metode IAudioClient::Initialize . Ukuran dalam byte bingkai audio sama dengan jumlah saluran dalam aliran yang dikalikan dengan ukuran sampel per saluran. Misalnya, ukuran bingkai adalah empat byte untuk aliran stereo (2 saluran) dengan sampel 16-bit.
Untuk aliran penyajian mode bersama, nilai padding yang dilaporkan oleh GetCurrentPadding menentukan jumlah bingkai audio yang diantrekan untuk diputar di buffer titik akhir. Sebelum menulis ke buffer titik akhir, klien dapat menghitung jumlah ruang yang tersedia di buffer dengan mengurangi nilai padding dari panjang buffer. Untuk memastikan bahwa panggilan berikutnya ke metode IAudioRenderClient::GetBuffer berhasil, klien harus meminta panjang paket yang tidak melebihi ruang yang tersedia di buffer. Untuk mendapatkan panjang buffer, panggil metode IAudioClient::GetBufferSize .
Untuk aliran pengambilan mode bersama, nilai padding yang dilaporkan oleh GetCurrentPadding menentukan jumlah bingkai data pengambilan yang tersedia dalam paket berikutnya di buffer titik akhir. Pada saat tertentu, nol, satu, atau beberapa paket data penangkapan mungkin siap untuk dibaca klien dari buffer. Jika saat ini tidak ada paket yang tersedia, metode melaporkan nilai padding 0. Mengikuti panggilan GetCurrentPadding , panggilan metode IAudioCaptureClient::GetBuffer akan mengambil paket yang panjangnya sama persis dengan nilai padding yang dilaporkan oleh GetCurrentPadding. Setiap panggilan ke GetBuffer mengambil seluruh paket. Paket selalu berisi jumlah bingkai audio yang tidak terpisahkan.
Untuk aliran pengambilan mode bersama, memanggil GetCurrentPadding setara dengan memanggil metode IAudioCaptureClient::GetNextPacketSize . Artinya, nilai padding yang dilaporkan oleh GetCurrentPadding sama dengan panjang paket yang dilaporkan oleh GetNextPacketSize.
Untuk penyajian mode eksklusif atau aliran pengambilan yang diinisialisasi dengan bendera AUDCLNT_STREAMFLAGS_EVENTCALLBACK, klien biasanya tidak memiliki penggunaan untuk nilai padding yang dilaporkan oleh GetCurrentPadding. Sebagai gantinya, klien mengakses seluruh buffer selama setiap lulus pemrosesan. Setiap kali buffer tersedia untuk diproses, mesin audio memberi tahu klien dengan memberi sinyal handel peristiwa klien. Untuk informasi selengkapnya tentang bendera ini, lihat IAudioClient::Initialize.
Untuk penyajian mode eksklusif atau aliran pengambilan yang tidak diinisialisasi dengan bendera AUDCLNT_STREAMFLAGS_EVENTCALLBACK, klien dapat menggunakan nilai padding yang diperoleh dari GetCurrentPadding dengan cara yang mirip dengan yang dijelaskan sebelumnya untuk aliran mode bersama. Detailnya adalah sebagai berikut.
Pertama, untuk aliran penyajian mode eksklusif, nilai padding menentukan jumlah bingkai audio yang diantrekan untuk diputar di buffer titik akhir. Seperti sebelumnya, klien dapat menghitung jumlah ruang yang tersedia dalam buffer dengan mengurangi nilai padding dari panjang buffer.
Kedua, untuk aliran pengambilan mode eksklusif, nilai padding yang dilaporkan oleh GetCurrentPadding menentukan panjang paket berikutnya saat ini. Namun, nilai padding ini adalah rekam jepret dengan panjang paket, yang mungkin meningkat sebelum klien memanggil metode IAudioCaptureClient::GetBuffer . Dengan demikian, panjang paket yang diambil oleh GetBuffer setidaknya sebesar, tetapi mungkin lebih besar dari, nilai padding yang dilaporkan oleh panggilan GetCurrentPadding yang mendahului panggilan GetBuffer . Sebaliknya, untuk aliran pengambilan mode bersama, panjang paket yang diperoleh dari GetBuffer selalu sama dengan nilai padding yang dilaporkan oleh panggilan GetCurrentPadding sebelumnya.
Untuk contoh kode yang memanggil metode GetCurrentPadding, lihat Merender Stream.
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 |
Lihat juga
IAudioCaptureClient::GetBuffer