本人近期在使用x264进行h264编码的工作,所以想先对于工作的总结:
一:移植x264
1:下载x264source code, 源码网址:http://www.videolan.org/developers/x264.html
2:解压:tar xvf last_x264.tar.bz2
3:编译及安装:
(1)./configure --prefix=/home/deqing/x264_arm --enable-shared --host=aarch64-linux --cross-prefix=/home/deqing/cross_toolchain/gcc-linaro-4.9-2015.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
在该配置中我用的 交叉编译链工具是aarch64-linux-gnu-,并且开启了对neon的支持的功能(如果不想支持neon,加上disable-asm)。
(2)make & make install
4:将生成的头文件及库文件拷贝到对应板子上的/usr/lib 和/usr/include目录下
二:x264 source code 执行flow
对x264_param_t结构体内参数进行默认初始化
|
|
|
|
|
x264_param_default()--------------------x264_cpu_detect()(编译时选定的CPU为aarch64,且支持neon)
|(对x264_param_t结构体进行初始化)
| -h help(打印消息)
| |
| |
parse()---------------------------- getopt_long()-------------------------- -V print_version_info(打印版本信息)
|(解析命令行并进行初始化) | (对命令行进行解析) |
| | |
| | -o output_filename(输出的文件名)
| x264_param_default_preset()
| |(设置tune和profile)
main(x264.c)--------| |
| |
| x264_param_apply_profile()
| |(对profile的应用限制,主要有baseline,main,high等)
| |
| |
| select_output & select_input(匹配输入输出文件的格式)
| |(输入格式:,raw、d2v、dga、yuv等,输出格式:Mp4、mkv、flv等)
|
|
|
|
encode()--------------------------- encode_frame()-------x264_encoder_encode()-------x264_slices_write()
| |
| | x264_sps_write()
| | |
| | |
| | |
| x264_encoder_headers()--------- x264_pps_write()
| |(写头文件SEI,SPS PPS) |
| | |
| | |
| | x264_sei_version_write
| |
| |
| |
| x264_encoder_open()