Bagikan melalui


Video Interlacing

Topik ini menjelaskan bagaimana sumber media dan dekode harus menangani konten video yang terjalin.

Untuk mendekode dan merender video terjalin dengan benar, informasi berikut diperlukan:

  • Progresif atau terjalin. Aliran video dapat berisi bingkai progresif, bingkai terjalin, atau campuran keduanya.

  • Dominasi bidang. Dominasi bidang menjelaskan bidang mana yang muncul terlebih dahulu, bidang atas atau bidang bawah.

  • Ulangi bidang pertama. Bendera ini digunakan dalam tarik-turun 3:2, ketika bingkai progresif tetapi aliran terjalin. Dalam konteks ini, bidang pertama dapat berupa bidang atas atau bawah.

  • Bidang interleaved atau bidang tunggal. Sampel dapat menampung satu bidang, atau dua bidang yang saling berhubungan. Jika sampel berisi satu bidang, tinggi sampel adalah setengah dari tinggi bingkai, karena sampel hanya berisi setengah dari baris pemindaian untuk bingkai. Bidang yang saling terkait direkomendasikan kecuali karakteristik konten sumber menentukan sebaliknya.

Salah satu karakteristik ini dapat berubah dari satu sampel ke sampel berikutnya. Namun, komponen video perlu mengetahui sesuatu tentang konten keseluruhan sebelum streaming dimulai. Misalnya, jika video dihubungkan, perender video yang ditingkatkan (EVR) perlu memesan memori video untuk deinterlacing. Jika video sepenuhnya bingkai progresif, di sisi lain, EVR dapat mengoptimalkan alur penyajian. Menambahkan langkah deinterlacing ke alur meningkatkan latensi penyajian.

Informasi tentang interlacing disimpan di dua tempat:

  • Informasi umum tentang interlacing dalam aliran ditempatkan dalam jenis media. Untuk informasi selengkapnya tentang jenis media, lihat Jenis Media.

  • Informasi yang dapat berubah dengan setiap sampel ditempatkan pada sampel sebagai atribut. Untuk informasi selengkapnya tentang sampel, lihat Sampel Media.

Informasi Interlace dalam Jenis Media

Atribut MF_MT_INTERLACE_MODE pada jenis media menjelaskan bagaimana aliran secara keseluruhan terjalin. Nilai atribut ini adalah anggota enumerasiMFVideoInterlaceMode. Jenis media video harus selalu memiliki atribut ini.

  • Jika aliran hanya berisi bingkai progresif, tanpa bingkai terjalin, gunakan MFVideoInterlace_Progressive.
  • Jika aliran hanya berisi bingkai yang saling terkait, dan setiap sampel berisi dua bidang yang saling terkait, gunakan MFVideoInterlace_FieldInterleavedUpperFirst atau MFVideoInterlace_FieldInterleavedLowerFirst.
  • Jika aliran hanya berisi bingkai yang terjalin, dan setiap sampel berisi satu bidang, gunakan MFVideoInterlace_FieldSingleUpper atau MFVideoInterlace_FieldSingleLower. Jika bidang bergantian antara atas dan bawah, maka tidak masalah mana dari kedua nilai ini yang digunakan. Jika format hanya berisi bidang atas, atau hanya bidang yang lebih rendah, maka atur nilai yang sesuai dengan konten.
  • Jika aliran berisi campuran bingkai terjalin dan progresif, atau jika dominasi bidang beralih, atur jenis media ke MFVideoInterlace_MixedInterlaceOrProgressive. Gunakan atribut sampel untuk menjelaskan setiap bingkai.

Tabel berikut ini meringkas atribut ini.

MF_MT_INTERLACE_MODE Interlaced? Sampel Bidang pertama
MFVideoInterlace_Progressive Tidak Bingkai progresif Tidak berlaku
MFVideoInterlace_FieldInterleavedUpperFirst Ya Bidang interleaved Atas terlebih dahulu
MFVideoInterlace_FieldInterleavedLowerFirst Ya Bidang interleaved Lebih rendah terlebih dahulu
MFVideoInterlace_FieldSingleUpper Ya Bidang tunggal Atas terlebih dahulu
MFVideoInterlace_FieldSingleLower Ya Bidang tunggal Lebih rendah terlebih dahulu
MFVideoInterlace_MixedInterlaceOrProgressive Dapat bervariasi Bidang interleaved atau bingkai progresif Dapat bervariasi

 

Bidang yang terjalin dan bidang tunggal tidak dapat dicampur. Beralih dari satu ke yang lain memerlukan perubahan tipe media.

Bendera Interlace pada Sampel

Informasi yang dapat berubah dari satu sampel ke sampel berikutnya ditunjukkan menggunakan atribut sampel. Gunakan antarmukaIMFSampleuntuk mendapatkan atau mengatur atribut ini.

Semua atribut interlacing yang tercantum di bagian ini memiliki nilai Boolean. Secara efektif, masing-masing atribut ini dapat memiliki tiga nilai: baik TRUE, FALSE, atau tidak diatur. Jika atribut tidak diatur, nilai diambil dari jenis media. Jika atribut diatur, nilai akan mengambil alih jenis media. Beberapa kombinasi bendera dan jenis media tidak valid.

Atribut Deskripsi
MFSampleExtension_Interlaced Jika TRUE, bingkai akan terjalin. Jika FALSE, bingkainya progresif.
Atur atribut ini pada setiap sampel jika jenis media MFVideoInterlace_MixedInterlaceOrProgressive.
MFSampleExtension_BottomFieldFirst Arti bendera ini tergantung pada apakah sampel berisi bidang yang saling terkait atau bidang tunggal.
  • Bidang interleaved: Jika TRUE, bidang bawah adalah yang pertama. Jika FALSE, bidang atas adalah yang pertama.
  • Bidang tunggal: Jika TRUE, sampel berisi bidang yang lebih rendah. Jika FALSE, sampel berisi bidang atas.
Atur atribut ini pada setiap sampel interlace jika jenis media MFVideoInterlace_FieldSingleUpper, MFVideoInterlace_FieldSingleLower, atau MFVideoInterlace_MixedInterlaceOrProgressive.
MFSampleExtension_RepeatFirstField Jika TRUE, bidang pertama diulang. Jika FALSE atau tidak diatur, bidang pertama tidak diulang.
MFSampleExtension_SingleField Jika TRUE, sampel berisi satu bidang. Jika FALSE, sampel berisi bidang yang saling berhubungan.

 

Tabel berikut menunjukkan bendera mana yang diperlukan, opsional, atau dilarang, berdasarkan jenis media.

Jenis Media Bendera Terjalin Bendera BottomFieldFirst Bendera RepeatFirstField Bendera SingleField
Progresif Fakultatif; jika diatur, harus FALSE. Jangan disetel. Jangan disetel. Jangan disetel.
Bidang interleaved Fakultatif; jika diatur, harus TRUE. Fakultatif; jika disetel, harus cocok dengan jenis media. Jangan disetel. Fakultatif; jika diatur, harus FALSE.
Bidang tunggal Fakultatif; jika diatur, harus TRUE. Diperlukan. Jangan disetel. Atur ke TRUE.
Campuran Diperlukan. Diperlukan. Diperlukan. Fakultatif; jika diatur, harus FALSE.

 

Dalam kasus di mana atribut bersifat opsional, jenis media sudah menentukan informasi. Ini valid untuk mengatur atribut agar cocok, tetapi tidak diperlukan.

Misalnya, jika jenis media MFVideoInterlace_Progressive, itu menyiratkan bahwa semua bingkai dalam aliran bersifat progresif. Oleh karena itu, Anda dapat mengatur atribut MFSampleExtension_Interlaced ke FALSE, atau membiarkan atribut tidak diatur.

Rekomendasi

Bagian ini berisi rekomendasi untuk berbagai jenis konten.

  1. Video ini semuanya adalah bingkai progresif.
  • Atur jenis media ke MFVideoInterlace_Progressive.

  • Jangan atur atribut MFSampleExtension_Interlaced, atau atur ke FALSE pada setiap bingkai.

  • Jangan atur atribut MFSampleExtension_BottomFieldFirst, MFSampleExtension_RepeatFirstField, atau MFSampleExtension_SingleField.

  1. Video ini semuanya terjalin bidang dengan dominasi bidang yang sama. Sampel berisi bidang yang terjalin.
  • Atur jenis media ke MFVideoInterlace_FieldInterleavedUpperFirst atau MFVideoInterlace_FieldInterleavedLowerFirst.

  • Jangan atur atribut MFSampleExtension_Interlaced, atau atur ke TRUE pada setiap bingkai.

  • Jangan atur atribut MFSampleExtension_BottomFieldFirst, atau atur nilai pada setiap bingkai agar sesuai dengan jenis media.

  • Jangan atur atribut MFSampleExtension_RepeatFirstField, atau atur ke FALSE pada setiap bingkai.

  • Jangan atur atribut MFSampleExtension_SingleField, atau atur ke FALSE pada setiap bingkai.

  1. Video berisi campuran bingkai interlaced dan progresif, dengan bidang berulang dan dominasi bidang yang bervariasi (misalnya, video DVD).
  • Atur tipe media ke MFVideoInterlace_MixedInterlaceOrProgressive.

  • Pada setiap bingkai, atur atribut MFSampleExtension_Interlaced, MFSampleExtension_BottomFieldFirst, dan MFSampleExtension_RepeatFirstField.

  • Jangan atur atribut MFSampleExtension_SingleField, atau atur ke FALSE pada setiap bingkai.

  1. Video diselingi dan sampel berisi bidang tunggal.
  • Atur jenis media ke MFVideoInterlace_FieldSingleUpper atau MFVideoInterlace_FieldSingleLower.

  • Pada setiap bingkai, atur atribut MFSampleExtension_BottomFieldFirst.

  • Jangan atur atribut MFSampleExtension_Interlaced, atau atur ke TRUE pada setiap bingkai.

  • Jangan atur atribut MFSampleExtension_RepeatFirstField, atau atur ke FALSE pada setiap bingkai.

  • Jangan atur atribut MFSampleExtension_SingleField, atau atur ke TRUE pada setiap bingkai.

Sebagian besar konten video termasuk dalam salah satu kategori ini.

Pemetaan MPEG-2

Untuk konten MPEG-2, gunakan pemetaan berikut untuk mengonversi bendera MPEG-2 ke atribut sampel Media Foundation.

picture_structure

Nilai Atribut Sampel
bingkai MFSampleExtension_SingleField = false
top_field MFSampleExtension_SingleField = TRUE
FALSE MFSampleExtension_BottomFieldFirst =
bottom_field MFSampleExtension_SingleField = TRUE
MFSampleExtension_BottomFieldFirst = TRUE

 

progressive_frame

Nilai Atribut Sampel
0 MFSampleExtension_Interlaced = TRUE
1 MFSampleExtension_Interlaced = false

 

top_field_first

Nilai Atribut Sampel
0 MFSampleExtension_BottomFieldFirst = TRUE
1 FALSE MFSampleExtension_BottomFieldFirst =

 

repeat_first_field

Nilai Atribut Sampel
0 MFSampleExtension_RepeatFirstField = FALSE
1 TRUE MFSampleExtension_RepeatFirstField =

 

Sampel Single-Field

Jika jenis media MFVideoInterlace_FieldSingleUpper atau MFVideoInterlace_FieldSingleLower, itu berarti bahwa setiap sampel berisi satu bidang. Namun, jenis media menjelaskan seluruh bingkai. Oleh karena itu, setiap buffer hanya berisi setengah jumlah baris bidang yang diberikan dalam jenis media. Misalnya, jika jenis media menjelaskan video sebagai 720 × 480, setiap bidang berisi 240 baris pemindaian, dan oleh karena itu setiap buffer hanya berisi 240 baris piksel. Jika Anda menulis komponen yang menerima jenis media dengan sampel bidang tunggal, Anda harus memperhitungkan fakta ini saat Anda mengakses data di buffer.

Aturan yang sama berlaku untuk bukaan geometris (atributMF_MT_GEOMETRIC_APERTURE) dan bukaan tampilan minimum ( atributMF_MT_MINIMUM_DISPLAY_APERTURE). Wilayah ini ditentukan dalam hal seluruh bingkai, bukan bidang individual.

Pemetaan DirectShow

Di DirectShow, informasi interlacing per sampel terkandung dalam dwTypeSpecificFlags anggota struktur AM_SAMPLE2_PROPERTIES. Tabel berikut menunjukkan atribut yang setara untuk Media Foundation.

Bendera sampel DirectShow Atribut sampel Media Foundation
AM_VIDEO_FLAG_INTERLEAVED_FRAME MFSampleExtension_SingleField = FALSE.
AM_VIDEO_FLAG_FIELD1 MFSampleExtension_Interlaced = TRUE.
MFSampleExtension_SingleField = TRUE.
MFSampleExtension_BottomFieldFirst = FALSE.
AM_VIDEO_FLAG_FIELD2 MFSampleExtension_Interlaced = TRUE.
MFSampleExtension_SingleField = TRUE.
MFSampleExtension_BottomFieldFirst = TRUE.
AM_VIDEO_FLAG_WEAVE MFSampleExtension_Interlaced = FALSE. (Bendera ini menunjukkan bahwa driver tidak boleh mendeinterlace dua bidang.)
AM_VIDEO_FLAG_FIELD1FIRST MFSampleExtension_BottomFieldFirst = FALSE. Jika konten terjalin dan bendera AM_VIDEO_FLAG_FIELD1FIRST tidak ada, atur atribut ini ke TRUE.
AM_VIDEO_FLAG_REPEAT_FIELD MFSampleExtension_RepeatFirstField = TRUE. Jika bendera AM_VIDEO_FLAG_REPEAT_FIELD tidak ada, atur atribut ini ke FALSE.

 

Jika sampel DirectShow tidak berisi bendera sampel, gunakan nilai dwInterlaceFlags dari struktur VIDEOINFOHEADER2:

Bendera interlace DirectShow Atribut sampel Media Foundation
AMINTERLACE_IsInterlaced MFSampleExtension_Interlaced = TRUE.
AMINTERLACE_1FieldPerSample MFSampleExtension_SingleField = TRUE.
AMINTERLACE_Field1First MFSampleExtension_BottomFieldFirst = FALSE.

 

Jenis Media Video

Jenis Media