x264源代码分析(H264乐园供稿).doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
x264源代码分析(H264乐园供稿)

x264源代码分析(H.264乐园供稿) 相关说明: 1.?????使用版本:??? x264-cvs-2004-05-11 2.?????这次的分析基本上已经将代码中最难理解的部分做了阐释,对代码的主线也做了剖析,如果这个主线理解了,就容易设置几个区间,进行分工阅读,将各个区间击破了. 3.?????需要学习的知识: a)???????编码器的工作流程. b)??????? H.264的码流结构,像x264_sps_t,x264_pps_t等参数的定义基本上都完全符合标准文档中参数集的定义,抓住主要参数,次要参数也应该有所了解. c)???????数学知识,对dct变换等与数学相关的知识的编程实现要有较好理解. d)??????? C语言的知识.涉及到c语言的较多不经常用的特性,如函数指针数组,移位运算,结构体的嵌套定义等. e)???????耐心,对h.264的复杂性要有清醒的认识. 3.参考资料: a)???????新一代视频压缩编码标准-h.264/avc??毕厚杰主编,人民邮电出版社. b)??????网上的流媒体论坛,百度,google等有哪些信誉好的足球投注网站引擎. 4. 阅读代码的方法: a)???????较好的方法是利用vc的调试器,如果对某个函数感兴趣,可以将断点设置在它的前面.然后采用step into,step over等方法进去该函数一步步分析.当然本身要对程序执行流程要有较清楚认识,不然不知道何时step into,何时step over. b)??????建议应该先对照标准弄清各个结构体成员的意义. 源代码主要过程分析: 1.???????进入x264.c中的main函数. 刚开始是读取默认参数,如果你设置了参数的话会修改param的. ???? i_ret = Encode( param, fin, fout ); 这条语句使过程进入x264.c中的Encode函数. 2.???????? X.264的encode函数. A.?????? i_frame_total = 0; if( !fseek( fyuv, 0, SEEK_END ) ) ?????? { ????????? int64_t i_size = ftell( fyuv ); ????????? fseek( fyuv, 0, SEEK_SET ); ????????? i_frame_total = i_size / ( param-i_width * param-i_height * 3 / 2 ) } 上面这段计算出输入文件的总帧数. B.??????? h = x264_encoder_open( param )这个函数是对不正确的参数进行修改,并对各结构体参数和cabac编码,预测等需要的参数进行初始化. C.?????? pic = x264_picture_new( h ); 该函数定义在\CORE\common.c中.首先分给能容纳sizeof(x264_picture_t)字节数的空间,然后进行初始化. ??????这里看一下x264_picture_t和x264_frame_t的区别.前者是说明一个视频序列中每帧的特点.后者存放每帧实际的象素值.注意区分. D.?????? for( i_frame = 0, i_file = 0; i_ctrl_c == 0 ; i_frame++ ) ????? { ????????? int?????????? i_nal; ????????? x264_nal_t??? *nal; int?????????? i; /* read a frame */ ????????? if( fread( pic-plane[0], 1, param-i_width * param-i_height, fyuv ) = 0 || ????????????? fread( pic-plane[1], 1, param-i_width * param-i_height / 4, fyuv ) = 0 || ????????????? fread( pic-plane[2], 1, param-i_width * param-i_height / 4, fyuv ) = 0 ) ????????? { ????????????? break; ????????? } ????? //文件位置指示器自己变化了. ????????? if( x264_encoder_encode( h, nal, i_nal, pic ) 0 ) ????????? { ????????????? fprintf( st

文档评论(0)

2017ll + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档