资源描述:
《264编一个I帧多麻烦---JM 9.7中I帧编码分析.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、264编一个I帧多麻烦---JM9.7中I帧编码分析JM模型I帧帧内预测流程 I帧只存在帧内编码,没有帧间运动估计,不用参考其他的帧,所以I帧具有同步作用,.付出的代价就是效率稍差,不过也十分必要的。 I帧帧内编码分为亮度编码和色度编码,需要完成预测,计算RD代价,来判别宏块分块模式. I帧亮度度分块模式分为16X16,8X8,4X4三种模式,色度分块模式只有一种8X8模式,每种分块模式,又有不同的预测方式,在JM模型中,需要对这些模式进行RD代价计算,选择其中最小值作为最优模式。下面对涉及分
2、块模式的数据进行说明:constint mb_mode_table[9] ={0,1,2,3,P8x8,I16MB,I4MB,I8MB,IPCM};//DONOTCHANGEORDER!!!0:16X16Direct模式,在B帧中有效1:Inter16X16,在帧间有效2:Inter16X8,在帧间有效3:Inter8X16,在帧间有效P8X8:帧间有效I16MB:Intra16X16帧内有效I4MB:Intra有效I8MB:Intra有效IPCM:Intra有效,不要预测,直接对RAW数据编码
3、.其中P8X8模式和下面的数据又有关系:constint b8_mode_table[6] ={0,4,5,6,7}; //DONOTCHANGEORDER!!!上面的5种模式都归入P8X8模式,叫做亚宏块级,在码流TRACE文件有一个语法元素叫做b8mode,说的就是这个。0:8X8Direct模式,在B帧中有效。4:Inter8X8,在帧间有效5:Inter8X4,在帧间有效6:Inter4X8,在帧间有效7:Inter4X4,在帧间有效 下面举个例子,TRACE文件里面:@4
4、5800mb_type(B_SLICE)(7,4)= 8 0000(22)@458048x8mode/pdir(0)= 4/0 000( 1)@458078x8mode/pdir(1)= 6/1 0000( 7)@458118x8mode/pdir(2)= 4/0
5、 00( 1)@458138x8mode/pdir(3)= 5/1 0000000( 6)意思就是位置(7,4)宏块是P8X8分块,其中第一个8X8块是8X8,list0预测,第二个8X8块,是两个4X8块,list1方向预测,第3个是8X8,list0预测,第四个是两个8X4,list1预测,这个好象有点跑题了,因为b8mode不是I帧分块模式,是P,B帧中分块模式。以上基本包括了264帧内,帧间要用到的所有分块
6、模式. 下面开始分析帧内预测流程: 色度预测(计算所有可能的预测模式的预测值)---->亮度预测(所有的分块模式,要对3种分块)---->计算每种模式的RD值(包括各种预测方式)--->获得最优。下面可是一步一步进行说明:1:色度预测 色度预测基于8X8块预测,8X8预测有4种预测模式,包括水平,垂直,DC预测,平坦预测。对色度帧内预测,必须要提到几个表格:一个表格是: staticintblock_pos[3][4][4]=//[yuv][b8][b4] { {{0,1,2,3},{0
7、,0,0,0},{0,0,0,0},{0,0,0,0}}, {{0,1,2,3},{2,3,2,3},{0,0,0,0},{0,0,0,0}}, {{0,1,2,3},{1,1,3,3},{2,3,2,3},{3,3,3,3}} };其中yuv就是YUV采样比例,yuv=YUVformat-1,因此YUV420,yuv值等于0,b8为宏块色度8X8块序号,YUV420,8X8块只有一个,b8为0,b4有0,1,2,3,因此,很容易看明白上面的表格. 第二个表格是constunsigned
8、charsubblk_offset_x[3][8][4]= //[yuv][b8][b4]{ {{0,4,0,4}, {0,4,0,4}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0},}, {{0,4,0,4}, {0,4,0,4}, {0,4,0,4}, {0,4,0,4}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0}