JM代码阅读笔记

上传人:飞*** 文档编号:33946678 上传时间:2018-02-19 格式:DOC 页数:8 大小:122.50KB
返回 下载 相关 举报
JM代码阅读笔记_第1页
第1页 / 共8页
JM代码阅读笔记_第2页
第2页 / 共8页
JM代码阅读笔记_第3页
第3页 / 共8页
JM代码阅读笔记_第4页
第4页 / 共8页
JM代码阅读笔记_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《JM代码阅读笔记》由会员分享,可在线阅读,更多相关《JM代码阅读笔记(8页珍藏版)》请在金锄头文库上搜索。

1、d3d44c39b57d32cdcbeb4483fdb3c3e7.pdf Page 1 of 8 2/14/2018作者:hawk笔记说明 为便于阅读,特约定如下:紫色: 未解决问题;浅蓝色:强调/突出重点内容;关键知识点和难点:难点/复杂问题;黄色: 推测/需要进一步确认和验证的结论;E_mail: auberon_2007-12-09 INTRA 代码研读I 在 intra4x4 预测过程中,数据结构 img-mprr 保存不同预测模式(共 9 种)下的预测值,即 img-mprr91616。同时,从全局变量可以获得原始视频像素值,二者之差存入数据结构 img-m7 中。可以对这些数据进行

2、处理,例如计算 SAD 值、SATD 值或者 SSE 值,用于进一步确定 mode 时的参考。其中,计算 SATD 由文件 me_distortion.c 中函数HadamardSAD4x4()实现。II img-pix_x 指向当前 MB 的水平坐标,img-pix_y 指向当前 MB 的垂直坐标。如果要对block8x8 和 block4x4 进行处理,可以引入 b8 和 b4。以像素为坐标的换算关系为具体见文件 rdopt.c 中函数 Mode_Decision_for_4x4IntraBlocks() 。III 对 intra4x4 块的相邻 block4x4 块的可用性是如何判断的?

3、相关数据结构的定义是如何实现的?解答:关于 intra4x4 块相邻块的可用性信息是通过函数 intra、intrapred_luma()等实现的。IV 补充知识:main()中的图像编码模块 for (img-number=0; img-number no_frames; img-number+)这个循环体内部的最后一个函数是 process_2nd_IGOP();而 process_2nd_IGOP()函数的代码int block_x = 8*(b8 int block_y = 8*(b8 1)+4*(b4 1);int pic_pix_x = img-pix_x+block_x;int

4、pic_pix_y = img-pix_y+block_y;Boolean FirstIGOPFinished = FALSE;if ( img-number = input-no_frames-1 )FirstIGOPFinished = TRUE;if (input-NumFrameIn2ndIGOP=0) return;if (!FirstIGOPFinished | In2ndIGOP) return;In2ndIGOP = TRUE;/ img-number = -1;start_frame_no_in_this_IGOP = input-no_frames;start_tr_in_

5、this_IGOP = (input-no_frames-1)*(input-jumpd+1) +1;input-no_frames = input-no_frames + input-NumFrameIn2ndIGOP;d3d44c39b57d32cdcbeb4483fdb3c3e7.pdf Page 2 of 8 2/14/2018作者:hawk可以推测,新的 IGOP 的首 frame 应该为 IDR。那么,如何判断其为 IDR 呢?首先,在文件 image.c 中函数体 code_a_picture 内部,img-currentPicture-idr_flag =(!IMG_NUMBE

6、R) & (!(img-structure=BOTTOM_FIELD) | (input-idr_enable & intra_refresh & (img-type = I_SLICE | img-type=SI_SLICE)V 补充问题:1 关于薛全的算法的问题;2 GOP 中图像的存储问题;3 在 intra 编码 MB 后是否保存其 intra 模式信息;4 img-mprr 和 img-mpr 的区别是什么?2007-12-18 MB INTER 预测编码代码研读I 函数 init_enc_mb_params() ,所在文件为 mode_decision.c。该函数对 MB 编码参数

7、进行初始化,主要是对一个结构体变量 enc_mb 进行赋值处理;另外,对于数组 listX 的处理有几处不明白。当 MB 为自适应 field/frame 编码时,针对 field MB 和 frame MB,比如如下代码,在针对 frame MB 时,enc_mb-list_offsetLIST_0,所代表含义是什么?解答:推测为预测参考图象 frame index;但对于 enc_mb-list_offsetLIST_1和 enc_mb-list_offsetLIST_0的关系则仍不清楚。II mb16x16_cost_frame 数组的定义在 global.h 文件。作用是什么?解答:推

8、测为当前编码 frame 的各 MB 的 cost 数组,该变量在函数get_initial_mb16x16_cost()被调用。注:get_initial_mb16x16_cost()函数出现在文件mode_decision.c 中 另外,与之伴随出现的一个术语是 Context Adaptive Lagrange Multiplier (CALM),即自适应拉格朗日多项式。但具体的计算是怎样的?III 函数 PartitionMotionSearch()在文件 mv-search.c 中定义。形参为for (l = enc_mb-list_offsetLIST_0; l list_offs

9、etLIST_1; l+)for(k = 0; k chroma_vector_adjustment= 0;d3d44c39b57d32cdcbeb4483fdb3c3e7.pdf Page 3 of 8 2/14/2018作者:hawkInt blocktype, int block8x8, int *lambda_factor但其含义和字面意义不同。注意,block8x8 并非一定是 block8x8 块;比如,它可以为mode=1,此时对应一个 block16x16;也可以为 mode=2,此时 block8x8 可以为 0 或 1,对应两个 16x8 的 partition;也可以为

10、mode=3,此时对应 block8x8 实际上对应两个 8x16 的partition。实际上,是通过 blocktype 和 block8x8 联合确定了 block8x8 的确切含义。在函数体内部,的确是按 block8x8 处理的。IV 函数函数 PartitionMotionSearch()分析。解答:甲 motion_cost 数组在文件 mv-search.c 中定义:motion_costblocktypelistrefblock8x8。通过在 Init_Motion_Search_Module()函数中语句:get_mem4Dint (也容易看出,取值范围:blocktype

11、 对应 8,block8x8 对应 4,ref 对应 img-max_num_references,list 对应 2。乙 变量 enc_picture 在文件 image.c 中定义。丙 input-part_size 数组的含义以及单位是什么? 推测为对于 partition 和 partition 内部subblock 的分割信息。V 在函数 BlockMotionSearch()被 PartitionMotionSearch()内部调用,它是 inter 预测模式中搜索的实现代码。解答:甲 img-opix_x,img-opix_y 含义是什么?另外,我们注意到在PartitionMo

12、tionSearch()函数中,对于 MB 内 partition 的位置确定是通过 img-block_x, img-block_y 实现的。二者有没有联系?若有的话,二者的关系是怎样的? 推断为指向当前宏块的最左上位置。乙 在函数体内调用函数 SetMotionVectorPredictor() ,主要作用是对 img-pred_mv 进行赋值。2007-12-19 零散知识点代码研读I 附:psnr 的计算通过函数 find_snr()实现,该函数在文件 image.c 中定义。II 附:bit rate 计算。psnr 通过定义结构体 SNRParameters 实现。III 在全搜索

13、模式下经过 RDO 选择的最优模式,得到的关于 MB 的模式信息和对应的 R与 D 数据如何获取并用于当前的自适应优化算法 ?IV 在 lencod.c 文件中 main()主函数里,对 RC 的处理有如下代码,具体含义是什么?d3d44c39b57d32cdcbeb4483fdb3c3e7.pdf Page 4 of 8 2/14/2018作者:hawkif (img-number != 0)n = (input-no_frames - img-number) + (input-no_frames - img-number - 1) * input-successive_Bframe + i

14、nput-successive_Bframe;elsen = input-no_frames + (input-no_frames - 1) * input-successive_Bframe;解答:首先,需要把表达式重新组合,容易看出线索。即对于第一种情况,表明 n 代表(编码图像总数)-(已经编码图像数) ;类似,对于 img-number 为 0 时,表示要编码图像数目,为什么减去后面一项?推测:因为后面的 Bframe 图像缺少后向参考 frame(?) ,故而略去;又或者因为前提条件,最后一个 GOP 中图像缺少。另外,第一个 GOP 有何特殊之处?V 文件 rc_quadratic

15、.c 中 rc_init_GOP()函数。VI 在 macroblock 结构体中定义了 intra_pred_modes,intra_pred_modes8x8 两个成员变量。为什么?用一个不可以处理所有的问题吗?解答:2007-12-20 零散知识点代码研读I GOP 和 frame 的关系示例。摘自 Cliff Wootton. A Practical Guide to Video and Audio Compression. 2005, focal press(Elsevier Inc.) pp.246解答:Figure 1 GOP 与 frame 的关系n =( input-no_f

16、rames+1)*input-successive_Bframe- (img-number+1)*input-successive_Bframe;n = ( input-no_frames+1)*input-successive_Bframe - input-successive_Bframe;d3d44c39b57d32cdcbeb4483fdb3c3e7.pdf Page 5 of 8 2/14/2018作者:hawkFigure2 H.264 中编码的不同层次/摘自 K.R.RAOII 在 high complex 模式下,初始的搜索范围如何设定?在那些函数中完成的?解答:III 在 high compl

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号