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.
|
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.
- 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.
- 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.
- 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.
- 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. |
Topik terkait