Penyempurnaan Pemutaran DVD di Windows Vista

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

Bagian ini menjelaskan peningkatan pemutaran DVD dan navigasi di Windows Vista.

Menentukan Dekoder

Dalam versi DirectShow sebelumnya, sulit untuk menentukan dekoder MPEG-2 tertentu saat membangun grafik pemutaran DVD. Dimulai di Windows Vista, aplikasi dapat menentukan dekoder sebagai berikut:

  1. Tambahkan dekoder ke grafik sebelum memanggil IDvdGraphBuilder::RenderDvdVideoVolume.
  2. Panggil RenderDvdVideoVolume dan atur bendera AM_DVD_DO_NOT_CLEAR. Dvd Navigator akan memberikan preferensi pada dekoder yang Anda tambahkan.

Dukungan untuk Perender Video yang Ditingkatkan

Disarankan agar aplikasi yang ditulis untuk Windows Vista atau yang lebih baru menggunakan Enhanced Video Renderer (EVR) untuk pemutaran video. Untuk menggunakan EVR dalam aplikasi pemutaran DVD, atur bendera AM_DVD_EVR_ONLY saat Anda memanggil RenderDvdVideoVolume.

Untuk mengonfigurasi EVR sebelum Anda membuat grafik, panggil IDvdGraphBuilder::GetDvdInterface dan kueri untuk antarmuka IEVRFilterConfig atau IMFVideoRenderer . (Antarmuka ini didokumenkan dalam dokumentasi Media Foundation SDK.) Untuk informasi selengkapnya tentang mengonfigurasi perender video dalam grafik pemutaran DVD, lihat Membangun Grafik Filter DVD.

Dvd Navigator tidak akan menggunakan EVR kecuali metode IAMDecoderCaps::GetDecoderCaps decodercaps mengembalikan bendera AM_GETDECODERCAP_QUERY_EVR_SUPPORT. Bendera ini didefinisikan untuk memastikan bahwa aplikasi kompatibel dengan decoder yang ada. Jika RenderDvdVideoVolume gagal menggunakan bendera AM_DVD_EVR_ONLY, kembali ke perender video lain dengan memanggil metode lagi tanpa bendera.

Pemutaran Balik Halus

Dvd Navigator sekarang dapat melakukan pemutaran terbalik yang halus. Dalam pemutaran terbalik yang lancar, DVD Navigator mengirim seluruh unit objek video (VOBA) ke dekoder, dan dekoder memancarkan bingkai dalam urutan terbalik. Fitur ini mengharuskan decoder mendukung pemutaran terbalik yang lancar.

Ketika aplikasi mengatur kecepatan pemutaran ke nilai negatif, DVD Navigator meminta decoder untuk properti AM_RATE_ReverseMaxFullDataRate. Nilai properti ini adalah nilai absolut dari kecepatan terbalik maksimum x 10000. Misalnya, jika kecepatan terbalik maksimum adalah -2,0, nilainya adalah 20000.

Jika dekoder video mendukung properti , DVD Navigator menggunakan pemutaran balik yang lancar. Aliran audio diputar secara terbalik jika dekoder audio mendukung properti; jika tidak, aliran audio dibisukan. Jika dekoder video tidak mendukung properti, atau laju pemutaran melebihi kecepatan balik maksimum dekoder video, DVD Navigator beralih ke mode pemindaian. Dalam mode pemindaian, DVD Navigator hanya mengirim bingkai I ke dekoder dan menghilangkan semua bingkai B dan P.

Selama pemutaran balik yang lancar, DVD Navigator mengirimkan VOBA lengkap ke dekoder. Dvd Navigator mengirimkan VOBA dalam urutan terbalik tetapi mengirim bingkai dalam setiap VOBU dalam urutan penerusan normal mereka. Pada awal setiap VOBU, DVD Navigator mengatur bendera AM_ReverseBlockStart pada sampel. Di akhir VOBU, DVD Navigator mengirimkan sampel kosong dengan bendera AM_ReverseBlockEnd. Untuk mengambil bendera ini, panggil IMediaSample2::GetProperties pada sampel. Bendera diatur dalam anggota dwTypeSpecificFlags dari struktur AM_SAMPLE2_PROPERTIES .

Decoder menyimpan data video hingga menerima sampel dengan bendera AM_ReverseBlockEnd. Pada titik itu, dekoder memberikan bingkai yang didekodekan dalam urutan terbalik. Misalnya, jika VOBU 1 berisi bingkai 1–4 dan VOBU 2 berisi bingkai 5–8, DVD Navigator akan mengirim bingkai dalam urutan ini:

(Blokir mulai) F5 F6 F7 F8 (blok akhir) (blok mulai) F1 F2 F3 F4 (blok akhir)

Dekoder harus memproses bingkai sebagai berikut:

  1. DekodeKAN VOBU 2.
  2. Bingkai output: F8 F7 F6 F5
  3. Dekode VOBU 1.
  4. Bingkai output: F4 F3 F2 F1

Dvd Navigator mengatur stempel waktu pada sampel pertama di VOBU (F1 dan F5 dalam contoh ini), tetapi stempel waktu berisi waktu presentasi awal blok, sehingga dekoder harus diterapkan kali ini ke sampel terakhir di blok (F4 dan F8). Waktu presentasi meningkat selama pemutaran terbalik.

Biasanya VOBU berisi hingga 42 bingkai dan mungkin berisi lebih dari satu grup gambar (GOP). Untuk memungkinkan seluruh VOBU didekodekan, dekoder harus menyimpan cache bingkai I dan P yang didekodekan. VOBA pada DVD bukan GOP tertutup, sehingga bingkai B dalam GOP mungkin memerlukan decoding semua bingkai referensi di GOP sebelumnya. Jika dekoder tidak memiliki permukaan yang cukup untuk menahan semua bingkai yang didekodekan, mungkin perlu mendekode ulang bingkai yang dipilih.

Perubahan Laju

Secara default, DVD Navigator menghapus grafik di antara perubahan laju. Namun, jika dekoder mendukung properti AM_RATE_ResetOnTimeDisc , DVD Navigator tidak akan menghapus grafik, sehingga menghasilkan transisi yang lebih lancar di antara laju pemutaran.

DVD Navigator selalu memberi stempel waktu sampel untuk pemutaran dengan kecepatan 1x, terlepas dari kecepatan pemutaran yang sebenarnya. Dekoder harus menskalakan stempel waktu pada sampel yang didekode agar sesuai dengan kecepatan pemutaran aktual. (Untuk detailnya, lihat properti AM_RATE_SimpleRateChange.) Akibatnya, ketika bermain dengan kecepatan selain 1x, stempel waktu pada bingkai yang didekode berbeda dari yang ada pada bingkai yang dikodekan. Setiap kali DVD Navigator mengatur bendera AM_SAMPLE_TIMEDISCONTINUITY pada sampel, dekoder harus menyinkronkan ulang stempel waktunya. Dengan kata lain, bingkai yang didekodekan harus memiliki stempel waktu yang sama dengan bingkai input. Untuk mengambil bendera AM_SAMPLE_TIMEDISCONTINUITY, panggil IMediaSample2::GetProperties pada sampel. Bendera diatur dalam anggota dwSampleFlags dari struktur AM_SAMPLE2_PROPERTIES .

Manajemen Daya

Di Windows Vista, DVD Navigator memungkinkan peningkatan berikut pada manajemen daya:

  • Resolusi timer yang lebih tinggi
  • Cache data yang lebih besar

Resolusi timer: Aplikasi dapat meminta resolusi timer minimum dengan memanggil fungsi timeBeginPeriod . Resolusi yang lebih tinggi (periode yang lebih pendek) meningkatkan respons sistem terhadap peristiwa berkala, seperti batas waktu, tetapi juga dapat meningkatkan frekuensi pengalihan konteks utas.

Secara default, jam referensi di DirectShow mengatur resolusi timer menjadi 1 milidetik. Pada resolusi tersebut, CPU tidak akan memasuki mode penghematan daya apa pun. Dimulai di Windows Vista, DVD Navigator mengambil alih perilaku default jam referensi dengan memanggil IReferenceClockTimerControl::SetDefaultTimerResolution pada jam referensi. Ini menghapus permintaan jam untuk resolusi timer 1 milidetik. Ini mungkin memungkinkan CPU memasuki mode hemat daya.

Resolusi timer adalah pengaturan global; Windows memilih nilai terendah yang diminta. Filter Video Mixing Renderer (VMR) (VMR-7 dan VMR-9) mengatur resolusi timer menjadi 1 milidetik. EVR biasanya mengatur resolusi ke nilai antara 4 dan 8 milidetik, tergantung pada apakah komposisi desktop diaktifkan dan apakah EVR berada dalam mode layar penuh. Aplikasi lain mungkin juga mengatur resolusi.

Ukuran cache: Aplikasi dapat menentukan berapa banyak data yang di-cache DVD Navigator dengan mengatur opsi DVD_CacheSizeInMB dalam metode IDvdControl2::SetOption. Jika aplikasi mengatur bendera ini ke nilai besar (> 50 MB), drive DVD dapat berputar setelah pra-pengambilan awal, tergantung pada perangkat keras, yang dapat mengurangi konsumsi daya.

Aplikasi DVD