Filter Pembungkus DMO
[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.]
Filter Pembungkus DMO memungkinkan aplikasi DirectShow menggunakan DirectX Media Object (DMO) dalam grafik filter. Filter membungkus DMO dan menangani semua detail penggunaan DMO, seperti meneruskan data ke dan dari DMO. Selain itu, filter menggabungkan DMO, sehingga aplikasi dapat mengkueri filter untuk antarmuka COM apa pun yang diekspos DMO.
Label | Nilai |
---|---|
Filter Antarmuka | IBaseFilter, IDMOWrapperFilter, IPersistStream |
Jenis Media Pin Input | Lihat Komentar |
Antarmuka Pin Input | IMemInputPin, IPin, IQualityControl |
Tipe Media Pin Output | Lihat Komentar |
Antarmuka Pin Output | IAMStreamConfig, IAMVideoCompression, IMediaPosition, IMediaSeeking, IPin, IQualityControl |
Filter CLSID | CLSID_DMOWrapperFilter |
CLSID Halaman Properti | Tidak ada halaman properti |
Eksekusi | Qasf.dll |
Merit | Lihat Komentar |
Kategori Filter | Lihat Komentar |
Komentar
Keterbatasan
Pembungkus DMO memiliki batasan berikut:
- Ini tidak mendukung DMO dengan input nol, beberapa input, atau output nol. (Ini mendukung DMO dengan satu input dan beberapa output.)
- Ini tidak mendukung transportasi kustom. Semua transportasi data dilakukan melalui antarmuka IMemInputPin.
- Ini tidak menggunakan antarmuka IMediaObjectInPlace; semua pemrosesan dilakukan menggunakan metodeIMediaObject.
Pin
Untuk setiap aliran input pada DMO, filter membuat pin input yang sesuai. Untuk setiap aliran output, ia membuat pin output yang sesuai. Jenis media yang didukung setiap pin tergantung pada DMO
Antarmuka Encoder
Jika DMO adalah encoder video atau encoder audio, pin output mengekspos antarmukaIAMStreamConfig. Jika DMO adalah encoder video, pin output juga mengekspos antarmukaIAMVideoCompression. Dalam kedua kasus, jika DMO mendukung antarmuka, pin mendelegasikan ke DMO. Jika tidak, pin menyediakan implementasinya sendiri.
Streaming
Filter menggunakan antarmukaIMemInputPin untuk menangani semua streaming. Ini tidak mendukung koneksiIAsyncReader. Filter memanggil IMediaObject::P rocessOutput pada DMO hanya ketika menerima data dari upstream (termasuk pemberitahuan end-of-stream). Oleh karena itu, ini tidak mendukung DMO dengan aliran input nol.
Mencari
Semua permintaan pencarian diteruskan ke filter upstream, melalui pin input pertama pada Pembungkus DMO. Untuk DMO multi-output, ini berarti bahwa filter upstream mungkin menerima beberapa permintaan pencarian saat aplikasi mencari grafik.
Merit
DirectShow menetapkan semua DMO nilai manfaat default MERIT_NORMAL + 0x800. Nilai ini berada di antara MERIT_NORMAL dan MERIT_PREFERRED. Filter dekoder umumnya memiliki nilai manfaat MERIT_NORMAL. Oleh karena itu, manajer grafik filter biasanya akan memilih dekoder DMO melalui filter dekoder. Untuk mengambil alih nilai merit default, tambahkan entri registri ke kunci registri DMO di HKEY_CLASSES_ROOT\CLSID. Sertakan nilai DWORD bernama "Merit" yang nilainya menentukan merit.
Golongan
Filter Pembungkus DMO tidak muncul dengan sendirinya dalam kategori apa pun. Ketika membungkus DMO, DMO muncul dalam kategori DirectShow yang sesuai dengan kategori DMO, dengan nama DMO.
Buffer
Filter Pembungkus DMO meneruskan buffer media ke DMO yang mengekspos antarmukaIMediaBuffer.
Di Windows Vista atau yang lebih baru, buffer media juga mengekspos antarmuka IServiceProvider. DMO dapat menggunakan antarmuka ini untuk mendapatkan penunjuk ke sampel media yang terkait dengan buffer. Gunakan pengidentifikasi layanan IID_IMediaSample. DMO video dapat menggunakan antarmukaIMediaSample2 sampel media untuk mengatur bendera interlace pada sampel. Kode berikut menunjukkan cara mendapatkan pointer ke sampel media:
IServiceProvider *pSp = NULL;
IMediaSample2 *pSample2 = NULL;
HRESULT hr = S_OK;
hr = pBuffer->QueryInterface(IID_IServiceProvider, (void**)&pSp);
if (SUCCEEDED(hr))
{
hr = pSp->QueryService(
IID_IMediaSample, // Service identifier.
IID_IMediaSample2, // Interface identifier.
(void**)&pSample2
);
if (SUCCEEDED(hr))
{
// Set flags (not shown).
pSample2->Release();
}
pSp->Release();
}
Untuk informasi selengkapnya tentang bendera interlace per sampel, lihat AM_SAMPLE2_PROPERTIES Struktur.
Kontrol Kualitas
Jika DMO mengekspos antarmukaIDMOQualityControl, filter menerjemahkan IQualityControl::Beri tahu panggilan pada pin outputnya ke IDMOQualityControl::SetNow panggilan di DMO. Parameter rtNowSetNow dihitung sebagai jumlah TimeStamp dan Terlambat anggota strukturKualitas.
Menggunakan Fiter di GraphEdit
Di GraphEdit, filter Pembungkus DMO tidak muncul dengan namanya sendiri. Sebagai gantinya, setiap DMO terdaftar tercantum di bawah kategori filter yang sesuai. Saat Anda menambahkan DMO melalui dialog Sisipkan Filter, GraphEdit membuat filter Pembungkus DMO dan mengonfigurasinya untuk menggunakan DMO tersebut.
Topik terkait