随笔分类 - X264

摘要:函数名称所以位置完成功能void x264_frame_filtercommon\mc.c帧滤波void x264_frame_init_lowrescommon\mc.c亮度1/2像素值初始化void x264_mc_initcommon\mc.c运动估计初始化static void motion_compensation_chromacommon\mc.c色度运动估计static uint8_t *get_refcommon\mc.c获取参考亮度像素static void mc_lumacommon\mc.c亮度运动估计 common\mc.c void x264_param_def... 阅读全文
posted @ 2012-08-01 01:11 Mr.Rico 阅读 (2498) | 评论 (0) 编辑
摘要:码率控制部分关键函数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 阅读 (191) | 评论 (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 阅读 (581) | 评论 (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) 编辑
摘要:先声明:本人为x264初学者,以下内容如有错误,欢迎指出,共同进步。刚开始接触x264,我想很多人和我一样,其目的只是想将代码编译通过,看看执行结果,再对代码跟踪调试。但是初学者会发现,把x264的源码变成.exe文件很麻烦,不过更困难的是,如何在IDE中将代码编译通过,论坛里也有一些帖子教大家如何在VS2008中编译,可能是我比较笨,看了几遍我都没有办法将Videolan上的源码编译通过。没有办法,小弟只好另外想办法。在查看了Doom10论坛上关于编译的帖子后,才知道x264是不支持微软的VS的,x264使用的是GCC的编译器,于是我将目光转向了Linux平台。在使用了几个IDE后,通过网上 阅读全文
posted @ 2012-07-30 21:32 Mr.Rico 阅读 (659) | 评论 (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 阅读 (274) | 评论 (0) 编辑