標準(200503版)中表 6-4 的第一行爲例進行說明,其餘情況可依此做類似分析:
當 currMbFrameFlag = 1,mbIsTopMbFlag = 1
1、確定當前宏塊左上角像素在幀圖像中對應的像素點:
currMbFrameFlag = 1,mbIsTopMbFlag = 1:當前宏塊爲頂幀宏塊,其左上角像素的對應像素點(co-located pixel)爲 c
2、根據當前宏塊的屬性來確定相鄰像素點:
因爲當前宏塊爲頂幀宏塊,所以 c 的左上角相鄰像素點爲 a
3、確定相鄰像素點所屬宏塊對:
因爲宏塊對是用頂宏塊的地址表示,所以像素點 a 所屬宏塊對爲 mbAddrD,因此表 6-4 中 mbAddrX = mbAddrD
4、根據相鄰宏塊對的屬性來確定相鄰像素點所屬宏塊:
(1)、如果 mbAddrX 是幀宏塊對(即mbAddrXFrameFlag = 1),像素點 a 屬於宏塊 mbAddrD+1
結論:當前宏塊的左上相鄰宏塊爲 mbAddrD+1,因此表 6-4 中:mbAddrN = mbAddrD+1
(2)、如果 mbAddrX 是場宏塊對(即mbAddrXFrameFlag = 0),像素點 a 在場圖像時(即進行隔行抽取後)屬於宏塊mbAddrD+1
結論:當前宏塊的左上相鄰宏塊爲 mbAddrD+1,因此表 6-4 中:mbAddrN = mbAddrD+1
當 currMbFrameFlag = 1,mbIsTopMbFlag = 0
1、確定當前宏塊左上角像素在幀圖像中對應的像素點:
currMbFrameFlag = 1,mbIsTopMbFlag = 0:當前宏塊爲低幀宏塊,其左上角像素的對應像素點(co-located pixel)爲 f
2、根據當前宏塊的屬性來確定相鄰像素點:
因爲當前宏塊爲低幀宏塊,所以 f 的左上角相鄰像素點爲 e
3、確定相鄰像素點所屬宏塊對:
因爲宏塊對是用頂宏塊的地址表示,所以像素點 e 所屬宏塊對爲 mbAddrA,因此表 6-4 中 mbAddrX = mbAddrA
4、根據相鄰宏塊對的屬性來確定相鄰像素點所屬宏塊:
(1)、如果 mbAddrX 是幀宏塊對(即mbAddrXFrameFlag = 1),像素點 e 屬於宏塊 mbAddrA
結論:當前宏塊的左上相鄰宏塊爲 mbAddrA,因此表 6-4 中:mbAddrN = mbAddrA
(2)、如果 mbAddrX 是場宏塊對(即mbAddrXFrameFlag = 0),像素點 e 在場圖像時(即進行隔行抽取後)屬於宏塊 mbAddrA+1
結論:當前宏塊的左上相鄰宏塊爲 mbAddrA+1,因此表 6-4 中:mbAddrN = mbAddrA+1
當 currMbFrameFlag = 0,mbIsTopMbFlag = 1
1、確定當前宏塊左上角像素在幀圖像中對應的像素點:
currMbFrameFlag = 0,mbIsTopMbFlag = 1:當前宏塊爲頂場宏塊,其左上角像素的對應像素點(co-located pixel)爲 c
2、根據當前宏塊對的屬性來確定相鄰像素點:
因爲當前宏塊爲頂場宏塊,所以 c 的左上角相鄰像素點爲 b
3、確定相鄰像素點所屬宏塊對:
因爲宏塊對是用頂宏塊的地址表示,所以像素點 b 所屬宏塊對爲 mbAddrD,因此表 6-4 中 mbAddrX = mbAddrD
4、根據相鄰宏塊對的屬性來確定相鄰像素點所屬宏塊:
(1)、如果 mbAddrX 是幀宏塊對(即mbAddrXFrameFlag = 1),像素點 b 屬於宏塊 mbAddrD+1
結論:當前宏塊的左上相鄰宏塊爲 mbAddrD+1,因此表 6-4 中:mbAddrN = mbAddrD+1
(2)、如果 mbAddrX 是場宏塊對(即mbAddrXFrameFlag = 0),像素點 b 在場圖像時(即進行隔行抽取後)屬於宏塊 mbAddrD
結論:當前宏塊的左上相鄰宏塊爲 mbAddrD,因此表 6-4 中:mbAddrN = mbAddrD
當 currMbFrameFlag = 0,mbIsTopMbFlag = 0
1、確定當前宏塊左上角像素在幀圖像中對應的像素點:
currMbFrameFlag = 0,mbIsTopMbFlag = 0:當前宏塊爲低場宏塊,其左上角像素的對應像素點(co-located pixel)爲 d
2、根據當前宏塊對的屬性來確定相鄰像素點:
因爲當前宏塊爲低場宏塊,所以 d 的左上角相鄰像素點爲 a
3、確定相鄰像素點所屬宏塊對:
因爲宏塊對是用頂宏塊的地址表示,所以像素點 a 所屬宏塊對爲 mbAddrD,因此表 6-4 中 mbAddrX = mbAddrD
4、根據相鄰宏塊對的屬性來確定相鄰像素點所屬宏塊:
無論 mbAddrX 是幀宏塊對還是場宏塊對(即無論mbAddrXFrameFlag 值爲多少),像素點 a 都屬於宏塊 mbAddrD+1
(1)、如果 mbAddrX 是幀宏塊對(即mbAddrXFrameFlag = 1),像素點 a 屬於宏塊 mbAddrD+1
結論:當前宏塊的左上相鄰宏塊爲 mbAddrD+1,因此表 6-4 中:mbAddrN = mbAddrD+1
(2)、如果 mbAddrX 是場宏塊對(即mbAddrXFrameFlag = 0),像素點 a 在場圖像時(即進行隔行抽取後)屬於宏塊 mbAddrD+1
結論:當前宏塊的左上相鄰宏塊爲 mbAddrD+1,因此表 6-4 中:mbAddrN = mbAddrD+1
圖中:a、e 爲最後一行最後一列的像素,b 爲倒數第二行最後一列的像素,c、f 爲第一行第一列像素,d 爲第二行第一列像素。a、b、c、d、e、f 不是分幀場之後的像素,這樣的像素就叫做 co-locate 像素。
表中最後一列的 yM 值是按(xN,yN)所在宏塊對的幀場屬性對其所在宏塊的像素點分幀場之後 a、b、c、d、e、f 各點的縱座標。
【說明】:
1、這裏使用了對應像素點(co-located pixel)的概念,也就是當前像素點在未進行隔行抽取時所對應的位置。我們在幀間宏塊的時間 direct 預測模式時候,也會遇到 co-located 這個概念。和這裏的含義一樣;
2、請大家注意紅色文字;
3、宏塊與宏塊對的概念請參照中華視頻網論壇的帖子“ 宏塊與宏塊對(附圖)”;
" http://bbs.chinavideo.org/viewthread.php?tid=1134 "
4、請參考標準 6.4.9.2 小節學習