Bagikan melalui


Menyediakan Allocator-Presenter Kustom untuk VMR-7

[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Tangkapan 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 Audio/Video Capture 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.]

Penyaji alokator bertanggung jawab untuk mengalokasikan permukaan DirectDraw dan menyajikan bingkai video untuk penyajian. Dalam sebagian besar skenario, fungsionalitas alokator-presenter default akan lebih dari cukup untuk kebutuhan aplikasi. Tetapi dengan menyambungkan alokator-presenter kustom, aplikasi dapat memperoleh akses langsung ke bit video dan sepenuhnya mengontrol proses penyajian. Trade-off untuk peningkatan daya ini adalah bahwa aplikasi harus menangani kompleksitas tambahan manajemen permukaan DirectDraw.

menggunakan alokator-penyaji kustom

Gambar sebelumnya menunjukkan antarmuka komunikasi yang digunakan oleh VMR dan alokator-presenter. Alokator-penyaji kustom yang mengambil alih semua fungsi alokasi dan presentasi default harus mengimplementasikan antarmuka IVMRImagePresenter dan IVMRSurfaceAllocator , dan secara opsional, IVMRWindowlessControl.

Untuk mengganti alokator-presenter default, aplikasi memanggil metode IVMRSurfaceAllocatorNotify::AdviseSurfaceAllocator dan meneruskan pointer ke alokator-presenter baru. Menanggapi panggilan ini, VMR akan memanggil metode IVMRSurfaceAllocator::AdviseNotify untuk memberikan penunjuk ke antarmuka IVMRSurfaceAllocatorNotify VMR. Allocator-presenter akan menggunakan penunjuk antarmuka ini saat meneruskan peristiwa ke VMR dengan metode IVMRSurfaceAllocatorNotify::NotifyEvent .

Sebagai solusi alternatif, aplikasi dapat menggunakan alokator-presenternya sendiri dan alokator-presenter default. Dalam skenario ini, alokator-penyaji kustom hanya menangani panggilan di mana fungsionalitas kustom diperlukan, dan meneruskan sisa panggilan dari VMR ke alokator-penyaji default. Dalam banyak kasus, hanya perlu untuk mengambil alih antarmuka IVMRImagePresenter .

menggunakan dua penyaji alokator

Untuk menggunakan alokator-presenter kustom dan alokator-presenter default, aplikasi akan terlebih dahulu memanggil IVMRSurfaceAllocatorNotify::AdviseSurfaceAllocator untuk memberikan pointer ke allocator-presenter baru. Ini menyebabkan alokator-presenter default dihancurkan, sehingga aplikasi harus membuat instans lain dengan memanggil QueryInterface pada VMR dan meminta antarmuka IVMRSurfaceAllocator . Seperti yang ditunjukkan pada gambar sebelumnya, alokator-presenter kustom mengambil alih metode antarmuka IVMRImagePresenter , dan hanya meneruskan semua panggilan ke antarmuka IVMRSurfaceAllocator hingga implementasi default. Gambar ini juga menunjukkan antarmuka IVMRWindowlessControl seperti yang diimplementasikan pada alokator-presenter.

Menyediakan Allocator-Presenter Kustom untuk VMR-9

Mode Pemutaran Tanpa Rendering VMR (Alokator-Penyaji Kustom)