上一篇写了x264库的编译安装、测试,那么这个库怎么为自己所用呢?在下载好的x264源码top目录下,使用了
./x264这个小程序进行了例子验证,下面分析下这个x264.c 文件,看看如果我们要在代码中使用x264库编码,该怎么做:
本来想慢慢自己分析下,却已经百度到相关的内容,权且当个拿来主义者,毕竟,还是不要重复造轮子的好:下面附上别人的解析链接:(相当齐全)
《x264代码剖析(一):图文详解x264在Windows平台上的搭建
<http://blog.csdn.net/frd2009041510/article/details/50777691?spm=a2c4e.11153940.blogcont31059.3.42fa18db40uyt8>
》
《x264代码剖析(二):如何编译运行x264以及x264代码基本框架
<http://blog.csdn.net/frd2009041510/article/details/50805395>》
《x264代码剖析(三):主函数main()、解析函数parse()与编码函数encode()
<http://blog.csdn.net/frd2009041510/article/details/50820491?spm=a2c4e.11153940.blogcont31059.5.42fa18db40uyt8>
》
《x264代码剖析(四):vs2010编译x264错误集锦
<http://blog.csdn.net/frd2009041510/article/details/50822847>》
《x264代码剖析(五):encode()函数之x264_encoder_open()函数
<http://blog.csdn.net/frd2009041510/article/details/50833141>》
《x264代码剖析(六):encode()函数之x264_encoder_headers()函数
<http://blog.csdn.net/frd2009041510/article/details/50839114>》
《x264代码剖析(七):encode()函数之x264_encoder_encode()函数
<http://blog.csdn.net/frd2009041510/article/details/50845057>》
《x264代码剖析(八):encode()函数之x264_encoder_close()函数
<http://blog.csdn.net/frd2009041510/article/details/50847271>》
《x264代码剖析(九):x264_encoder_encode()函数之x264_slice's'_write()函数
<http://blog.csdn.net/frd2009041510/article/details/50849722>》
《x264代码剖析(十):x264核心算法框架
<http://blog.csdn.net/frd2009041510/article/details/50864479>》
《x264代码剖析(十一):核心算法之宏块分析函数x264_macroblock_analyse()
<http://blog.csdn.net/frd2009041510/article/details/50877029>》
《x264代码剖析(十二):核心算法之帧内预测函数x264_mb_analyse_intra()
<http://blog.csdn.net/frd2009041510/article/details/50889684>》
《x264代码剖析(十三):核心算法之帧间预测函数x264_mb_analyse_inter_*()
<http://blog.csdn.net/frd2009041510/article/details/50917282>》
《x264代码剖析(十四):核心算法之宏块编码函数x264_macroblock_encode()
<http://blog.csdn.net/frd2009041510/article/details/50959404>》
《x264代码剖析(十五):核心算法之宏块编码中的变换编码
<http://blog.csdn.net/frd2009041510/article/details/50966924>》
《x264代码剖析(十六):核心算法之宏块编码中的量化编码
<http://blog.csdn.net/frd2009041510/article/details/50978089>》
《x264代码剖析(十七):核心算法之熵编码(Entropy Encoding)
<http://blog.csdn.net/frd2009041510/article/details/51026583>》
《x264代码剖析(十八):核心算法之滤波
<http://blog.csdn.net/frd2009041510/article/details/51076471>》
上面的第三篇,即本文的主题,不过,个人觉得讲得太过呆滞,有点于拘泥于细节而忽视了整体,这里补充点个人的看法:
Main()
{
Parse();
Encode();
}
在encode()函数中,进行编码:
X264_encoder_open(param);
x264_encoder_parameters( h, param );
x264_encoder_headers
x264_encoder_encode
其他的一些收尾工作
整个分析过程,其实是一个剥离的过程,将x264_encoder 函数和调用者剥离,因为我们要明白的是调用关系,x264_encoder_
开头的函数我们暂时不去追究其源码,其实只在工程中全局搜索下x264_encorder_ 就可以简短的看到全部关于库函数的调用。搞清楚怎么去使用
x264_encoder api 。 其他的部分,即用户调用者要自己实现的部分。
大体的结构是:
初始化->读源文件->获得一帧数据->编码->写目标文件->收尾
结果我们在看到它在获取一帧源数据部分使用到一个 filter。 这是该程序自己实现的类似一个文件管理器的玩意, 直接就从这个里面getframe
了,可以肯定,之前已经初始化了这个结构体,(这有点op的思想),具体怎么获取一帧,追踪即可看到源码。
热门工具 换一换