Bagikan melalui


Kontrol Kualitas Default

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

Kelas Dasar DirectShow menerapkan beberapa perilaku default untuk kontrol kualitas video.

Pesan kualitas dimulai di perender. Kelas dasar untuk perender video CBaseVideoRenderer , yang memiliki perilaku berikut:

  1. Saat perender video menerima sampel, perender video membandingkan stempel waktu pada sampel dengan waktu referensi saat ini.
  2. Perender video menghasilkan pesan berkualitas. Di kelas dasar, Proporsi anggota pesan kualitas dibatasi pada rentang 500 (50%) hingga 2000 (200%). Nilai di luar rentang ini dapat mengakibatkan perubahan kualitas mendadak.
  3. Secara default, perender video mengirim pesan kualitas ke pin output upstram (pin yang terhubung ke pin inputnya). Aplikasi dapat mengambil alih perilaku ini dengan memanggil metode SetSink.

Apa yang terjadi selanjutnya tergantung pada filter upstram. Biasanya, ini adalah filter transformasi. Kelas dasar untuk filter transformasi CTransformFilter , yang menggunakan CTransformInputPin dan kelas CTransformOutputPin untuk mengimplementasikan pin input dan output. Bersama-sama, kelas-kelas ini memiliki perilaku berikut:

  1. Metode CTransformOutputPin::Notify memanggil CTransformFilter::AlterQuality, metode privat pada kelas dasar filter.
  2. Filter turunan dapat mengambil alih AlterQuality untuk menangani pesan kualitas. Secara default, AlterQuality mengabaikan pesan kualitas.
  3. Jika AlterQuality tidak menangani pesan kualitas, pin output memanggil CBaseInputPin::P assNotify, metode privat pada pin input filter.
  4. PassNotify meneruskan pesan kualitas ke tempat yang sesuai—pin output upstram berikutnya, atau manajer kualitas kustom.

Dengan asumsi bahwa tidak ada filter transformasi yang menangani pesan kualitas, pesan akhirnya mencapai pin output pada filter sumber. Di kelas dasar, CBasePin::Notify mengembalikan E_NOTIMPL. Bagaimana filter sumber tertentu menangani pesan berkualitas tergantung pada sifat sumbernya. Beberapa sumber, seperti pengambilan video langsung, tidak dapat melakukan kontrol kualitas yang bermakna. Sumber lain dapat menyesuaikan laju pengiriman sampel.

Diagram berikut mengilustrasikan perilaku default.

kontrol kualitas di kelas dasar

Perender video dasar mengimplementasikan IQualityControl::Notify, yang berarti Anda dapat meneruskan pesan berkualitas ke perender itu sendiri. Jika Anda mengatur anggota Proporsi ke nilai kurang dari 1000, perender video menyisipkan periode tunggu di antara setiap bingkai yang direndernya, yang berlaku memperlambat perender. (Anda mungkin melakukan ini untuk mengurangi penggunaan sistem, misalnya.) Untuk informasi selengkapnya, lihat CBaseVideoRenderer::ThrottleWait. Mengatur proporsi anggota ke nilai yang lebih besar dari 1000 tidak berpengaruh.

ManajemenQuality-Control