随笔分类 -  H.264/JM

摘要:JM8.6中的关于写比特流的问题 通过上面的对比, 我们可以发现store_coding_state函数和reset_coding_state函数基本上完全一致, 对于cs_mb, store_coding_state函数将img->currentslice变量中的一些需要保存的量存储在cs_mb中, 然后等到进行编码完成后, 要恢复现场, 利用reset_coding_state函数将cs_mb中保存的相关量恢复到变量img->currentslice中, 便于下面的利用.从上面的截图我们也可以看出, 对于非CABAC编码的状况, 主要是保存的bitstream 而对于CABAC 阅读全文
posted @ 2012-07-27 17:04 Mr.Rico 阅读(739) 评论(0) 推荐(0) 编辑
摘要:JM8.6中encode_one_macroblock函数的运作流程[宏块代价函数的使用或帧间帧内模式选择流程]在JM中最重要, 最核心的一个函数就是encode_one_macroblock, 这个函数是整个编码器的核心, 其实, 通过读源码,可以发现, encode_one_macroblock中的大部分工作是在进行模式的选择, 下面我们跟着代码走一下, 看看具体的流程: (我们假设帧间帧内同时都允许)1. 帧间三种帧间宏块级模式( 16×16, 16×8,8×16) 循环, 进行择优 同时将min_cost初始化为最大值, 将best_mode初始化为1(1 阅读全文
posted @ 2012-07-27 17:02 Mr.Rico 阅读(1990) 评论(2) 推荐(0) 编辑
摘要:JM8.6中的运动估计BlockMotionSearch函数对不同帧间模式block type (1-16x16 ... 7-4x4)进行运动搜索.从该函数中,我们可以发现,有一个局部变量,通过下面的语句将img->pred_mv与pred_mv联系了起来, 这样其实通过调用函数SetMotionVectorPredictor来计算运动矢量的预测值(MVpred), 代码中向SetMotionVectorPredictor函数传递了pred_mv这个整型指针(指向img->pred_mv具体要保存的地方), 这样在函数SetMotionVectorPredictor中求出运动矢量的 阅读全文
posted @ 2012-07-27 17:02 Mr.Rico 阅读(969) 评论(0) 推荐(0) 编辑
摘要:JM8.6中enc_frame_picture, enc_pictures的理解 在frame_picture函数中有这么一句: 同样在field_picture中有这么一句: 从上面我们似乎可以看出一点东西, enc_picture就是指的图像, 这个图像的含义比较广, 包括了frame_picture, top_picture和bottom_picture. 所以我们看到在代码中有将enc_frame_picture, enc_top_picture和enc_bottom_picture分别赋值给enc_picture. 我们猜想, 因为在frame_picture() 和field_pi 阅读全文
posted @ 2012-07-27 17:00 Mr.Rico 阅读(716) 评论(0) 推荐(0) 编辑
摘要:JM8.6代码文件结构总结一下, JM8.6中比较重要的源代码文件[block.c]用于处理一个块 void intrapred_luma (int img_x, int img_y, int *left_available, int *up_available, int *all_available)void intrapred_luma_16x16 ()int dct_luma_16x16 (int new_intra_mode)int dct_luma (int block_x, int block_y, int *coeff_cost, int old_intra_mode)in... 阅读全文
posted @ 2012-07-27 16:57 Mr.Rico 阅读(2297) 评论(0) 推荐(0) 编辑
摘要:2011年5月2日16:31:18img->mb_ximg->block_ximg->pix_ximg->opix_xin the function init_frame, we got this: it is obvious that here , the function just initialize the variables.在函数set_MB_parameters中完成了对img中几个变量的赋值如: 阅读全文
posted @ 2012-07-27 16:43 Mr.Rico 阅读(680) 评论(0) 推荐(0) 编辑
摘要:2011年4月24日9:30:25JM8.6中重要结构体说明[global.h文件]下面是一些枚举类型的定义数据分区方式:PAR_DP_TYPE[PAR_DP_1(不使用数据分区), PAR_DP_3(使用ABC3数据分区)]输出文件的类型:PAR_OF_TYPE[PAR_OF_ANNEXB, PAR_OF_RTP] 编码的方式: CodingType [FRAME_CODING, FIELD_CODING, ADAPTIVE_CODING]句法元素的类型: SE_type[SE_HEADER, SE_PTYPE, SE_MBTYPE, SE_REFFRAME, SE_INTR... 阅读全文
posted @ 2012-07-27 16:33 Mr.Rico 阅读(1949) 评论(0) 推荐(0) 编辑
摘要:2011年4月23日22:22:12H.264编码后码流的生成 H.264 比较全的编码框架 2011年4月23日22:23:35H.264中的PB帧编码 在针对连续动态图像编码时,将连续若干幅图像分成P,B,I三种类型,P帧由在它前面的P帧或者I帧预测而来,它比较与它前面的P帧或者I帧之间的相同信 息或数据,也即考虑运动的特性进行帧间压缩。P帧法是根据本帧与相邻的前一帧(I帧或P帧)的不同点来压缩本帧数据。采取P帧和I帧联合压缩的方法可达到 更高的压缩且无明显的压缩痕迹。在H.264编码中,I帧是内部编码帧,不需要参考其它帧,P帧需要前向的I帧作为参考,B是双向预测帧,需... 阅读全文
posted @ 2012-07-27 16:30 Mr.Rico 阅读(7266) 评论(2) 推荐(2) 编辑
摘要:2011年4月22日19:49:49题目: JM8.6中帧内帧间模式的选择在JM8.6中帧内与帧间模式的选择是其中非常重要的一部分, 模式选择的过程其实涵盖了H.264编码中的大部分内容. 从代码看来, 这一部分其实和码率控制中的代价函数计算是重叠在一起的, 在进行代价函数的计算过程中也就实现了模式的选择, 代价计算完毕, 最优模式也就选择完毕. 1. 下面, 我们先回顾一下H.264中的帧内预测算法: 2. H.264中的帧间模式选择算法: 在帧间模式选中, 要进行的一个重要的过程就是运动估计(运动搜索)3. 代价函数在上面我们也提到过, 帧内帧间模式的选择其实和代价的计算是重... 阅读全文
posted @ 2012-07-27 16:13 Mr.Rico 阅读(4821) 评论(1) 推荐(0) 编辑
摘要:下面是在阅读JM8.6的过程中,对encode_one_macroblock的注释。/*! ************************************************************************************* * \brief * Mode Decision for a macroblock * //+++该函数的作用是编码一个宏块(包括帧间、帧内、帧内预测的方式)。 * NOTE:从上面程序段中可以看出JM8.5中对种宏块模式是采用全部遍历的方式,所以导致的计算复杂度很高。 **************************... 阅读全文
posted @ 2011-04-04 17:06 Mr.Rico 阅读(3740) 评论(0) 推荐(0) 编辑