Negosiasi Jenis Media EVR

[Komponen yang dijelaskan di halaman ini, Enhanced Video Renderer, adalah fitur warisan. Ini telah digantikan oleh Simple Video Renderer (SVR) yang diekspos melalui komponen MediaPlayer dan IMFMediaEngine . Untuk memutar konten video, Anda harus mengirim data ke salah satu komponen ini dan memungkinkan mereka membuat instans perender video baru. Komponen-komponen ini telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan MediaPlayer atau API IMFMediaEngine tingkat bawah untuk memutar media video di Windows alih-alih EVR, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]

Topik ini menjelaskan bagaimana perender video (EVR) yang ditingkatkan memvalidasi jenis media.

  • Untuk filter DirectShow EVR, negosiasi jenis terjadi saat pin filter tersambung.

  • Untuk sink media EVR, jenis media diatur melalui antarmuka IMFMediaTypeHandler pada sink aliran. Biasanya pemuat topologi menegosiasikan jenis media, meskipun aplikasi juga dapat mengatur jenis media secara langsung.

EVR tidak melaporkan jenis media pilihan. Klien harus menguji jenis media sampai menemukan jenis yang dapat diterima. Jenis media untuk aliran referensi harus diatur sebelum jenis dapat diatur pada salah satu sub-aliran.

Untuk aliran referensi, mixer EVR mendapatkan daftar format target render DirectX Video Acceleration (DXVA) yang kompatibel. Penyaji EVR menggunakan daftar ini untuk memilih format untuk rantai pertukaran Direct3D. Jika tidak ada format target render yang kompatibel yang dapat ditemukan, EVR menolak jenis media.

Untuk sub-aliran, mixer EVR mengkueri apakah perangkat DXVA mendukung format substream tersebut dalam kombinasi dengan format target render yang dipilih untuk aliran referensi. Akibatnya, format substream yang tersedia mungkin berubah tergantung pada aliran referensi.

Berikut adalah prosesnya secara lebih rinci. Detail ini tidak penting untuk sebagian besar aplikasi, tetapi mungkin berguna jika Anda menulis mixer atau penyaji kustom.

Untuk aliran referensi, negosiasi terjadi sebagai berikut:

  1. EVR memanggil IMFTransform::SetInputType pada mixer.

  2. Mixer mengonversi jenis media menjadi deskripsi DXVA 2.0, menggunakan struktur DXVA2_VideoDesc.

  3. Mixer memanggil IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids untuk mendapatkan daftar GUID prosesor video.

  4. Untuk setiap GUID prosesor video, mixer memanggil IDirectXVideoProcessorService::GetVideoProcessorRenderTargets untuk mendapatkan format target render yang didukung.

  5. EVR memanggil IMFVideoPresenter::P rocessMessage pada penyaji dengan pesan MFVP_MESSAGE_INVALIDATEMEDIATYPE. Pesan ini menyebabkan penyaji memilih format baru.

  6. Penyaji memanggil IMFTransform::GetOutputAvailableType untuk mendapatkan daftar format output yang tersedia dari mixer. Mixer menghasilkan daftar ini dari format yang diperoleh di langkah 4.

  7. Penyaji memilih format dan memanggil IMFTransform::SetOutputType pada mixer.

Untuk sub-aliran, prosesnya lebih sederhana:

  1. EVR memanggil IMFTransform::SetInputType pada mixer.

  2. Mixer memanggil IDirectXVideoProcessorService::GetVideoProcessorSubStreamFormats untuk mendapatkan daftar format substream yang tersedia.

  3. Jika format yang diusulkan terkandung dalam daftar ini, EVR menerima jenis input.

Perender Video yang Ditingkatkan