相关说明:
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的复杂性要有清醒的认识.

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( stderr, "x264_encoder_encode failed/n" );

}

……

}

凡是出现for循环的地方都应该认真对待,这是我的一个体会,也是进入分层结构认真分析的好方法.

fread()函数一次读入一帧,分亮度和色度分别读取.这里要看到c语言中的File文件有一个文件位置指示器,调用fread()函数会使文件指示器自动移位,这就是一帧一帧读取的实现过程.

x264源代码分析1。fread()相关推荐

  1. x264源代码分析.

    l 相关说明: 1. 使用版本: x264-cvs- 2004-05-11 2. 这次的分析基本上已经将代码中最难理解的部分做了阐释,对代码的主线也做了剖析,如果这个主线理解了,就容易设置几个区间,进 ...

  2. x264里的2pass指的是什么意思? x264源代码分析2.encode()

    A:x264里的2pass指的是什么意思?另外stat是什么意思, 比如有个参数--stats <string>        Filename for 2 pass stats [/&q ...

  3. x264源代码简单分析:x264命令行工具(x264.exe)

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  4. x264源代码简单分析:熵编码(Entropy Encoding)部分

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  5. x264源代码简单分析:宏块编码(Encode)部分

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  6. x264源代码简单分析:宏块分析(Analysis)部分-帧间宏块(Inter)

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  7. x264源代码简单分析:滤波(Filter)部分

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  8. x264源代码简单分析:x264_slice_write()

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  9. x264源代码简单分析:编码器主干部分-2

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

最新文章

  1. [转]12款最佳Linux命令行终端工具
  2. python to_excel保存成xls_pd.ExcelWriter(to_excel)保存结果到已存在的excel文件中
  3. spring 基于xml方式配置aop
  4. 为什么简单的删除集合中的元素竟然报错了?
  5. Python企业微信机器人
  6. 【Oracle】非RMAN恢复数据文件、控制文件
  7. 13. jQuery - 设置内容和属性
  8. 天勤数据结构顺序表算法操作含完整测试
  9. TCP—为什么是AIMD?
  10. 第一个FPGA项目:led_flash简介项目流程和项目中遇到的问题
  11. python下载b站视频_python怎么下载b站视频
  12. matlab 双均线,[转载]百年一人的双均线系统及双均线系统公式
  13. w ndows安装程序无法将,windows安装程序无法将windows配置在硬件上运行
  14. 逆转裁判Ace Attorney
  15. 高数_第3章重积分__二重积分_怎样交换积分次序
  16. spring学习(四)spring 持久层的封装
  17. 【大数据开发必看】项目一 电信客服
  18. 【学习笔记】AGC009/AGC019/AGC029/AGC035
  19. 有限域(Galois Field,GF,伽罗华域)的乘法原理
  20. 安卓手机怎么录屏?精心挑选这几款录屏软件,个个好用

热门文章

  1. php聊天室技术,PHP聊天室技术
  2. java面试宝典 多线程,《java面试宝典》之java多线程面试题
  3. 第一次尝试修复Hbase2出现Region不一致,HBCK2
  4. JAVA 捕获异常所遇BUG
  5. 【Python CheckiO 题解】Feed Pigeons
  6. Spring Boot Actuator监控关闭
  7. android 自定义相机源码,Android 自定义相机及分析源码
  8. Linux 启动失败 磁盘阵列,组建RAID5重启系统,出现md127的解决办法
  9. 【2019浙江省赛 - K 】Strings in the Pocket(马拉车,思维)
  10. *【CodeForces - 202C 】Clear Symmetry (思维,找规律,特判)