Filter Pembungkus DMO

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

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
Antarmuka Filter IBaseFilter, IDMOWrapperFilter, IPersistStream
Jenis Media Pin Input Lihat Keterangan
Antarmuka Pin Input IMemInputPin, IPin, IQualityControl
Tipe Media Pin Output Lihat Keterangan
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 Keterangan
Kategori Filter Lihat Keterangan

 

Keterangan

Batasan

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 metode IMediaObject .

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 bergantung pada DMO

Antarmuka Encoder

Jika DMO adalah encoder video atau encoder audio, pin output mengekspos antarmuka IAMStreamConfig . Jika DMO adalah encoder video, pin output juga mengekspos antarmuka IAMVideoCompression . Dalam kedua kasus, jika DMO mendukung antarmuka, pin mendelegasikan ke DMO. Jika tidak, pin menyediakan implementasinya sendiri.

Streaming

Filter menggunakan antarmuka IMemInputPin untuk menangani semua streaming. Ini tidak mendukung koneksi IAsyncReader . 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 upstram, 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 mengganti nilai manfaat default, tambahkan entri registri ke kunci registri DMO di HKEY_CLASSES_ROOT\CLSID. Sertakan nilai DWORD bernama "Merit" yang nilainya menentukan manfaatnya.

Kategori

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 antarmuka IMediaBuffer .

Di Windows Vista atau yang lebih baru, buffer media juga mengekspos antarmuka IServiceProvider. DMO dapat menggunakan antarmuka ini untuk mendapatkan pointer ke sampel media yang terkait dengan buffer. Gunakan IID_IMediaSample pengidentifikasi layanan. DMO video dapat menggunakan antarmuka IMediaSample2 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 Struktur AM_SAMPLE2_PROPERTIES.

Kontrol Kualitas

Jika DMO mengekspos antarmuka IDMOQualityControl , filter menerjemahkan panggilan IQualityControl::Notify pada pin outputnya ke panggilan IDMOQualityControl::SetNow pada DMO. Parameter rtNowdari SetNow dihitung sebagai jumlah anggota TimeStamp dan Late dari struktur Kualitas .

Menggunakan Fiter di GraphSedit

Di GraphEdit, filter Pembungkus DMO tidak muncul dengan namanya sendiri. Sebaliknya, 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.

Filter DirectShow

Objek Media DirectX