摘要: 第1章介绍1. 为什么要进行视频压缩?未经压缩的数字视频的数据量巨大存储困难一张DVD只能存储几秒钟的未压缩数字视频。传输困难1兆的带宽传输一秒的数字电视视频需要大约4分钟。 2. 为什么可以压缩去除冗余信息空间冗余:图像相邻像素之间有较强的相关性时间冗余:视频序列的相邻图像之间内容相似编码冗余:不同像素值出现的概率不同视觉冗余:人的视觉系统对某些细节不敏感知识冗余:规律性的结构可由先验知识和背景知识得到 3. 数据压缩分类无损压缩(Lossless)压缩前解压缩后图像完全一致X=X'压缩比低(2:1~3:1)例如:Winzip,JPEG-LS有损压缩(Lossy)压缩前解压缩后图像不 阅读全文
posted @ 2012-07-28 23:27 Mr.Rico 阅读(73298) 评论(20) 推荐(6)
摘要: 测试解码器测试了很久,由于需要将H264和MPEG4的码流进行分析和判断,并逐帧输入解码器进行测试,如何正确的分析码流,并将Video送给我们的解码器做Decode的呢?耐着性子找了很多资料,主要也因为我本身对MPEG4和H264的码流的格式并不懂,自己在视频编码方面的积累也实在是太少了,所以也确实挺头疼的。后来就直接在网上找是否有对码流的各个部分意义的解释,开始搜索码流中的的StartCode。高兴的是,最终找到了一些有用的讯息,得以继续进行测试代码的撰写。 今天就把MPEG4码流的分析和它的I,P,B Frame的判定方法在这里简要记录一下吧,供日后的翻看和大家的参考。!MPEG... 阅读全文
posted @ 2012-07-28 22:51 Mr.Rico 阅读(1261) 评论(0) 推荐(0)
摘要: 上次测试MPEG4和H264的时候,由于要进行分帧输入解码器测试,因此进行了MPEG4和H264码流的简单分析,MPEG4码流的分析见上次记录的那篇文章。 目前又要开始测试MPEG1和MPEG2码流的解码了,同样,对这两种码流也进行一下简单的分析,通过搜集资料和查看两种标准的协议13818-2和11172-2,了解这两种码流格式的一些基本结构,今天把它们也在此做一个简单的整理和记录,也便于以后的翻看和大家的参考: 由于MPEG1与MPEG2的结构类似,这里就主要以MPEG2来进行说明: 首先来给一张MPEG2 video Sequence的一个结构图: 与采用Elecard... 阅读全文
posted @ 2012-07-28 22:49 Mr.Rico 阅读(1948) 评论(0) 推荐(0)
摘要: 目前又开始测MPEG1和MPEG2的解码,在准备编码好的测试序列过程中,需要通过编码器来进行原始视频序列的编码操作,以生成我们需要的测试数据。由于IPP example提供的Encoder不支持MPEG1,经过查询,决定MPEG1的编码使用FFMPEG。FFMEPG是个啥子东西呢,这里简单说一下:FFmpeg是用于录制、转换和流化音频和视频的完整解决方案,一套领先的音/视频编解码类库。 FFmpeg的官方网址是 http://ffmpeg.mplayerhq.hu/ 。 中文Wiki是 http://www.ffmpeg.com.cn/ ,资料很多。 ... 阅读全文
posted @ 2012-07-28 22:47 Mr.Rico 阅读(581) 评论(0) 推荐(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 阅读(616) 评论(0) 推荐(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 阅读(898) 评论(0) 推荐(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 阅读(368) 评论(0) 推荐(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 阅读(307) 评论(0) 推荐(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 阅读(661) 评论(0) 推荐(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 阅读(710) 评论(0) 推荐(1)
摘要: 作者:张戟(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 阅读(1135) 评论(0) 推荐(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 阅读(517) 评论(0) 推荐(0)
摘要: 前序 以下的文字只是本人在学习H.264代码过程中的一些心得体会,限于本人水平有限,所以有错误的地方请阅读者谅解,并提出,大家共同讨论学习。在这里,特别感谢H264乐园版主天之骄子及群里兄弟姐妹们的帮助!说明: 红色表示函数 绿色表示函数中的参数 褐色表示函数内部的代码 正文 本文主要讲述了一些H.264中后处理错误隐藏的知识,而且也集中在解码端实现,根据空域和时域不同的掩盖方法,文章分为两大部分,第一部分主要讲帧内掩盖,相对应的c文件是erc_do_i.c;第二部分主要讲帧间掩盖,相对应的c文件是erc_do_p.c,这一部分相对于帧内掩盖要复杂得多,也是本文的重点。... 阅读全文
posted @ 2012-07-28 15:43 Mr.Rico 阅读(738) 评论(0) 推荐(0)
摘要: Raw Byte Sequence Packet (RBSP)String Of Data Bits (SODB)POC:Picture Order CountSequence parameter set (SPS)Picture parameter set (PPS)DPB 解码图像缓冲区decoder picture bufferIDR图像 立即刷新图像 一个序列的第一个图像,IDR图像都是I帧图像PAFF means "Picture Adaptive Field Frame", MBAFF means "MacroBlock Adaptive Field 阅读全文
posted @ 2012-07-28 14:59 Mr.Rico 阅读(3824) 评论(0) 推荐(0)
摘要: 1. jm8.6中所涉及的几项关于比特分布的地方: 序列参数集SPS: parset.c文件中的GernateSPS... 具体宏块编码中的比特分布: #if TRACE snprintf(currSE->tracestring, TRACESTRING_SIZE, "Intra mode = %3d %d",currSE->value1,currSE->context); #endif 还有很相关的一个是和比特计数相关的: bitCount[BITS_COEFF_Y_MB]+=currSE->len; rate += currSE->l... 阅读全文
posted @ 2012-07-28 14:54 Mr.Rico 阅读(2376) 评论(0) 推荐(0)
摘要: 帧、场编码的个人理解一、概述原始视频帧(最原始的视频数据)根据编码的需要,以不同的方式进行扫描产生两种视频帧:连续或隔行视频帧,隔行视频帧包括顶场和底场,连续(遂行)扫描的视频帧与隔行扫描视频帧有着不同的特性和编码特征,产生了所谓的帧编码和场编码。一般情况下,遂行帧进行帧编码,隔行帧可在帧编码和场编码间选取。 在帧编码中,参考为帧图像,采用帧运动补偿,两个场是联合编码;在场编码中,参考为场图像,两个场是分别编码,采用场运动补偿。二、视频序列帧、场编码方式1.固定帧编码(全帧)----视频序列的全部帧始终采用帧编码方式。 2.固定场编码(全场) 视频序列中帧被分成两个场独立编码。编码规则:(1. 阅读全文
posted @ 2012-07-28 14:18 Mr.Rico 阅读(3321) 评论(0) 推荐(0)
摘要: 1、H.264新特性学习阶段 首先,我们学习的weigand的那篇关于H.264 overview的经典文献,这篇文献对H.264的新特性大部分都有讲到。之后,我们共开展三次会议来分组深入地学习H.264的各个新特性。 帧间编码小组主讲的内容有:高精度运动估计,分析了H.264的半象素点插值预测和1/4象素点插值预测,同时还分析了H.263的半象素点的插值预测以作比较。多参考帧和7种宏块模式,分析它们的基本原理,并列举了一些快速算法。B帧,讲解了B帧的新特性,同时详细讲述了B帧独有的两种宏块模式direct mode和multihypothesis mode。 帧内编码小组主讲的内容有:... 阅读全文
posted @ 2012-07-28 14:15 Mr.Rico 阅读(4555) 评论(0) 推荐(0)
摘要: <<H.264 中 4x4 块的快速帧内预测算法>>作者:王启文,黄东军目前,对帧内预测的研究已取得很多成果,如快速三步法 [1]。该算法利用相邻预测方向的相关性,选择性地计算帧内方向预测模式,以达到减少率失真优化计算量的目的,但它对编码时间的节约效果不理想。文献[2]利用子块边缘的变化方向从预选模式中选取最可能的预测方向,该算法采用边缘梯度直方图法,在几种最可能的预测方向中选取最佳预测方向,在视频场景较复杂的情况下,其视频压缩效果不佳。文献[3]对文献[2]算法进行改进,但对预测正确率的提高效果不明显。文献[4]提出自适应阈值快速算法,利用邻块相关性为当前块的率失真设 阅读全文
posted @ 2012-07-28 13:52 Mr.Rico 阅读(1918) 评论(0) 推荐(0)
摘要: 1视频编解码技术发展现状 视频编码的主要目的就是在保证一定重构质量的前提下,以尽量少的比特数来表征视频信息。视频编码的原理是:由于表示图像和视频信息所需的大量的数据往往是高度相关的,这些相关性会引起信息的冗余,因此可以通过去除这些冗余信息来实现对视频数据的压缩。传统的基于统计特性的运动补偿+变换编码的混合编码框架在数据压缩方面取得了很大的成果,国内外的通用视频压缩标准均基于此框架,比如H.26L系列、MPEG系列以及我国的AVS-P2标准。但是随着计算机网络的不断发展和应用需求的多样化,对于视频编码技术的研究不再仅仅局限于压缩特性,而渐渐开始向网络适应性、用户交互性等方面转移。因此,这几年.. 阅读全文
posted @ 2012-07-28 11:22 Mr.Rico 阅读(4616) 评论(0) 推荐(0)
摘要: 作者:Jeremiah Golston,TI 首席技术官 j-golston@ti.comAjit Rao 博士,TI 技术应用工程师 ajitr@ti.com 2006 年 4 月加州旧金山嵌入式系统会资料 1. 前言 数字视频产品需求近些年出现猛增。主流应用包括视频通信、安全监控与工业自动化,而最热门的要算娱乐 应用,如 DVD、HDTV、卫星电视、高清 (HD) 机顶盒、因特网视频流、数码相机与 HD 摄像机、视频光盘库 (video jukebox)、高端显示器(LCD、等离子显示器、DLP)以及个人摄像机等。众多精彩的新应用目前也处于设计或前期部署中,例如针对家庭与手持设备 及地面/ 阅读全文
posted @ 2012-07-28 11:21 Mr.Rico 阅读(2729) 评论(0) 推荐(0)