随笔分类 - H.264/JM

摘要:这儿是对运动估计算法的分析与记录第一部分的" 运动估计综述"是从gu网上下载到的, 讲的挺详细,第二是UMHexagonS算法的分析运动估计综述1.定义这里指基于块的运动估计,基本思想是将图像序列的每一帧分成许多互不重叠的块,并认为块内所有像素的位移量都相同,然后对每个宏块到参考帧某一给定特定搜索范围内根据一定的块匹配准则找出与当前块最相似的块,即匹配块,匹配块与当前块的相对位移即为运动矢量。 2.运动估计算法2.1全搜索每一点都要比较,需计算(2*d+1)*(2*d+1)次(d是搜索范围)。对分辨率360x288,帧率30fps的视频,设d=21,每秒要计算1.09E10 阅读全文
posted @ 2012-08-09 12:47 Mr.Rico 阅读 (3923) | 评论 (0) 编辑
摘要:场编码MBAFF相关宏块与宏块对假设 A、B 是上下相邻的两个 MB:在非宏块对的情况下:A、B宏块序号不连续,相差图像一行宏块个数。即按光栅扫描顺序编号。在帧宏块对的情况下:A、B宏块序号连续,即按锯齿扫描顺序编号。A、B 组成不变。A 称为顶帧宏块,B 称为低帧宏块。在场宏块对的情况下:A、B宏块序号连续,即按锯齿扫描顺序编号。但是这个时候的 A 是由原来 A、B 两个宏块中的奇数行像素组成,称为顶场宏块;而 B 是由原来 A、B 两个宏块中的偶数行像素组成,称为低场宏块。 一幅图像编码可以分为三种:非 MBAFF 帧、场、MBAFF 帧。一幅图像中宏块的存在方式有两种:1、图像中的所有. 阅读全文
posted @ 2012-08-09 12:47 Mr.Rico 阅读 (526) | 评论 (0) 编辑
摘要:JM代码阅读之一SODB RBSP EBSP NALU JM版本16.0,配置文件encoder_baseline.cfg,H.264标准文档(03/2010)版。 通过对码流的第一个NALU(SPS)的形成来分析。 首先给出编码后的最终码流(SPS + PPS):00 00 00 01 67 42 00 28 F3 05 89 C8 00 00 00 01 68 C9 4A 38 80 将SPS(红色部分)转换成二进制:00000000 00000000 00000000 00000001 01100111 01000010 00000000 00101000 111100... 阅读全文
posted @ 2012-08-09 12:47 Mr.Rico 阅读 (6034) | 评论 (0) 编辑
摘要:H.264 视频编码器的研究与分析 郝瑞林 北京邮电大学网络技术研究院 北京(100876) E-mail:ruilynn@gmail.com 摘 要:随着市场对多媒体信息传输需求的增加,多媒体信息传输如何适应不同信道传输特性的问题日益显现出来。H.264作为新一代视频编解码标准,它压缩性能优异,图像质量高,可满足各种不同速率、 不同场合的视频应用。 正因为功能的多样性, 使其编码方法异常复杂,因此本文分析了 H.264视频编码器的原理,对当今流行的 H.264编码器进行了性能比较,以X264开源编码器为例进行了源码级的分析,详细介绍了 X264中的函数流程与算法,并根据具体应用进行了不同参. 阅读全文
posted @ 2012-07-30 23:53 Mr.Rico 阅读 (2514) | 评论 (0) 编辑
摘要:这是来自H.264乐园的一个帖子。typedefstructx264_param_t{/*CPU标志位*/unsignedintcpu;inti_threads;/*并行编码多帧*/intb_deterministic;/*是否允许非确定性时线程优化*/inti_sync_lookahead;/*线程超前缓冲*//*视频属性*/inti_width;/*宽度*/inti_height;/*高度*/inti_csp;/*编码比特流的CSP,仅支持i420,色彩空间设置*/inti_level_idc;/*level值的设置*/inti_frame_total;/*编码帧的总数,默认0*//*Vu 阅读全文
posted @ 2012-07-30 21:37 Mr.Rico 阅读 (812) | 评论 (0) 编辑
摘要:利用信源的随机过程统计特性进行码率压缩的编码方式称为熵编码。它是把所有的语法(句法)元素(包括控制流数据,变换量化残差系数和运动矢量数据)以一定的编码形式映射成二进制比特流。熵编码是无损压缩编码方法,它生成的码流可以经解码无失真地恢复出数据。在信息论中表示一个数据符号的理论上最佳的比特数通常是一个分数而不是整数,这个比特数用log2(1/P)表示,其中P是每个数据符号的出现概率。这里Log2(1/P)指的就是熵的概念。熵的大小与信源的概率模型有着密切的关系,各个符号出现的概率不同,信源的熵也不同。当信源中各事件是等概率分布时,熵具有极大值。信源的熵与其可能达到的最大值之间的差值反映了该信源所含 阅读全文
posted @ 2012-07-30 12:55 Mr.Rico 阅读 (4473) | 评论 (0) 编辑
摘要:网上找到的一个对UMHexagonS算法的优化。 前面是作者的答辩PPT,后面是作者发表的论文PDF。题目:基于H.264/AVC视频编码运动估计算法的优化1. 编码发展简史1984年CCITT发布了H.120(数字基群电视会议编码标准)建议.1988年CCITT通过了"px64Kbps(p = 1,2,3,,,,30)"视频编码标准H.261建议,被成为视频压缩编码的一个里程碑.1986年,ISO和CCITT成立了联合图象专家组(JPEG, Joint Photographic Experts Group),1992年通过了JPEG标准.1998年ISO/IEC成立了活动 阅读全文
posted @ 2012-07-30 12:30 Mr.Rico 阅读 (1133) | 评论 (1) 编辑
摘要:一篇介绍FMO的比较不错的论文。H.264中典型的抗误码工具 (1). 参数集的使用 以往的编码标准都是具有分层特性的, 有类似Slice/Picture/Gop/Macroblock的结构. 在H.264中经常变动的内容在slice中传输, 而对于那些不变的使用"参数集"的方式进行传输 (2). 数据分割 H.264允许根据语法分类 将每个Slice的数据划分为3个独立的部分(A,B,C), PartitionA主要包括Slice头信息和一些语法结构信息,Partition B 主要包括I宏块和SI宏块信息, Partition C主要包括P宏块和B宏块的信息. (3)多 阅读全文
posted @ 2012-07-30 11:02 Mr.Rico 阅读 (290) | 评论 (0) 编辑
摘要:一篇比较好的介绍H.264的率失真策略的文章 阅读全文
posted @ 2012-07-30 10:56 Mr.Rico 阅读 (697) | 评论 (0) 编辑
摘要:这是在网上找到的一个比较好的pdf文档。 阅读全文
posted @ 2012-07-30 10:42 Mr.Rico 阅读 (257) | 评论 (0) 编辑
摘要:这是从网上找到一个毕业论文的一部分。这一部分主要介绍H.264中的相关技术。总结的比较不错。本来是pdf,现在转化为图片了。 阅读全文
posted @ 2012-07-30 10:30 Mr.Rico 阅读 (761) | 评论 (0) 编辑
摘要:2. Principle of H.264/AVC Normal Quantization Scheme 2.1. Scalar dead-zone quantization In this section the principle of H.264/AVC normal quantization scheme is described in a generalized form.A scalar quantizer for input signal W can be decomposed into a function Z=C[W] called a classification ru.. 阅读全文
posted @ 2012-07-28 22:45 Mr.Rico 阅读 (314) | 评论 (0) 编辑
摘要:H.264 参考图像管理综述总体而言,mbuffer.c文件主要的三个函数是init_lists,reorder_lists和store_picture_in_dpb。其中init_lists和reorder_lists在read_new_slice函数中,主要是将已经存储在dpb.fs_ref和dpb.fs_ltref,即短期和长期参考队列按照一定的排列规律一起存到listX[0]和listX[1]中而store_picture_in_dpb在函数exit_picture中调用,即在解码完一帧图像,经过去方块滤波和误码掩盖之后,将图像存储到DPB中。List_lists()函数这个函数的功能 阅读全文
posted @ 2012-07-28 21:42 Mr.Rico 阅读 (576) | 评论 (0) 编辑
摘要:这个文件里面的函数都相对来说比较简单,主要就是对objectBuffer_t和ercVariables_t两个结构体一些控制。void ercInit(int pic_sizex, int pic_sizey, int flag) 函数被调用时ercInit(img->width, img->height, 1); 此flag=1设置是否将解码器的误码掩盖功能开启,通过ercSetErrorConcealment(erc_errorVar, flag);设置。在函数中一开始就是对erc_object_list分配了内存:erc_object_list = (objectBuffer 阅读全文
posted @ 2012-07-28 20:34 Mr.Rico 阅读 (169) | 评论 (0) 编辑
摘要:我们知道在参考图像队列中listX[ i ][ j ]这边的i的取值范围是0~5,而且0~5所代表的含义论坛上已经有人说过。今天我要说的是这个j的取值范围是0~MAX_LIST_SIZE-1 即0~32为什么会有33个元素呢?我们知道264规定最多可用16个参考帧,如果是场模式,那么也就32个,但是这边还是多了一个,为什么呢?现在我告诉你,这是程序上需要多留了一个的,跟264本身应该没有关系的。这个要在参考队列重排序里面看mbuffer.c。static void reorder_short_term(StorablePicture **RefPicListX, int num_ref_idx 阅读全文
posted @ 2012-07-28 20:30 Mr.Rico 阅读 (212) | 评论 (0) 编辑
摘要:理论方面的知识在这里不详细讲述,毕书的222页和264标准上的8.4.2.2.1章节都有非常详细的说明。这里,我主要讲的是程序是如何使具体代码对应理论公式。void get_block(int ref_frame, StorablePicture **list, int x_pos, int y_pos, struct img_par *img, int block[BLOCK_SIZE][BLOCK_SIZE]) 函数一开始定义了6抽头系数,这个很容易明白。接着给6个变量赋值,这边我们来看下这6个变量的物理含义。static const int COEF[6] = { 1, -5, 2... 阅读全文
posted @ 2012-07-28 20:25 Mr.Rico 阅读 (345) | 评论 (0) 编辑
摘要:今天看到init_dpb()时有这么一行代码dpb.size= getDpbSize();dpb.size表示什么含义我想大家都明白,这里我们关键看getDpbSize();getDpbSize()函数一上来给pic_size赋值,这个仔细看应该也不难,接着就是我要讲的重点拉。代码如下:switch(active_sps->level_idc)//第一帧IDR,这边是30{case10:size=152064;break;case11:size=345600;break;case12:size=912384;break;case13:size=912384;break;case20:si 阅读全文
posted @ 2012-07-28 20:23 Mr.Rico 阅读 (305) | 评论 (0) 编辑
摘要:作者:张戟(E-mail:bearriezj@gmail.com) 这部分在标准的8.7 Deblocking filter process有详细的描述,技术白皮书中也有专门讲去方块滤波的部分,因此在资料方面应该是不成问题。去方块滤波的代码主要集中在JM8.6 Decoder的loopFilter.c文件中,入口函数为DeblockPicture(),此函数在image.c的exit_picture()中被调用,也就是说这个去方块滤波模块是在解码完一幅图像后被调用的。这里,我不得不说,H.264中的去方块滤波做的太好了,朋友们可以自己尝试一下,在exit_picture()中注释掉Deblo. 阅读全文
posted @ 2012-07-28 20:19 Mr.Rico 阅读 (691) | 评论 (0) 编辑
摘要:我想很多朋友在解码器输出时都会看到PSNR等于0的情况,这代表了什么意思呢?这表示你解码得到的图像和参考图像是一致的。下面基于baseline的情况详细说明一下。首先看ldecod.c中的main()函数init_conf(input, argv[1]); … img->idr_psnr_number=input->ref_offset; 显然这边的init_conf()是从decoder.cfg配置文件中读取数据,并且input->ref_offset对应的是配置文件中的SNR computation offset的值,在默认的情况下,JM8.6设置为0。接着看image. 阅读全文
posted @ 2012-07-28 20:16 Mr.Rico 阅读 (265) | 评论 (0) 编辑
摘要:前序 以下的文字只是本人在学习H.264代码过程中的一些心得体会,限于本人水平有限,所以有错误的地方请阅读者谅解,并提出,大家共同讨论学习。在这里,特别感谢H264乐园版主天之骄子及群里兄弟姐妹们的帮助!说明: 红色表示函数 绿色表示函数中的参数 褐色表示函数内部的代码 正文 本文主要讲述了一些H.264中后处理错误隐藏的知识,而且也集中在解码端实现,根据空域和时域不同的掩盖方法,文章分为两大部分,第一部分主要讲帧内掩盖,相对应的c文件是erc_do_i.c;第二部分主要讲帧间掩盖,相对应的c文件是erc_do_p.c,这一部分相对于帧内掩盖要复杂得多,也是本文的重点。... 阅读全文
posted @ 2012-07-28 15:43 Mr.Rico 阅读 (268) | 评论 (0) 编辑
摘要:摘 要: H.264 编解码软件JM 通常被作为算法研究或者实际应用的平台。理解JM 的程序结构是在其基础上进行进一步研究工作的前提。JM 中的编码函数encode_one_macroblock在程序实现编码算法的过程中起到核心的作用。这篇文章通过对程序中开销计算,关键全局变量及编码一个宏块的算法的分析,查明了JM 核心编码函数encode_one_macroblock()的结构,给出了该函数的流程。关键词:高级视频编码;运动估计;率失真优化;宏块;模式选择 1. 引言H.264 视频编解码标准是由 ITU-T 的VCEG(视频编码专家组)和ISO/IEC 的MPEG(活动图像编码专家组).. 阅读全文
posted @ 2012-07-28 08:53 Mr.Rico 阅读 (2662) | 评论 (0) 编辑