Kelas CBaseAllocator
[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Pengambilan Audio/Video di Media Foundation. Fitur-fitur tersebut telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan MediaPlayer, IMFMediaEngine , dan Pengambilan Audio/Video di Media Foundation alih-alih DirectShow, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]
Kelas CBaseAllocator adalah kelas dasar abstrak yang mengimplementasikan alokator. Alokator mengekspos antarmuka IMemAllocator .
Alokator adalah objek yang mengalokasikan buffer memori. Alokator mempertahankan daftar buffer yang tersedia. Ketika klien (umumnya filter) meminta buffer, alokator mengambilnya dari daftar. Klien mengisi buffer dengan data, dan mungkin meneruskan buffer ke objek lain. Akhirnya buffer dirilis dan alokator mengembalikannya ke daftar buffer yang tersedia.
Setiap buffer dienkapsulasi oleh objek yang disebut sampel media. Sampel media adalah cara untuk mengemas pointer ke blok memori dalam kerangka kerja Model Objek Komponen (COM). Sampel media mengekspos antarmuka IMediaSample , dan diimplementasikan menggunakan kelas CMediaSample . Sampel media berisi penunjuk ke buffer terkait, yang dapat diakses dengan memanggil metode IMediaSample::GetPointer . Untuk informasi selengkapnya, lihat Sampel dan Alokator.
Untuk menggunakan kelas ini, lakukan langkah-langkah berikut:
- Panggil metode CBaseAllocator::SetProperties untuk menentukan persyaratan buffer, termasuk jumlah buffer dan ukuran setiap buffer.
- Panggil metode CBaseAllocator::Commit untuk mengalokasikan buffer.
- Panggil metode CBaseAllocator::GetBuffer untuk mengambil sampel media. Metode ini memblokir hingga sampel berikutnya tersedia.
- Setelah selesai dengan setiap sampel, panggil metode IUnknown::Release pada sampel. Sampel tidak dihapus ketika jumlah referensinya mencapai nol. Sebagai gantinya, sampel kembali ke daftar gratis alokator.
- Ketika Anda selesai menggunakan alokator, panggil metode CBaseAllocator::D ecommit untuk membebaskan memori untuk buffer.
Metode Penerapan memanggil metode virtual CBaseAllocator::Alloc, yang mengalokasikan memori untuk buffer. Metode Decommit memanggil metode virtual murni CBaseAllocator::Free, yang membebaskan memori. Kelas turunan harus mengambil alih kedua metode ini.
Kelas dasar CMemAllocator berasal dari CBaseAllocator. Kelas dasar filter menggunakan kelas CMemAllocator .
Variabel Anggota yang Dilindungi | Deskripsi |
---|---|
m_lFree | Arahkan ke daftar sampel media yang tersedia (gratis). |
m_hSem | Semaphore yang disinyalir ketika sampel tersedia. |
m_lWaiting | Jumlah utas yang menunggu sampel. |
m_lCount | Jumlah buffer yang akan disediakan. |
m_lAllocated | Jumlah buffer yang saat ini dialokasikan. |
m_lSize | Ukuran setiap buffer. |
m_lAlignment | Perataan setiap buffer. |
m_lPrefix | Awalan setiap buffer. |
m_bChanged | Bendera yang menunjukkan apakah persyaratan buffer telah berubah. |
m_bCommitted | Bendera yang menunjukkan apakah alokator telah diterapkan. |
m_bDecommitInProgress | Bendera yang menunjukkan apakah operasi penonaktifan sedang berlangsung. |
m_pNotify | Penunjuk ke antarmuka panggilan balik, yang dipanggil saat sampel dirilis. |
m_fEnableReleaseCallback | Bendera yang menunjukkan apakah panggilan balik rilis diaktifkan. |
Metode yang Dilindungi | Deskripsi |
Alokasi | Mengalokasikan memori untuk buffer. Virtual. |
Metode Publik | Deskripsi |
CBaseAllocator | Metode konstruktor. |
~ CBaseAllocator | Metode destruktor. |
SetNotify | Kedaluwarsa. |
GetFreeCount | Mengambil jumlah sampel media yang tidak digunakan. |
NotifySample | Merilis utas apa pun yang menunggu sampel. |
SetWaiting | Menaikkan jumlah utas tunggu. |
Metode Virtual Murni | Deskripsi |
Gratis | Merilis semua memori buffer. |
Metode IMemAllocator | Deskripsi |
SetProperties | Menentukan jumlah buffer yang akan dialokasikan dan ukuran setiap buffer. |
GetProperties | Mengambil jumlah buffer yang akan dibuat oleh alokator, dan properti buffer. |
Melakukan | Mengalokasikan memori untuk buffer. |
Nonaktifkan | Menonaktifkan buffer. |
GetBuffer | Mengambil sampel media yang berisi buffer. |
ReleaseBuffer | Mengembalikan sampel media ke daftar sampel media gratis. |
Persyaratan
Persyaratan | Nilai |
---|---|
Header |
|
Pustaka |
|