07 2012 档案

摘要:码率控制部分关键函数5.1 x264_ratecontrol_start( x264_t *h,int i_slice_type)功能根据不同的slice类型调整qp的值输入项目x264_t *h, int i_slice_type输出项目x264_t *h程序逻辑如附图14所示: 附图14: x264_ratecontrol_start流程图5.2 x264_ratecontrol_mb( x264_t *h, int bits )功能生成下一个宏块的qp的值输入项目x264_t *h, int bits输出项目x264_t *h程序逻辑如附图15所示: 附图15: x264_r... 阅读全文
posted @ 2012-07-31 12:54 Mr.Rico 阅读 (386) | 评论 (0) 编辑
摘要:NAL部分关键函数4.1 int x264_nal_encode( void *, int *, int b_annexeb, x264_nal_t *nal )功能对一个片进行NAL编码。输入项目一个片的RBSP的数据流。输出项目一个NAL单元。算法从SODB到RBSP的生成过程:如果SODB内容是空,生成的RBSP也是空的。否则,RBSP由如下的方式产生:RBSP的第一个字节直接取自SODB的第1~8个比特(RBSP字节内的比特按照从左到右对应为从高到低的顺序排列,most significant),依此类推,RBSP的其余的每个字节都直接取自SODB的相应比特。RBSP的最后一个字节包含 阅读全文
posted @ 2012-07-31 01:04 Mr.Rico 阅读 (428) | 评论 (0) 编辑
摘要:去块滤波(Deblocking)部分关键函数3.1 deblocking_filter_edgev( x264_t *h, uint8_t *pix, int i_pix_stride, int bS[4], int i_QP )功能对亮度宏块的垂直边界进行边界滤波性能。输入项目x264_t *h: 指向x264_t类型的结构体变量的指针变量;uint8_t *pix: 指向uint8_t变量的指针,代表存储像素的内存地址;int i_pix_stride:像素步长,对cif格式的亮度块来说是416,为352+64,64是左右两边分别进行了32个像素的扩边;int bS[4]:边界强度,有0. 阅读全文
posted @ 2012-07-31 01:03 Mr.Rico 阅读 (190) | 评论 (0) 编辑
摘要:CAVLC编码部分的关键函数2.1 x264_macroblock_write_cavlc(x264_t *h, bs_t *s)功能判断宏块类型,对宏块进行CAVLC编码。输入项目x264_t *h:指向x264_t类型的结构体的指针变量。输出项目bs_t *s: 指向bs_s类型结构体的指针变量。流程图如附图6所示: 附图6: x264_macroblock_write_cavlc流程图2.2 block_residual_write_cavlc(x264_t *h,bs_t *s,int i_idx,int *l, int i_count)功能对得到的残差数据进行cavlc编... 阅读全文
posted @ 2012-07-31 01:01 Mr.Rico 阅读 (333) | 评论 (0) 编辑
摘要:帧内帧间编码部分关键函数1.1 x264_encoder_open (x264_param_t *param )功能分配编码器所需结构体。检测参数有效性。初始化sps和pps。分配编码器所需memory空间,包括参考帧和缓冲帧。初始化macroblock cache相应空间。分配编码器所需memory空间,包括参考帧和缓冲帧。根据cpu类型,初始化各指令集加速函数。输入项目x264_param_t *param输出项目x264_t *h存储分配x264_t *h = x264_malloc( sizeof( x264_t ) );h->out.p_bitstream = x264_mal 阅读全文
posted @ 2012-07-31 01:00 Mr.Rico 阅读 (472) | 评论 (0) 编辑
摘要:l 相关说明: 1. 使用版本:x264-cvs-2004-05-11 2. 这次的分析基本上已经将代码中最难理解的部分做了阐释,对代码的主线也做了剖析,如果这个主线理解了,就容易设置几个区间,进行分工阅读,将各个区间击破了. 3. 需要学习的知识: a) 编码器的工作流程. b) H.264的码流结构,像x264_sps_t,x264_pps_t等参数的定义基本上都完全符合标准文档中参数集的定义,抓住主要参数,次要参数也应该有所了解. c) 数学知识,对dct变换等与数学相关的知识的编程实现要有较好理解. d) C语言的知识.涉及到c语言的较多不经常用的特性,如函... 阅读全文
posted @ 2012-07-31 00:37 Mr.Rico 阅读 (578) | 评论 (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) 编辑
摘要:播放器设计与开发 kf701.ye@gmail.com 2008本文根据DawnLightPlayer的开发经验写成。DawnLithtPlayer是今天3月份开始,和maddrone一起在业余时间开发的一个跨平台,多线程的播放器,主要是在Linux下面开发的,文中所用示例代码均截自其中。DawnLightPlayer目前可以运行在Linux和Windows系统上,并使用VC和Python开发了GUI,支持大部分的音视频文件格式和网络流,另外新增对CMMB协议的支持,不支持 RMVB, SWF 等尚未公开协议的视频文件格式。目录:一. 播放器的流程1. 输入2. 解码3. 输出二. 播... 阅读全文
posted @ 2012-07-30 23:35 Mr.Rico 阅读 (684) | 评论 (0) 编辑
摘要:本文贡献给ZSVC开源社区(https://sourceforge.net/projects/zsvc/),他们是来自于中国各高校的年轻学子,是满怀激情与梦想的人,他们将用自己的勤劳与智慧在世界开源软件领域为中国留下脚步,该社区提供大量视频编解码和图像处理的学习实践机会,让广大参与者能够体验理论转变为实际的过程。欢迎任何感兴趣的朋友联系他们。正文 类似题目的文章已经不新鲜了,这里,我仅仅总结自己的一些代码经验,结合两款在视频开发领域比较常用的开源软件探讨C语言的应用问题。1.为什么要用C语言 曾几何时,我也不熟悉C,最早接触C的是在大学四年级,当时已经学过pascal,过二级也是p... 阅读全文
posted @ 2012-07-30 23:27 Mr.Rico 阅读 (626) | 评论 (0) 编辑
摘要:最近我也开始看 X264 的代码了,于是想到把我读代码的过程记录下来,因为总有很多新手问如何读代码,我这个帖子就是专为这些人写的。至于会读代码的人就完全没有必要看了。下面当然是以 X264 为例了。JM 以及其他代码的学习方法和技巧都是完全一样的。我所用的版本是在帖子 在VS2008下编译最新版的x264连接错误 里上传的版本。最新版本的代码基本结构应该变化不大。首先肯定是要把 X264 编译通过了,这个我就不多说了,论坛帖子 VS2008下最新X264(svn 2009.9)编译不过的解决办法(附编译通过+修改内存泄露版本) 里讲得很清楚。编译通过之后第一步就是设置编码参 数,一开始尽量从最 阅读全文
posted @ 2012-07-30 23:15 Mr.Rico 阅读 (791) | 评论 (1) 编辑
摘要:很多朋友肯定和软件志一样,使用windows自带的远程桌面连接功能进行电脑的远程控制,但是在安装Eset Smart Security(以下简称ESS)后,我们会发现ESS的防火墙默认是禁止远程桌面级链接的,这是有我们就需要增加一个防火墙规则来允许Windows远程桌面连接。一、修改ESS的防火墙过滤模式:打开ESS主界面,点击"设置"下的"个人防火墙"进入相关设置界面: 将点击"切换到交互过滤模式"来切换防火墙的过滤模式到交互过滤模式。二、设定ESS防火墙下允许Windows远程桌面连接规则1、继续在"设置"下的 阅读全文
posted @ 2012-07-30 22:26 Mr.Rico 阅读 (3811) | 评论 (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) 编辑
摘要:先声明:本人为x264初学者,以下内容如有错误,欢迎指出,共同进步。刚开始接触x264,我想很多人和我一样,其目的只是想将代码编译通过,看看执行结果,再对代码跟踪调试。但是初学者会发现,把x264的源码变成.exe文件很麻烦,不过更困难的是,如何在IDE中将代码编译通过,论坛里也有一些帖子教大家如何在VS2008中编译,可能是我比较笨,看了几遍我都没有办法将Videolan上的源码编译通过。没有办法,小弟只好另外想办法。在查看了Doom10论坛上关于编译的帖子后,才知道x264是不支持微软的VS的,x264使用的是GCC的编译器,于是我将目光转向了Linux平台。在使用了几个IDE后,通过网上 阅读全文
posted @ 2012-07-30 21:32 Mr.Rico 阅读 (658) | 评论 (0) 编辑
摘要:北京广播学院电视工程系 教授 郭 斌 MPEG是运动图像专家组(Moving Picture Experts Group)的简称,其实质上的名称为国际标准化组织(ISO)和国际电工委员会(IEC)联合技术委员会(JTC)1的第29 分委员会的第11工作组,即ISO/IEC JTC1/SC29/WG11,成立于1988年。其任务是制定世界通用的视音频编码标准。因为,广播电视数字化所产生的海量数据对存储容量、传输带宽、 处理能力及频谱资源利用率提出了不切合实际的要求,使数字化难以实现。为此,该专家组基于帧内图像相邻像素间及相邻行间的空间相关性和相邻帧间运动图像的 时间相关性,采用压缩编码技... 阅读全文
posted @ 2012-07-30 14:15 Mr.Rico 阅读 (3391) | 评论 (0) 编辑
摘要:1.1 MPEG2、H.263、H.264协议效率对比 ITUT中定义的双向视频通信协议族包括:H.320、H.323,这两个协议族中,包含了很多子协议,例如音频编码协议、视频编码协议等,其中视频编码包括:H.261、H.263、H.264几种主要协议,其中H.261、H.264协议已经比较成熟,技术市场上所有的产品都支持,H.264协议是2003年发布的新的编码协议,相对于H.263协议,大幅度提高了在低带宽和网络质量比较差的情况图像的效果,目前已经成为视频编码协议的发展趋势。除此之外,在中国市场上(仅仅在中国市场上),还存在把基于有线电视单向传输的MPEG2协议包装成双向视频通... 阅读全文
posted @ 2012-07-30 13:56 Mr.Rico 阅读 (1335) | 评论 (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) 编辑
摘要:测试解码器测试了很久,由于需要将H264和MPEG4的码流进行分析和判断,并逐帧输入解码器进行测试,如何正确的分析码流,并将Video送给我们的解码器做Decode的呢?耐着性子找了很多资料,主要也因为我本身对MPEG4和H264的码流的格式并不懂,自己在视频编码方面的积累也实在是太少了,所以也确实挺头疼的。后来就直接在网上找是否有对码流的各个部分意义的解释,开始搜索码流中的的StartCode。高兴的是,最终找到了一些有用的讯息,得以继续进行测试代码的撰写。 今天就把MPEG4码流的分析和它的I,P,B Frame的判定方法在这里简要记录一下吧,供日后的翻看和大家的参考。!MPEG... 阅读全文
posted @ 2012-07-28 22:51 Mr.Rico 阅读 (782) | 评论 (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 阅读 (1390) | 评论 (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 阅读 (273) | 评论 (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) 编辑
摘要:1视频编解码技术发展现状 视频编码的主要目的就是在保证一定重构质量的前提下,以尽量少的比特数来表征视频信息。视频编码的原理是:由于表示图像和视频信息所需的大量的数据往往是高度相关的,这些相关性会引起信息的冗余,因此可以通过去除这些冗余信息来实现对视频数据的压缩。传统的基于统计特性的运动补偿+变换编码的混合编码框架在数据压缩方面取得了很大的成果,国内外的通用视频压缩标准均基于此框架,比如H.26L系列、MPEG系列以及我国的AVS-P2标准。但是随着计算机网络的不断发展和应用需求的多样化,对于视频编码技术的研究不再仅仅局限于压缩特性,而渐渐开始向网络适应性、用户交互性等方面转移。因此,这几年.. 阅读全文
posted @ 2012-07-28 11:22 Mr.Rico 阅读 (3148) | 评论 (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 阅读 (1802) | 评论 (0) 编辑
摘要:一个完整的多媒体文件是由音频和视频2部分组成的。H264、Xvid等就是视频编码格式,MP3、AAC等就是音频编码格式。字幕文件只是其中附带部分。 把视频编码和音频编码打包成一个完整的多媒体文件,可以有不同的方式,这种方式便是所谓的封装方式,不同的封装方式有不同的后缀。由于有些封装方式具有很强的灵活性,它可以把各种不同的音视频文件打包成一个文件,因此会出现这么一种情况,虽然文件的后缀是相同的,但有些可以正常播放,而有些不能播放,毕竟任何一种播放软件都不是万能的。部分先进的封装方式还可以同时封装多个音频编码文件,甚至同时封装进字幕文件,如MKV封装方式。MKV文件可以做到一个文件包括多种语... 阅读全文
posted @ 2012-07-28 11:17 Mr.Rico 阅读 (2163) | 评论 (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) 编辑
摘要:本文首先向读者讲解了Linux下进程地址空间的布局以及进程堆栈帧的结构,然后在此基础上介绍了Linux下缓冲区溢出攻击的原理及对策。 前言 从 逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用。当函数调用发生时,新的堆栈帧被压入堆栈;当函数返回时,相应的堆栈帧从堆 栈中弹出。尽管堆栈帧结构的引入为在高级语言中实现函数或过程这样的概念提供了直接的硬件支持,但是由于将函数返回地址这样的重要数据保存在程序员可见的 堆栈中,因此也给系统安全带来了极大的隐患。 历史上最著名的缓冲区溢出攻击可能要算是1988年11月2日的Morris Worm所携带的攻击代... 阅读全文
posted @ 2012-07-22 19:07 Mr.Rico 阅读 (2855) | 评论 (0) 编辑
摘要:参考:http://blog.csdn.net/lbsljn/article/details/4277737B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字; 如果B树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡... 阅读全文
posted @ 2012-07-16 15:25 Mr.Rico 阅读 (94) | 评论 (0) 编辑
摘要:每年的 09/28 於我都是一个特殊的日子 -- 不只是因为教师节。今年很特殊地没有普天同庆,那麽我就写篇文章自己庆祝一下好了。我於今年七月发表了一本着作《多型与虚拟》和一本译作《深度探索C++物件模型》,获得很大的回响。这些作品都不是针对 C++ 的完全初学者所写,但从初阶到高阶为数众多的 C++ guy,热情地表达了他们对这些主题的喜悦。在许多来信中,我看到一些有趣的现象,也感受到一些值得整理下来的想法。所以,根据我个人的学习过往、我的教学经验、以及周遭朋友的心得交流,写下这篇文章,或可为後学者戒。●《多型与虚拟》序言节录首先让我节录《多型与虚拟》一书序言:《多型与虚拟》序 节录(侯俊杰. 阅读全文
posted @ 2012-07-16 15:18 Mr.Rico 阅读 (278) | 评论 (0) 编辑
摘要:在31年前(1979年),一名刚获得博士学位的研究员,为了开发一个软件项目发明了一门新编程语言,该研究员名为Bjarne Stroustrup, 该门语言则命名为——C with classes,四年后改称为C++。C++是一门通用编程语言,支持多种编程范式,包括过程式、面向对象(object-oriented programming, OP)、泛型(generic programming, GP),后来为泛型而设计的模版,被发现及证明是图灵完备的,因此使C++亦可支持模版元编程范式(template metaprogramming, TMP)。C++继承了C的特色,既为高级语言,又含低级.. 阅读全文
posted @ 2012-07-16 14:55 Mr.Rico 阅读 (838) | 评论 (0) 编辑
摘要:一、二进制数转换成十进制数 由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为"按权相加"法。 例1105 把二进制数110.11转换成十进制数。 二、十进制数转换为二进制数 十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。 1. 十进制整数转换为二进制整数 十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此... 阅读全文
posted @ 2012-07-13 16:29 Mr.Rico 阅读 (133491) | 评论 (4) 编辑
摘要:缘起 在项目中发现某些情况下,对象的析构函数不被调用,比如程序调用exit(), 异常终止等。那么,析构函数什么情况下不会被调用呢? RAII RAII(资源获取即初始化RAII, Resource Acquisition Is Initialization)是C++编程中很重要的一项技术。其原理是在对象析构函数中释放该对象获取的资源,利用栈展开过程栈上对象的析构函数将被 自动调用的保证,从而正确地释放先前获取的资源。RAII只有在栈展开正常执行的前提下才能正常工作。函数调用和正常的C++异常处理流程(异常处于 try-catch块)都存在栈展开。 栈展开 最常见的栈展开就是正常的函数调用,. 阅读全文
posted @ 2012-07-10 10:57 Mr.Rico 阅读 (221) | 评论 (0) 编辑
摘要:C++的类型萃取技术 自从C++中引入了template后,以泛型技术为中心的设计得到了长足的进步。STL就是这个阶段杰出的产物。STL的目标就是要把数据和算法分开,分别对其进行设计,之后通过一种名为iterator的东西,把这二者再粘接到一起。设计模式中,关于iterator的描述为:一种能够顺序访问容器中每个元素的方法,使用该方法不能暴露容器内部的表达方式。可以说,类型萃取技术就是为了要解决和iterator有关的问题的,下面,我们就来看看整个故事。应该说,迭代器就是一种智能指针,因此,它也就拥有了一般指针的所有特点——能够对其进行*和->操作。但是在遍历容器的时候,不可... 阅读全文
posted @ 2012-07-01 12:48 Mr.Rico 阅读 (151) | 评论 (0) 编辑