Bekerja dengan Target Render Direct3D
[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.]
Beberapa subjenis media untuk target render Direct3D didefinisikan untuk digunakan dengan VMR-7 dan VMR-9. Ketika filter upstram mengusulkan koneksi dengan salah satu subtipe ini, itu menunjukkan kepada VMR bahwa penyajian akan dilakukan pada target render Direct3D. Untuk VMR-7, ini akan menjadi target render DirectX 7 Direct3D, dan untuk VMR-9 ini akan menjadi target render DirectX 9 Direct3D. Jika VMR berada dalam mode pencampuran, permukaan juga akan menjadi permukaan tekstur Direct3D. Jika VMR tidak dalam mode pencampuran, permukaan akan menjadi permukaan Direct3D biasa. Format piksel ARGB hanya didukung saat VMR berada dalam mode pencampuran. Subjenis target render adalah:
VMR-7 | VMR-9 |
---|---|
MEDIASUBTYPE_RGB32_D3D_DX7_RT | MEDIASUBTYPE_RGB32_D3D_DX9_RT |
MEDIASUBTYPE_RGB16_D3D_DX7_RT | MEDIASUBTYPE_RGB16_D3D_DX9_RT |
MEDIASUBTYPE_ARGB32_D3D_DX7_RT | MEDIASUBTYPE_ARGB32_D3D_DX9_RT |
MEDIASUBTYPE_ARGB4444_D3D_DX7_RT | MEDIASUBTYPE_ARGB4444_D3D_DX9_RT |
MEDIASUBTYPE_ARGB1555_D3D_DX7_RT | MEDIASUBTYPE_ARGB1555_D3D_DX9_RT |
Jenis-jenis ini ditentukan dalam file header uuids.h. Jenis media MEDIASUBTYPE_RGB32 adalah format RGBx888 dan jenis media MEDIASUBTYPE_RGB16 adalah format RGB565. Untuk informasi selengkapnya tentang format piksel ini, lihat dokumentasi Grafik DirectX.
Meminta Permukaan yang Tidak Terkunci
Mengunci dan membuka kunci permukaan DirectDraw adalah operasi yang mahal secara komputasi. Saat menggunakan subtipe media target render Direct3D, filter upstram membutuhkan permukaan untuk dibuka kuncinya sehingga dapat beroperasi dengan perangkat keras grafis. Untuk menghindari operasi penguncian-membuka kunci yang tidak perlu, VMR mendukung bendera baru pada metode IMemAllocator::GetBuffer , AM_GBF_NODDSURFACELOCK, yang menginstruksikan VMR untuk tidak mengunci permukaan DirectDraw sebelum meneruskan sampel ke filter upstream. Ketika bendera ini digunakan, panggilan ke IMediaSample::GetPointer akan gagal karena tidak ada penunjuk terkunci. Untuk mendapatkan akses ke permukaan DirectDraw, filter harus memanggil QueryInterface pada objek IMediaSample yang dikembalikan dan meminta antarmuka IVMRSurface . Jelas, filter upstram harus memastikan bahwa permukaan tidak dikunci ketika melepaskan sampel kembali ke daftar bebas.