网站设计步骤和方法,衡水网站建设套餐,沛县网站建设xlec,案例学习网站建设方案摸摸学校JM8.5中的7种宏块模式问题 收藏 Outline: 1、 CFG文件中有关可变尺寸宏块模式的相关选项2、 7种宏块模式对应的数值常量3、 7种宏块模式被分成宏块和亚宏块4、 如何对宏块和亚宏块的运动估计#xff0c;采用一个共同的函数来处理5、 遗留问题1、CFG文件中有关可变尺寸宏块…JM8.5中的7种宏块模式问题 收藏 Outline:
1、 CFG文件中有关可变尺寸宏块模式的相关选项2、 7种宏块模式对应的数值常量3、 7种宏块模式被分成宏块和亚宏块4、 如何对宏块和亚宏块的运动估计采用一个共同的函数来处理5、 遗留问题1、CFG文件中有关可变尺寸宏块模式的相关选项
################################################################################Encoder Control###############################################################################…InterSearch16x16 1 # Inter block search 16x16 (0disable, 1enable)InterSearch16x8 1 # Inter block search 16x8 (0disable, 1enable)InterSearch8x16 1 # Inter block search 8x16 (0disable, 1enable)InterSearch8x8 1 # Inter block search 8x8 (0disable, 1enable)InterSearch8x4 1 # Inter block search 8x4 (0disable, 1enable)InterSearch4x8 1 # Inter block search 4x8 (0disable, 1enable)InterSearch4x4 1 # Inter block search 4x4 (0disable, 1enable)解释:
各种宏块尺寸可以在程序外部进行选择。
2、 7种宏块模式对应的数值常量
各种宏块模式对应的数值常量如下16×161 16×82 8×163 8×84 8×45 4×86 4×47 以上的数值常量的rdopt.c的encode_one_macroblock()中的valid[]数组和mode变量中会用到另外在mv_search.c的PartitionMotionSearch()中的blocktype变量也会用到。 3、 7种宏块模式被分成宏块和亚宏块
16x16, 16x8, 8x168×8被称为宏块级而8×88×44×84×4被称为亚宏块级。所用到的函数是encode_one_macroblock()rdopt.c该函数的作用是编码一个宏块包括帧间、帧内、帧内预测的方式。其中重要的程序段如下//宏块级运动估计// MOTION ESTIMATION FOR 16x16, 16x8, 8x16 BLOCKS for (min_cost120, best_mode1, mode1; mode4; mode){if (valid[mode])//对应于程序外部即CFG文件中的设置{//对于16×16MB只分一个块对于16×8和8×16MB被分成两个块for (cost0, block0; block(mode1?1:2); block){//块匹配!!!lambda_motion用来求运动矢量消耗的码率PartitionMotionSearch (mode, block, lambda_motion);…//亚宏块级运动估计if (valid[P8x8]){…// LOOP OVER POSSIBLE CODING MODES FOR 8x8 SUB-PARTITION for (min_cost8x8(120), min_rdcost1e30, index(bframe?0:1); index5; index){if (valid[modeb8_mode_table[index]])//b8_mode_table[6] {0, 4, 5, 6, 7};{curr_cbp_blk 0;if (mode0) //--- Direct Mode ---{…} // if (mode0)else{//--- motion estimation for all reference frames ---PartitionMotionSearch (mode, block, lambda_motion);…NOTE:从上面程序段中可以看出JM8.5中对7种宏块模式是采用全部遍历的方式所以导致的计算复杂度很高。4、 如何对宏块和亚宏块的运动估计采用一个共同的函数来处理从3中的程序可以看到对于宏块和亚宏块级的运动估计都采用了一个共同的函数PartitionMotionSearch(), mv_search.c其中重要的程序段如下……//各种宏块模式下的子块的起始偏移量相对4*4块来讲这有利于运动矢量的存放//[5]表示宏块的类型[4]表示各种类型下的子块序号最多子块情况为P8X8模式下有4个static int bx0[5][4] {{0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,2,0,0}, {0,2,0,2}};static int by0[5][4] {{0,0,0,0}, {0,0,0,0}, {0,2,0,0}, {0,0,0,0}, {0,0,2,2}};……int parttype (blocktype4?blocktype:4);//亚宏块的parttype都设为4//step_?是用来求4*4块级别的步长//由于parttype和blocktype的区别使得两组步长之间存在微妙的差异为下面的循环做好了铺垫
int step_h0 (input-blc_size[ parttype][0]2);int step_v0 (input-blc_size[ parttype][1]2);int step_h (input-blc_size[blocktype][0]2);int step_v (input-blc_size[blocktype][1]2);…// LOOP OVER SUB MACRO BLOCK partitions//这里对于亚宏块的循环是自适应的//假如小于8*8块尺寸时自动采取循环for (vby0[parttype][block8x8]; vby0[parttype][block8x8]step_v0; vstep_v){pic_block_y img-block_y v;for (hbx0[parttype][block8x8]; hbx0[parttype][block8x8]step_h0; hstep_h){……