Bagikan melalui


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.]

Hierarki kelas cbaseallocator

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:

  1. Panggil metode CBaseAllocator::SetProperties untuk menentukan persyaratan buffer, termasuk jumlah buffer dan ukuran setiap buffer.
  2. Panggil metode CBaseAllocator::Commit untuk mengalokasikan buffer.
  3. Panggil metode CBaseAllocator::GetBuffer untuk mengambil sampel media. Metode ini memblokir hingga sampel berikutnya tersedia.
  4. 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.
  5. 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
Amfilter.h (termasuk Streams.h)
Pustaka
Strmbase.lib (build ritel);
Strmbasd.lib (build debug)

Lihat juga

Menyediakan Alokator Kustom