vs 运行x264和Linux下的运行

X264最大的特点在于其出发点是为了H.264的实用性。与JM相比,X264并没有完整的对H.264标准给与实现,而是舍去了一些对编码性能贡献很小但计算复杂度极高的新特性,如多参考帧、帧间预测中不必要的块模式等技术。从而计算复杂度降低,编码效率却并没有明显降低。码流兼容H.264。在实用 的系统中,比如比较普遍的在DSP芯片上实现H.264,大多是移植X264代码。
  1. 在Windows系统下实现X264

    工具:Microsoft Visual Studio2005  而不要使用visualstdio 6.0,如果使用6.0要打很多的补丁,并且可能还会出现很多其它问题。

     程序:x264_i386版

实现步骤:

(1)首先就是nasm不能编译的问题,解决如下:

下载nasm

http://www.nasm.us/pub/nasm/releasebuilds/2.09.08/win32/nasm-2.09.08-win32.zi

解压,并且将nasm拷入D:\ProgramFiles\Microsoft Visual Studio 8\VC\bin下。

(2)中间还pthread.h的报错,参考我另一篇

运行x264中用到的pthread.h文件及相关问题


(3)编译程序,生成X264.exe文件。

输出文件在bin目录下现  bin/x264.exe

(4)在cmd中运行,转到此目录下运行

x264 --no-cabac -o e:\4cif\test.264 e:\4cif\foreman.4cf704x576
x264 --no-cabac -o .\test.264 e:\4cif\foreman.4cf 704x576

x264 --no-cabac -o D:\test.264D:\x264-060601\build\win32\bin\foreman.yuv 176x144

其中目录下要有源文件foreman_dec.4cf然后运行之后在目录下就会生成test.264压缩文件。

(5)要在vs上面运行的话

项目->属性    点击: 配置属性->调试 

  在命令参数一栏输入:--no-cabac -o e:\4cif\test.264e:\4cif\foreman.4cf 704x576 

x264 --no-cabac -o D:\test.264D:\x264-060601\build\win32\bin\foreman.yuv 176x144

确定后 按F5开始执行

 

2.在Linux系统下实现X264

      准备:Linux系统、x264-snapshot 20070920-2245版程序

 (1) PC机上装nasm 解决开始运行的问题
make时提示 Found no assembler
Minimum version is yasm-0.6.2
If you really want to compile without asm, configure with--disable-asm.
少了linux下的汇编器,安装个yasm就OK啦,下载地址:

我下载的是:

http://www.tortall.net/projects/yasm/wiki/Download   yasm-1.1.0.tar.gz

美国官网:http://www.nasm.us/  nasm-0.98.39.tar.bz2
解压,进入解压包
./configure
make
make install
(2)
然后在Linux系统下

#./configure

#make    之后便生成Linux系统下的X264可执行文件,文件名为:x264 

(3)运行

./x264   mo-da_qcif.yuv176x144  -o test.264
./x264  foreman.4cf  704x576  -otest.264

 

3.在开发板上实现X264

准备:编译环境:Linux系统

工具:arm-linux-gcc 3.4.1

程序:x264-snapshot 20070920-2245版

实现步骤:

(1)安装编译环境Linux系统,我是在Windows上安装的虚拟机,然后在虚拟机之上安装的Linux系统。(在虚拟机下的Linux系统中注意,使用Linux与Windows的共享文件夹时,若要对解压文件进行解压,要将解压的文件拷贝到虚拟机linux系统下,而不要在共享文件夹中进行解压,否则解压不成功。         

(2)安装交叉编译器arm-linux-gcc 3.4.1,其安装过程:将arm-linux-gcc3.4.1.tar.bz2拷贝到Linux系统下,如我拷到了/WeiLi目录下。—>解压,tar–jxvf arm-linux-gcc3.4.1.tar.bz2。—>将解压文件中的arm文件夹拷贝到/usr/local下,cp –rvarm/usr/local。—>修改环境变量,即将arm-linux-gcc编译器指定为3.4.1,gedit/root/.bashrc,在/root/.bashrc这个文件的最后一行添加上命令: export PATH=$PATH:/usr/local/arm/3.4.1/bin。arm-linux-gcc3.4.1便安装完毕,就可以使用此交叉编译器了。

注意:对于我们的开发板,配套使用的编译器是armv4l-unknown-linux-gcc,经我通过简单的hello.c程序测试,用arm-linux-gcc编译出的可执行程序在实验台上也能正确运行,所以arm-linux-gcc和armv4l-unknown-linux-gcc在一定程度上可以通用,可能只是版本问题。

(3)修改X264程序,首先对程序进行一些地方的修改,否则会出现关于cpu_set_t的错误,关于cpu_set_t的以下那段代码是关于计算CPU内核数的代码,所以将np=1(我们所使用的计算机都是单核)直接返回,而没有用它的计算,#elif defined(SYS_LINUX) unsigned int bit; int np; cpu_set_t p_aff;memset( &p_aff, 0, sizeof(p_aff));sched_getaffinity( 0, sizeof(p_aff), &p_aff);for( np = 0;bit = 0; bit < sizeof(p_aff); bit++);np += (((uint8_t *)&p_aff)[bit / 8]>> (bit % 8)) &1;return np;改成了:#elif defined(SYS_LINUX) int np;np=1; returnnp;


(4)编译程序,将x264-snapshot20070920-2245拷贝到Linux系统下,(在虚拟机的共享文件夹下也可以)。./configure--host=arm-linux。—>修改config.mak文件,将其中的CC=gcc,AS=yasm修改成CC=arm-linux-gcc,AS=arm-linux-as。—>make。之后便生成了可执行文件X264。

注意:此处的X264程序一定要是未被其它编译器编译过的程序,即如果此X264是被gcc或者其它编译器编译过后的程序,再使用arm-linux-gcc3.4.1编译,会出现collect2错误。

(5)将生成的可执行文件x264移植到开发板上,运行x264 --qp 18--keyint 240 --min-keyint 24 --ref 3 --mixed-refs --no-fast-pskip--bframes 3 --b-pyramid --b-rdo --bime --weightb --trellis 1--analyse all --8x8dct --threads 3 --thread-input --progress--no-dct-decimate –o out.264 foreman_part_qcif_444.yuv352x288,其中目录下要有源文件foreman_part_qcif_444.yuv然后运行之后在目录下就会生成out.264压缩文件。

参考:

http://blog.vckbase.com/wangjun/archive/2010/08/02/43939.html

你可能感兴趣的:(编码,编译器)