Mengalokasikan Buffer untuk Pembacaan File
Dalam skenario pembacaan file yang paling dasar, buffer yang digunakan untuk mengirimkan sampel dialokasikan oleh objek bacaan (objek pembaca atau objek pembaca sinkron). Namun, Anda dapat mengalokasikan buffer sendiri. Untuk informasi selengkapnya tentang manfaat mengalokasikan buffer Anda sendiri, lihat Dukungan Sampel yang Dialokasikan Pengguna.
Untuk menggunakan buffer Anda sendiri untuk pembacaan file, lakukan langkah-langkah berikut.
- Terapkan panggilan balik atau panggilan balik untuk dipanggil pembaca saat membutuhkan buffer. Jika Anda membaca sampel output, gunakan IWMReaderAllocatorEx::AllocateForOutputEx. Jika Anda membaca sampel aliran, gunakan IWMReaderAllocatorEx::AllocateForStreamEx. Sertakan logika apa pun untuk mengelola buffer yang sesuai dengan aplikasi Anda.
- Alokasikan kumpulan buffer yang akan Anda gunakan untuk pembacaan file.
- Temukan ukuran yang diperlukan untuk buffer Anda dengan memanggil IWMReaderAdvanced::GetMaxOutputSampleSize atau IWMReaderAdvanced::GetMaxStreamSampleSize untuk setiap output dan/atau streaming tempat buffer digunakan. Jika menggunakan pembaca sinkron, gunakan IWMSyncReader::GetMaxOutputSampleSize atau IWMSyncReader::GetMaxStreamSampleSize sebagai gantinya.
- Buat setiap buffer untuk kumpulan.
- Siapkan pembaca atau pembaca sinkron untuk dibaca. Untuk informasi selengkapnya, lihat Membaca File dengan Pembaca Asinkron atau Membaca File dengan Pembaca Sinkron.
- Sebelum mulai menulis, panggil IWMReaderAdvanced::SetAllocateForOutput atau IWMReaderAdvanced::SetAllocateForStream untuk setiap output dan streaming yang Anda alokasikan buffernya menggunakan objek pembaca. Untuk pembaca sinkron, panggil IWMSyncReader2::SetAllocateForOutput atau IWMSyncReader2::SetAllocateForStream sebagai gantinya.
- Mulai membaca file.
Objek baca akan melakukan panggilan ke panggilan balik alokator yang sesuai dan mendapatkan sampel dari aplikasi Anda. Logika manajemen buffer Anda harus menyertakan cara untuk memberi sinyal bahwa buffer bebas untuk digunakan lagi. Biasanya, buffer dimasukkan kembali ke dalam kumpulan ketika isinya dirender. Tergantung pada aplikasi Anda, Anda mungkin hanya memerlukan beberapa buffer di kumpulan atau banyak.
Topik terkait