引用:
Originally posted by rugner
請問
frame 和
progressive 和 interlacing frame 的 UV 解碼問題
是???
|
MPEG 是以 YUV 4:2:0 儲存,以上下兩行 2x2 個點為一個單位,四點共用一個 U 值和 V 值。解碼時解出 YUV 4:2:0 之後要展開 --> 4:2:2 --> 4:4:4 再轉成 RGB 最後輸出到螢幕上。
MPEG2 壓縮時可以以 frame 為單位壓縮或是以 field 為單位壓縮。如果是 progressive frame,畫面無交錯,壓縮時以 frame 為單位壓縮,則解碼時要拿第一條掃瞄線 Odd1 和第二條掃瞄線 Even1 的 YUV 4:2:0 去展開第一條掃瞄線和第二條掃瞄線的 U、V 值(因為此時一、二條掃瞄線共用一個 UV),拿第三條掃瞄線 Odd2 和第四條掃瞄線 Even2 去展開第三和第四條掃瞄線共用的 UV 值。
然而,如果是 interlaced frame,壓縮時以 field 為單位壓縮(將奇偶掃瞄線拆成兩個獨立的 filed 壓縮,各個 field 是完整無交錯的畫面,這樣的壓縮效果較好),則解碼時就要反過來做,要拿第一條掃瞄線 Odd1 和第三條掃瞄線 Odd2 為一組,展開他們共用的 UV(因為編碼時,是以 Odd1 和 Odd2 為一組取樣為 YUV 4:2:0 再壓縮的,Odd1、Odd2 為同一個 field),要拿第二條 Even1 和第四條 Even2 去展開他們共用的 U、V 值。
唔... 我的文筆拙劣,不知道該怎麼簡單明瞭的說明這個觀念,不知道您是否已經看了頭暈了呢 ^^;
總之 progressive frame 時,解碼時要以 line1 + line2 為一組,line3 +line4 為一組。interlaced frame 則要以 line1 + line3 為一組,line2 + line4 為一組,才能解出正確的 UV 值。
然後現在有許多軟體的 DVD Player 甚至是硬體的 decoder 晶片會出現這種 UV 解碼的錯誤,不是遇到 interlaced frame 時拿 1+2、3+4 去解 UV,就是 progressive frame 時拿 1+3、2+4 去解 UV,造成 UV 解碼的錯誤。
解碼錯誤看起來會怎樣?
請參考下面這兩個網址
交錯畫面解錯
http://arbor.ee.ntu.edu.tw/~jackei/dvd2avi/interlace/
progressive frame 解錯
http://www.hometheaterhifi.com/volu...bug-4-2001.html