歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

x264編碼的ARM移植

寫一下最近移植x264的過程。

最新的版本(我最開始用的是20090715這個)已經有cross-compile的支持了,移植應該還是很順利的。但是這個版本的win下編譯不通過,問題在網上找了一下,沒有解決。後來退而求其次,選擇了一個20060805的版本,這個版本在網上找到了win下vc6可以編譯通過的版本,同時也可以在x264的官方ftp上找到linux下可以編譯的版本。最後決定使用這個版本。這樣可以方便一些在win下的交互調試。

注意,這裡要提醒一下,幾年之內,x264的變化還是很大的。總之,在需要兩個平台交叉調試的時候,看來一個相同的版本是非常有必要的。否則,可能會發生這種情況:程序在win下好用,在linux下就不好用了,然後你一邊用vs,一邊用gdb,終於找到了不同的地方,發現x264的一個標准API對同一個參數的賦值是完全不一樣的……(比如我就發現我使用的兩個版本的x264_param_init()函數對param.i_bframe賦值是不同的,導致我的一個程序在win下是好的,linux下就是壞的)

新版本的移植我不說了,大概說一下舊版本的移植。

舊的是沒有--disable-asm和--cross-compile這兩個configure的支持的(前者是對x86的匯編優化,交叉編譯的時候當然不要的,後者是交叉編譯環境設置)。其實和我之前的移植過程差不多,這裡寫個步驟:

0.環境

OS:Ubuntu 9.04

Version:x264-snapshot-20060805-2245.tar.bz2


1.配置

./configure --prefix=/home/peter/workspace --enable-shared --enable-debug


我這裡打開了動態鏈接和debug。前者可以生成libx264.so,後者可以在你調程序用gdb的時候step into庫函數裡。
2.修改配置參數

修改config.mak:

prefix=/home/peter/workspace
exec_prefix=${prefix}
bindir=${exec_prefix}/bin
libdir=${exec_prefix}/lib
includedir=${prefix}/include
# 這裡改為ARM
ARCH=ARM
SYS=LINUX
# 這裡改為arm-linux-gcc
CC=arm-linux-gcc
# 這裡去掉-DHAVE_MMXEXT -DHAVE_SSE2 -DARCH_X86
CFLAGS=-Wall -I. -O4 -ffast-math -D__X264__ -DHAVE_MALLOC_H -DSYS_LINUX -DHAVE_PTHREAD -s -fomit-frame-pointer
LDFLAGS= -lm -lpthread -s
AS=nasm
ASFLAGS=-O2 -f elf
VFW=no
GTK=no
EXE=
VIS=no
HAVE_GETOPT_LONG=1
DEVNULL=/dev/null
CONFIGURE_ARGS= '--enable-shared' '--prefix=/home/peter/workspace'
SONAME=libx264.so.49
default

: $(SONAME)

 

修改Makefile,將66~68行的ar和ranlib改為arm下的:

libx264.a: .depend $(OBJS) $(OBJASM)
                arm-linux-ar rc libx264.a $(OBJS) $(OBJASM)
                arm-linux-ranlib libx264.a

3.編譯安裝

make
make install

就可以了。

Copyright © Linux教程網 All Rights Reserved