Bagikan melalui


Metode CBaseAllocator.GetBuffer

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

Metode mengambil GetBuffer sampel media yang berisi buffer. Metode ini mengimplementasikan metode IMemAllocator::GetBuffer .

Sintaks

HRESULT GetBuffer(
   IMediaSample   **ppBuffer,
   REFERENCE_TIME *pStartTime,
   REFERENCE_TIME *pEndTime,
   DWORD          dwFlags
);

Parameter

ppBuffer

Menerima penunjuk ke antarmuka IMediaSample buffer. Pemanggil harus merilis antarmuka.

pStartTime

Arahkan ke waktu mulai sampel.

pEndTime

Penunjuk ke waktu akhir sampel.

dwFlags

Kombinasi bitwise dari nol atau lebih bendera. Kelas dasar mendukung bendera berikut.

Nilai Makna
AM_GBF_NOWAIT
Jangan menunggu buffer tersedia.

Nilai kembali

Mengembalikan salah satu nilai HRESULT berikut.

Menampilkan kode Deskripsi
S_OK
Berhasil.
VFW_E_NOT_COMMITTED
Alokator tidak diterapkan.
VFW_E_TIMEOUT
Waktu habis.

Keterangan

Kecuali pemanggil menentukan bendera AM_GBF_NOWAIT di dwFlags, metode ini memblokir hingga sampel berikutnya tersedia.

Sampel media yang diambil memiliki penunjuk yang valid ke buffer yang dialokasikan. Pemanggil bertanggung jawab untuk mengatur properti lain pada sampel, seperti stempel waktu, waktu media, atau properti titik sinkronisasi. Untuk informasi selengkapnya, lihat IMediaSample.

Di kelas dasar, parameter pStartTime dan pEndTime diabaikan. Kelas turunan dapat menggunakan nilai-nilai ini. Misalnya, alokator untuk filter Video Renderer menggunakan nilai-nilai ini untuk menyinkronkan peralihan antara permukaan DirectDraw.

Jika metode perlu menunggu sampel, metode ini menambah jumlah objek tunggu (CBaseAllocator::m_lCount) dan memanggil fungsi WaitForSingleObject pada semaphore (CBaseAllocator::m_hSem). Ketika sampel tersedia, sampel memanggil metode CBaseAllocator::ReleaseBuffer pada alokator, yang meningkatkan jumlah semaphore dengan m_lCount (sehingga melepaskan utas tunggu) dan mengatur m_lCount kembali ke nol.

Persyaratan

Persyaratan Nilai
Header
Amfilter.h (termasuk Streams.h)
Pustaka
Strmbase.lib (build ritel);
Strmbasd.lib (build debug)

Lihat juga

Kelas CBaseAllocator