2008年12月25日星期四

gst-ffmpeg

/home/gstreamer/gst-ffmpeg-0.10.6
./configure --host=arm-linux --prefix=/home/gstreamer/install --enable-shared CFLAGS=-I/home/gstreamer/install/include/ LDFLAGS="-L/home/gstreamer/install/lib -lbz2 -lamrwb -lamrnb" --with-ffmpeg-extra-configure="--prefix=/home/gstreamer/install --enable-cross-compile --enable-gpl --disable-network --disable-ipv6 --disable-vhook --disable-mpegaudio-hp --enable-pthreads --disable-parsers --arch=armv4l --disable-muxers --disable-encoders --disable-stripping --host-cc=arm-linux-gcc --disable-armv6 --disable-armv5te --disable-armvfp --disable-ffmpeg --enable-static --enable-shared --cross-prefix=/usr/local/arm/3.4.1/bin/arm-linux- ARCH_ARMV4L=y --enable-libamr-nb --enable-libamr-wb --enable-libxvid --enable-nonfree"

/home/gstreamer/amrnb-7.0.0.2
echo ac_cv_func_malloc_0_nonnull=yes >> arm.cache
echo ac_cv_file__bin_bash=yes >> arm.cache
./configure --host=arm-linux --prefix=/home/gstreamer/amrnb-7.0.0.2/../install --cache-file=arm.cache

/home/gstreamer/amrwb-7.0.0.3
echo ac_cv_func_malloc_0_nonnull=yes >> arm.cache
echo ac_cv_file__bin_bash=yes >> arm.cache
./configure --host=arm-linux --prefix=/home/gstreamer/amrwb-7.0.0.3/../install --cache-file=arm.cache

/home/gstreamer/xvidcore/build/generic
./configure --host=arm-linux --prefix=/home/gstreamer/install

How to install FFmpeg with MP3 and AMR support

http://www.mattiouz.com/blog/2007/07/02/how-to-install-ffmpeg-with-mp3-and-amr-support/

2008年12月20日星期六

编译gstreamer相关

把编译完的配置从config.log里拷出来,去掉双引号了,记得加上

gstreamer统一目录是/home/gstreamer,编译后统一安装在/home/gstreamer/install文件夹里,所以设置pkgconfig就只用设置一个地址
export PKG_CONFIG_LIBDIR=/home/gstreamer/install/lib/pkgconfig

然后开始编译
/home/gstreamer/gstreamer-0.10.21/

$ ./configure --disable-nls --disable-static --enable-binary-registry --disable-loadsave --with-html-dir=/tmp/dump --prefix=/home/gstreamer/gstreamer-0.10.21/../install --host=arm-linux LDFLAGS=-L/home/gstreamer/install/lib/ -L/home/gstreamer/install/lib/ -lglib-2.0 -lgio-2.0 -lgobject-2.0 -lgthread-2.0 -lgmodule-2.0 -lxml2 CFLAGS=-I/home/gstreamer/install/include/ -I/home/gstreamer/install/include/glib-2.0/ -I/home/gstreamer/install/lib/glib-2.0/include

/home/gstreamer/gst-plugins-base-0.10.21/
$ ./configure --host=arm-linux --prefix=/home/gstreamer/gst-plugins-base-0.10.21/../install --disable-static --with-html-dir=/tmp/dump CFLAGS=-I/home/gstreamer/install/lib/glib-2.0/include -I/home/gstreamer/install/include/glib-2.0 -I/home/gstreamer/install/include/liboil-0.3/liboil -I/home/gstreamer/install/include/gstreamer-0.10/gst -I/home/gstreamer/install/include/gio-unix-2.0/gio -I/home/gstreamer/install/include/libxml2/libxml LDFLAGS=-L/home/gstreamer/install/lib/ -L/home/gstreamer/install/lib/gstreamer-0.10 -L/home/gstreamer/install/lib/python2.5/site-packages --with-pkg-config-path=/home/gstreamer/install/lib/pkgconfig --disable-x --disable-xvideo --disable-xshm --disable-gnome_vfs --disable-cdparanoia --disable-libvisual --disable-alsa --disable-ogg --disable-oggtest --disable-pango --disable-vorbis --disable-vorbistest

/home/gstreamer/gst-plugins-good-0.10.11/
$ ./configure --host=arm-linux --prefix=/home/gstreamer/gst-plugins-good-0.10.11/../install --disable-nls --disable-static --with-html-dir=/tmp/dump --with-plugins=avi,qtdemux CFLAGS=-I/home/gstreamer/install/lib/glib-2.0/include -I/home/gstreamer/install/include/glib-2.0 -I/home/gstreamer/install/include/liboil-0.3/liboil -I/home/gstreamer/install/include/gstreamer-0.10/gst -I/home/gstreamer/install/include/gio-unix-2.0/gio -I/home/gstreamer/install/include/libxml2/libxml LDFLAGS=-L/home/gstreamer/install/lib/ -L/home/gstreamer/install/lib/gstreamer-0.10 -L/home/gstreamer/install/lib/python2.5/site-packages --disable-x --disable-xshm --disable-xvideo --disable-esd --disable-shout2

/home/gstreamer/gst-plugins-ugly-0.10.10/
$ ./configure --host=arm-linux --prefix=/home/gstreamer/gst-plugins-ugly-0.10.10/../install --disable-nls --disable-static --with-html-dir=/tmp/dump --with-plugins=asfdemux CFLAGS=-I/home/gstreamer/install/lib/glib-2.0/include -I/home/gstreamer/install/include/glib-2.0 -I/home/gstreamer/install/include/liboil-0.3/liboil -I/home/gstreamer/install/include/gstreamer-0.10/gst -I/home/gstreamer/install/include/gio-unix-2.0/gio -I/home/gstreamer/install/include/libxml2/libxml LDFLAGS=-L/home/gstreamer/install/lib/ -L/home/gstreamer/install/lib/gstreamer-0.10 -L/home/gstreamer/install/lib/python2.5/site-packages

/home/gstreamer/gst-plugins-bad-0.10.9/
$ ./configure --host=arm-linux --prefix=/home/gstreamer/gst-plugins-bad-0.10.9/../install CFLAGS=-I/home/gstreamer/install/lib/glib-2.0/include -I/home/gstreamer/install/include/glib-2.0 -I/home/gstreamer/install/include/liboil-0.3/liboil -I/home/gstreamer/install/include/gstreamer-0.10/gst -I/home/gstreamer/install/include/gio-unix-2.0/gio -I/home/gstreamer/install/include/libxml2/libxml LDFLAGS=-L/home/gstreamer/install/lib/ -L/home/gstreamer/install/lib/gstreamer-0.10 -L/home/gstreamer/install/lib/python2.5/site-packages --disable-nls --disable-static --with-html-dir=/tmp/dump --disable-apexsink --disable-sdl

/home/gstreamer/glib-2.18.3
$ ./configure --cache-file=arm.cache --host=arm-linux --prefix=/home/gstreamer/glib-2.18.3/install
arm.cache的内容在前面的文章里写了。家里用X86_64编译的,把posix那2个设置为no,可以编译过了。也没有WARNING提示了。

/home/gstreamer/libxml2-2.6.24/
$ ./configure --host=arm-linux --prefix=/home/gstreamer/libxml2-2.6.24/../install/

/home/gstreamer/liboil-0.3.15/
$ ./configure --host=arm-linux --prefix=/home/gstreamer/liboil-0.3.15/../install/ --disable-static --with-html-dir=/tmp/dump CFLAGS=-I/home/gstreamer/install/lib/glib-2.0/include -I/home/gstreamer/install/include/glib-2.0 LDFLAGS=-L/home/gstreamer/install/lib/
修改的configure文件在前面文章里写了

这里的编译都是不带额外的plugins,比如没有把mad加进去

运行时设置环境变量GST_PLUGINS_PATH为包含plugin的地址
在没有设置该环境变量时,运行/home/gstreamer/gstreamer-0.10.21/tests/examples/helloworld/.libs下的helloworld程序会报错:

# ./helloworld a
**
ERROR:helloworld.c:59:main: assertion failed: (filesrc)
Aborted

本来是件简单的事情,设置环境变量就行了,但是网上没搜到解决办法,加入了gstreamer的QQ群,也没人告诉我。有个人倒是算热心回答我问题,但是他觉得这里不应该出错,他不会在这里出错。那么他们怎么把有哪些plugin告诉gstreamer的?可能办法不一样吧。结果我找到一篇"GStreamer Plugin Writer's Guide(0.10.21.1)",Chapter 9. Building a Test Application才知道要设置GST_PLUGIN_PATH

2008年12月19日星期五

在fedora9 x86_64上编译arm qt2.2.0

系统:Fedora9 x86_64

1>下载cross-3.3.2.tar.bz2,并解压到/usr/local/arm/文件夹下,设置环境变量PATH
tar zjf cross-3.3.2.tar.bz2 -C /usr/local/arm/
export PATH=$PATH:/usr/local/arm/3.3.2/bin

2>建立目录armqt,设置环境变量
mkdir /home/armqt //arm qt根目录
export ARMQT=/home/armqt
mkdir $ARMQT/tools //arm库
mkdir $ARMQT/tools/lib //arm库lib
mkdir $ARMQT/tools/include //arm库include
mkdir $ARMQT/arm220 //编译arm qt
mkdir $ARMQT/qtopia //make install的路径,生成的qt及其库的文件系统文件夹

3>下载qtopia-free-src-2.2.0.tar.gz解压到$ARMQT/arm220,省掉下一级qtopia-free-2.2.0目录

4>下载arm需要的库,并解压到$ARMQT/tools下,并编译
A e2fsprogs-1.39.tar.gz

下载地址
http://nchc.dl.sourceforge.net/sourceforge/e2fsprogs/e2fsprogs-1.39.tar.gz

安装
./configure --host=arm-linux --enable-elf-shlibs --with-cc=arm-linux-gcc --with-linker=arm-linux-ld --prefix=/usr/local/arm/2.95.3/arm-linux
make
cp lib/libuuid.so* ../lib/

B jpegsrc.v6b.tar.gz

下载地址
http://down1.chinaunix.net/distfiles/jpegsrc.v6b.tar.gz

I 缺少libtool,下载
yum install libtool
cp /usr/share/libtool/config.guess /home/armqt/tools/jpeg-6b/ -rf
cp /usr/share/libtool/config.sub /home/armqt/tools/jpeg-6b/ -rf

II ./configure --enable-shared

III 修改Makfile,搜索到CC,AR,AR2宏替换为下面(如果是export CC=arm-linux-gcc,
在Makefile中虽然cc,ld等变了,但是ar,ranlib就没有改变)
CC=arm-linux-gcc
AR=arm-linux-ar rc
AR2=arm-linux-ranlib

IV make

V 拷贝库文件和头文件到统一目录
cp *.h ../include/
cp .libs/libjpeg.so* ../lib/

VI 可以用file看一下编译出来的是否是arm版本的及是否动态链接
[root@localhost jpeg-6b]# file wrjpgcom
wrjpgcom: ELF 32-bit LSB executable, ARM, version 1, dynamically linked (uses shared libs), for GNU/Linux 2.0.0, not stripped

C zlib-1.2.3.tar.bz2

下载地址
http://www.zlib.net/zlib-1.2.3.tar.gz

I ./configure -shared

II 修改Makfile,搜索到CC,LDSHARED,CPP,AR,RANLIB,prefix宏替换为下面
CC=arm-linux-gcc
CPP=arm-linux-gcc -E
LDSHARED=arm-linux-gcc -shared -Wl,-soname,libz.so.1
AR=arm-linux-ar rc
RANLIB=arm-linux-ranlib
prefix=/usr/local/arm/3.3.2/arm-linux

III make

IV 拷贝库文件和头文件到统一目录
cp libz.so* ../lib/
cp *.h ../include/

D libpng-1.2.14.tar.bz2

下载地址
http://superb-east.dl.sourceforge.net/sourceforge/libpng/libpng-1.2.14.tar.bz2

I cp scripts/makefile.linux Makefile

II 修改Makfile,搜索到CC,AR,AR2,prefix,ZLIBLIB,ZLIBINC宏替换为下面
CC=arm-linux-gcc
AR=arm-linux-ar rc
AR2=arm-linux-ranlib
prefix=/usr/local/arm/3.3.2/arm-linux
ZLIBLIB=../lib
ZLIBINC=../include

III make

IV 拷贝库文件和头文件到统一目录
cp libpng12.so* ../lib/
cp libpng12.so ../lib/libpng.so
cp *.h ../include/

E uic-qt2

下载地址
http://vanille.de/tools/uic-qt2

chmod 777 uic-qt2
cp uic-qt2 $ARMQT/arm220/qt2/bin/uic

5>编译qt前的准备
A修改文件$ARMQT/arm220/qtopia/mkspecs/qws/linux-arm-g++/qmake.conf
chmod 777 $ARMQT/arm220/qtopia/mkspecs/qws/linux-arm-g++/qmake.conf

QMAKE_LIBS_QT = -lqte
改为
QMAKE_LIBS_QT = -lqte -lpng -lz -luuid -ljpeg

B修改文件$ARMQT/arm220/qtopia/src/qt/qconfig-qpe.h
chmod 777 $ARMQT/arm220/qtopia/src/qt/qconfig-qpe.h
添加到文件最后
#define QT_QWS_IPAQ
#define QT_QWS_IPAQ_RAW

C修改文件$ARMQT/arm220/qt2/include/qvaluestack.h
chmod 777 $ARMQT/arm220/qt2/include/qvaluestack.h
remove( this->fromLast() );
改为
this->remove( this->fromLast() );

D修改文件$ARMQT/arm220/qtopia/src/libraries/qtopia/qdawg.cpp
chmod 777 $ARMQT/arm220/qtopia/src/libraries/qtopia/qdawg.cpp
QDawgPrivate::~QDawgPrivate()
改为
~QDawgPrivate()

E
cp $ARMQT/arm220/qtopia/src/qt/qconfig-qpe.h $ARMQT/arm220/qt2/src/tools
cd $ARMQT/arm220/qtopia/src/libraries/qtopia
cp custom-linux-ipaq-g++.cpp custom-linux-arm-g++.cpp
cp custom-linux-ipaq-g++.h custom-linux-arm-g++.h

F编译时出现了qvfb错误,没搜到网上别人怎么做的,反正arm也用不上,所以干脆删了
rm $ARMQT/arm220/dqt/tools/qvfb -rf

G下面都是在编译时少什么就加什么库,先用yum whatprovides确定库名字,然后用yum install更新,感觉很不安全一样,我怕影响有些什么功能不能使用了.gcc -m32也就是32位编译了,不知道为什么更新后它自动加上了-m32,是自适应还是手动?

/*****
本来安装了这3个包,但是按照前2天在32位机上使用gcc32的做法(替换gcc,g++,lib)会出错,所以只好放弃,谁能告诉我怎样在x86_64上用i386 gcc32?
compat-gcc-32-3.2.3-47.3.i386.rpm
compat-gcc-32-c%2B%2B-3.2.3-47.3.i386.rpm
compat-libstdc++-33-3.2.3-63.i386.rpm
******/

I gcc少头文件和libc
yum whatprovides */gnu/stubs-32.h
yum install glibc-devel.i386

yum whatprovides */4.3.0/libstdc++.a
yum install libstdc++-devel.i386

II 编译时缺少的其他i386库
yum whatprovides */libXext.so
yum install libXext-devel.i386

yum whatprovides */libX11*
yum install libX11-devel.i386
yum install libX11.i386

yum whatprovides */libSM*
yum install libSM.i386
cd /usr/lib64
rm libSM.so -rf
ln -s ../lib/libSM.so.6 libSM.so

yum whatprovides */libICE*
yum install libICE-devel.i386

H 配置环境变量
export QPEDIR=$ARMQT/arm220/qtopia
export QTDIR=$ARMQT/arm220/qtopia
export QTDIR=$ARMQT/arm220/qt2
export LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib:$LD_LIBRARY_PATH
export TMAKEDIR=$ARMQT/arm220/tmake
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++

6>配置及编译qt, 最好配置是手敲的,网上考下来的容易少空格,配置错了又要重编划不来
echo 'yes'|./configure -qte "-embedded -xplatform linux-arm-g++ -qconfig qpe -no-qvfb -depths 16,24 -system-jpeg -system-libpng -system-zlib -gif -thread -no-xft -release -I$ARMQT/tools/include -L$ARMQT/tools/lib -lpng -lz -luuid -ljpeg" -qpe "-xplatform linux-arm-g++ -edition pda -displaysize 320x240 -I$ARMQT/tools/include -L$ARMQT/tools/lib -prefix=$ARMQT/qtopia"

make
make install

总算编出来了

2008年12月18日星期四

liboil编译选项

下载地址是http://liboil.freedesktop.org/download/

./configure --host=arm-linux --prefix=$PWD/install GLIB_CFLAGS=-I/home/gongh/test/gstreamer/glib-2.18.3/install/include/ GLIB_LIBS=-L/home/gongh/test/gstreamer/glib-2.18.3/install/lib/ CFLAGS="-I/home/gongh/test/gstreamer/glib-2.18.3/install/lib/glib-2.0/include -I/home/gongh/test/gstreamer/glib-2.18.3/install/include/glib-2.0" LDFLAGS=-L/home/gongh/test/gstreamer/glib-2.18.3/install/lib/ --disable-static --with-html-dir=/tmp/dump

开始用的是liboil0.3.15一直不能编译通过,错误是
arm-linux-gcc -DHAVE_CONFIG_H -I. -I. -I../.. -Wall -D_BSD_SOURCE -D_GNU_SOURCE -I../.. -DOIL_ENABLE_UNSTABLE_API -mfpu=vfp -I/home/gongh/test/gstreamer/glib-2.18.3/install/lib/glib-2.0/include -I/home/gongh/test/gstreamer/glib-2.18.3/install/include/glib-2.0 -MT libarm_la-math_vfp.lo -MD -MP -MF .deps/libarm_la-math_vfp.Tpo -c math_vfp.c -fPIC -DPIC -o .libs/libarm_la-math_vfp.o
cc1: error: invalid option `fpu=vfp'
make[3]: *** [libarm_la-math_vfp.lo] Error 1
make[3]: Leaving directory `/home/gongh/test/gstreamer/liboil-0.3.15/liboil/arm'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/gongh/test/gstreamer/liboil-0.3.15/liboil'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/gongh/test/gstreamer/liboil-0.3.15'
make: *** [all] Error 2

然后我换成了0.3.12版本居然过了。

但是0.3.12版本不能满足gstreamer 最低0.3.14要求。
再编译0.3.15,注释configure16617行,
#VFP_CFLAGS="$VFP_CFLAGS -mfpu=vfp"
这样是可以编译过,但这样会不会有什么问题?

gstreamer编译选项

另外下载了flex-2.5.35.tar.gz编译后替换了/usr/bin/flex,不然gstreamer-0.10.21配置检查flex版本过不了,即使修改configure中flex版本让老版本的去编译,也通过不了,确实还是需要高版本的flex才行

GLIB_CFLAGS=-I/home/gongh/test/gstreamer/glib-2.18.3/install/include/glib-2.0/ GLIB_LIBS=-L/home/gongh/test/gstreamer/glib-2.18.3/install/lib/ XML_LIBS=-L/home/gongh/test/gstreamer/libxml2-2.6.30/install/lib/ XML_CFLAGS=-I/home/gongh/test/gstreamer/libxml2-2.6.30/install/include/ ./configure --disable-nls --disable-static --enable-binary-registry --disable-loadsave --with-html-dir=/tmp/dump --prefix=$PWD/install --host=arm-linux LDFLAGS="-L/home/gongh/test/gstreamer/libxml2-2.6.30/install/lib/ -L/home/gongh/test/gstreamer/glib-2.18.3/install/lib/ -lglib-2.0 -lgio-2.0 -lgobject-2.0 -lgthread-2.0 -lgmodule-2.0" CFLAGS="-I/home/gongh/test/gstreamer/libxml2-2.6.30/install/include/ -I/home/gongh/test/gstreamer/glib-2.18.3/install/include/glib-2.0/ -I/home/gongh/test/gstreamer/glib-2.18.3/install/lib/glib-2.0/include" GLIB_ONLY_CFLAGS=-I/home/gongh/test/gstreamer/glib-2.18.3/install/include/glib-2.0/ GLIB_ONLY_LIBS=-L/home/gongh/test/gstreamer/glib-2.18.3/install/lib/

2008年12月17日星期三

交叉编译glib 2.18.3

现在版本是glib-2.18.3,编译器arm-linux 3.4.1

我用FC4编译的,有点老,在configure的时候说pkg-config版本太老了,至少要0.16版本的,而FC4是0.15版本,所以我把configure改了.新linux应该不用改吧
7600 if $PKG_CONFIG --atleast-pkgconfig-version 0.16 ; then
改成了
7600 if $PKG_CONFIG --atleast-pkgconfig-version 0.15 ; then

然后参考一篇很有用的howto
http://library.gnome.org/devel/glib/unstable/glib-cross-compiling.html
需要写一个cache文件arm.cache,且我在当前目录下建立了一个install文件夹,存放make install后的库等。配置是
./configure --cache-file=arm.cache --host=arm-linux --prefix=$PWD/install

编译时如果出现错误,就看错误是什么,根据howto添加,我编译时最少添加如下几项后就能配置通过,然后就编译通过了。以下是arm.cache的内容。
glib_cv_long_long_format=ll
glib_cv_stack_grows=no
glib_cv_uscore=no
ac_cv_func_posix_getpwuid_r=yes
ac_cv_func_posix_getgrgid_r=yes

当配置成功后arm.cache内容就变了

2008年12月11日星期四

MPlayer-1.0rc2编译选项

--target=arm-linux --prefix=install --cc=/usr/local/arm/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin/arm-softfloat-linux-gnu-gcc --enable-fbdev --disable-win32dll --disable-dvdread --disable-network --enable-menu --disable-ftp --disable-alsa --enable-ossaudio --disable-tv --disable-x11 --enable-cross-compile --target=arm-linux --host-cc=gcc --disable-armv5te --disable-armv6 --language=en --enable-debug

可以跑,不过mp3没声音,所以一会加个mad上去
加上了,要make clean后再make,不然链接有错误
./configure --target=arm-linux --prefix=install --cc=/usr/local/arm/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin/arm-softfloat-linux-gnu-gcc --enable-fbdev --disable-win32dll --disable-dvdread --disable-network --enable-menu --disable-ftp --disable-alsa --enable-ossaudio --disable-tv --disable-x11 --enable-cross-compile --target=arm-linux --host-cc=gcc --disable-armv5te --disable-armv6 --language=en --enable-debug --enable-mad --with-extraincdir=/home/gongh/test/libmad-0.15.1b/install/include --with-extralibdir=/home/gongh/test/libmad-0.15.1b/install/lib --disable-mp3lib

可以播mp3了

但是播放avi时还是会音视频不同步,加autosync后,视频虽然和音频打印同步了,但是其实CPU速度就是不够,声音还是走在视频前面