交叉编译ffmpeg--修改bug
来源:互联网 发布:lol连接失败请检查网络 编辑:程序博客网 时间:2024/05/16 04:43
[root@DeebugFedoraPC ffmpeg-0.4.9-p20051120]# vi configure
108 # default parameters
109 prefix="/usr/local/arm/4.3.2/arm-none-linux-gnueabi"
110 libdir=""
111 mandir=""
112 bindir=""
113 cross_prefix="/usr/local/arm/4.3.2/bin/arm-linux-"
114 cc="gcc"
115 ar="ar"
116 ranlib="ranlib"
117 make="make"
118 strip="strip"
119 #cpu=`uname -m`
120 cpu="arm"
121 tune="generic"
122 powerpc_perf="no"
123 mmx="default"
124 iwmmxt="default"
125 altivec="default"
126 mmi="default"
127 case "$cpu" in
[root@DeebugFedoraPC ffmpeg-0.4.9-p20051120]# ./configure --cpu=arm --cc=arm-linux-gcc --enable-shared --disable-ffserver --enable-xvid --enable-x264 --enable-gpl --enable-pthreads --disable-strip
install prefix /usr/local/arm/4.3.2/arm-none-linux-gnueabi
source path /root/opencv/ffmpeg-0.4.9-p20051120
C compiler /usr/local/arm/4.3.2/bin/arm-linux-arm-linux-gcc
make make
CPU arm (generic)
big-endian no
inttypes.h no
broken inttypes.h yes
gprof enabled no
zlib enabled no
libgsm enabled no
mp3lame enabled no
libogg enabled no
Vorbis enabled no
Theora enabled no
FAAD enabled no
faadbin enabled no
FAAC enabled no
XviD enabled yes
x264 enabled yes
a52 support no
a52 dlopened no
DTS support no
pp support no
debug symbols yes
strip symbols no
optimize yes
shared pp no
video hooking no
SDL support no
Sun medialib support no
pthreads support yes
AMR-NB float support no
AMR-NB fixed support no
AMR-WB float support no
AMR-WB IF2 support no
network support yes
IPv6 support no
License: GPL
Creating config.mak and config.h...
[root@DeebugFedoraPC ffmpeg-0.4.9-p20051120]#
终于出错1啦!
[root@DeebugFedoraPC ffmpeg-0.4.9-p20051120]# make
make -C libavutil all
make[1]: Entering directory `/root/opencv/ffmpeg-0.4.9-p20051120/libavutil'
/usr/local/arm/4.3.2/bin/arm-linux-arm-linux-gcc -O3 -g -DHAVE_AV_CONFIG_H -I.. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -c -o mathematics.o mathematics.c
make[1]: /usr/local/arm/4.3.2/bin/arm-linux-arm-linux-gcc:命令未找到
make[1]: *** [mathematics.o] 错误 127
make[1]: Leaving directory `/root/opencv/ffmpeg-0.4.9-p20051120/libavutil'
make: *** [lib] 错误 2
[root@DeebugFedoraPC ffmpeg-0.4.9-p20051120]# vi configure
113 #cross_prefix="/usr/local/arm/4.3.2/bin/arm-linux-"
114 cross_prefix="/usr/local/arm/4.3.2/bin/"
[root@DeebugFedoraPC ffmpeg-0.4.9-p20051120]# ./configure --cpu=arm --cc=arm-linux-gcc --enable-shared --disable-ffserver --enable-xvid --enable-x264 --enable-gpl --enable-pthreads --disable-strip
......
[root@DeebugFedoraPC ffmpeg-0.4.9-p20051120]# make
make -C libavutil all
make[1]: Entering directory `/root/opencv/ffmpeg-0.4.9-p20051120/libavutil'
/usr/local/arm/4.3.2/bin/arm-linux-gcc -O3 -g -Wall -Wno-switch -DHAVE_AV_CONFIG_H -I.. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -c -o mathematics.o mathematics.c
/usr/local/arm/4.3.2/bin/arm-linux-gcc -O3 -g -Wall -Wno-switch -DHAVE_AV_CONFIG_H -I.. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -c -o integer.o integer.c
/usr/local/arm/4.3.2/bin/arm-linux-gcc -O3 -g -Wall -Wno-switch -DHAVE_AV_CONFIG_H -I.. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -c -o rational.o rational.c
/usr/local/arm/4.3.2/bin/arm-linux-gcc -O3 -g -Wall -Wno-switch -DHAVE_AV_CONFIG_H -I.. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -c -o intfloat_readwrite.o intfloat_readwrite.c
rm -f libavutil.a
/usr/local/arm/4.3.2/bin/ar rc libavutil.a mathematics.o integer.o rational.o intfloat_readwrite.o
make[1]: /usr/local/arm/4.3.2/bin/ar:命令未找到
make[1]: *** [libavutil.a] 错误 127
make[1]: Leaving directory `/root/opencv/ffmpeg-0.4.9-p20051120/libavutil'
make: *** [lib] 错误 2
[root@DeebugFedoraPC ffmpeg-0.4.9-p20051120]#
?????
SOLVED gcc,BUT ar出问题,貌似要改全局。。。
./configure不指定--cc=arm-linux-gcc 治标不治本。。。
[root@DeebugFedoraPC ffmpeg-0.4.9-p20051120]# vi configure
113 cross_prefix="/usr/local/arm/4.3.2/bin/arm-linux-"
114 #cross_prefix="/usr/local/arm/4.3.2/bin/"
[root@DeebugFedoraPC ffmpeg-0.4.9-p20051120]# ./configure --cpu=arm --enable-shared --disable-ffserver --enable-xvid --enable-x264 --enable-gpl --enable-pthreads --disable-strip
install prefix /usr/local/arm/4.3.2/arm-none-linux-gnueabi
source path /root/opencv/ffmpeg-0.4.9-p20051120
C compiler /usr/local/arm/4.3.2/bin/arm-linux-gcc
make make
CPU arm (generic)
big-endian no
inttypes.h yes
broken inttypes.h no
gprof enabled no
zlib enabled yes
libgsm enabled no
mp3lame enabled no
libogg enabled no
Vorbis enabled no
Theora enabled no
FAAD enabled no
faadbin enabled no
FAAC enabled no
XviD enabled yes
x264 enabled yes
a52 support no
a52 dlopened no
DTS support no
pp support no
debug symbols yes
strip symbols no
optimize yes
shared pp no
video hooking yes
SDL support no
Imlib2 support no
FreeType support no
Sun medialib support no
pthreads support yes
AMR-NB float support no
AMR-NB fixed support no
AMR-WB float support no
AMR-WB IF2 support no
network support yes
IPv6 support yes
License: GPL
Creating config.mak and config.h...
[root@DeebugFedoraPC ffmpeg-0.4.9-p20051120]#
出错2啦!
[root@DeebugFedoraPC ffmpeg-0.4.9-p20051120]# make
......
/usr/local/arm/4.3.2/bin/arm-linux-gcc -O3 -g -Wall -Wno-switch -DHAVE_AV_CONFIG_H -I.. -I'/root/opencv/ffmpeg-0.4.9-p20051120'/libavutil -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -c -o x264.o x264.c
x264.c: In function 'X264_init':
x264.c:140: error: 'struct <anonymous>' has no member named 'b_cbr'
make[1]: *** [x264.o] 错误 1
make[1]: Leaving directory `/root/opencv/ffmpeg-0.4.9-p20051120/libavcodec'
make: *** [lib] 错误 2
Solution 1
X264的版本太老了,使用新版本的试试
http://bbs.chinaunix.net/thread-925112-1-1.html
可以解决!
Solution 2
这是因为一些函数引起GCC走到一个编译死循环,只用把-O3改为-O2就能够编译通过
http://www.docin.com/p-456739440.html
[root@DeebugFedoraPC ffmpeg-0.4.9-p20051120]# vi Makefile
1 #
2 # Main ffmpeg Makefile
3 # (c) 2000-2004 Fabrice Bellard
4 #
5 include config.mak
6
7 VPATH=:$(SRC_PATH)
8
9 #CFLAGS=$(OPTFLAGS) -I. -I$(SRC_PATH) -I$(SRC_PATH)/libavutil -I$(SRC_PA TH)/libavcodec -I$(SRC_PATH)/libavformat -D_FILE_OFFSET_BITS=64 -D_LARGE FILE_SOURCE -D_GNU_SOURCE
10 CFLAGS=$(OPTFLAGS) -I. -I$(SRC_PATH) -I$(SRC_PATH)/libavutil -I$(SRC_PAT H)/libavcodec -I$(SRC_PATH)/libavformat -D_FILE_OFFSET_BITS=64 -D_LARGEF ILE_SOURCE -D_GNU_SOURCE -O2
11 LDFLAGS+= -g
行不通!!!
Solution 3
http://blog.chinaunix.net/uid-21139058-id-446619.html
受启发了,修改代码,一直跟踪。。。终于解决了。
--> x264.c --> 错误的代码140行x4->params.rc.b_cbr = 1; <-- X264Context *x4 <--
24 typedef struct X264Context {
25 x264_param_t params;
26 x264_t *enc;
27 x264_picture_t pic;
28 AVFrame out_pic;
29 } X264Context;
x264_param_t --> #include <x264.h>路径:/usr/local/arm/4.3.2/arm-none-linux-gnueabi/include/x264.h
-->
typedef struct
{
/* CPU flags */
unsigned int cpu;
int i_threads; /* divide each frame into multiple slices, encode in parallel */
...
struct
{
int i_rc_method; /* X264_RC_* */
int i_qp_constant; /* 0-51 */
int i_qp_min; /* min allowed QP value */
int i_qp_max; /* max allowed QP value */
int i_qp_step; /* max QP step between frames */
int i_bitrate;
int i_rf_constant; /* 1pass VBR, nominal QP */
float f_rate_tolerance;
int i_vbv_max_bitrate;
int i_vbv_buffer_size;
float f_vbv_buffer_init;
float f_ip_factor;
float f_pb_factor;
/* 2pass */
int b_stat_write; /* Enable stat writing in psz_stat_out */
char *psz_stat_out;
int b_stat_read; /* Read stat from psz_stat_in and use it */
char *psz_stat_in;
/* 2pass params (same as ffmpeg ones) */
char *psz_rc_eq; /* 2 pass rate control equation */
float f_qcompress; /* 0.0 => cbr, 1.0 => constant qp */
float f_qblur; /* temporally blur quants */
float f_complexity_blur; /* temporally blur complexity */
x264_zone_t *zones; /* ratecontrol overrides */
int i_zones; /* sumber of zone_t's */
char *psz_zones; /* alternate method of specifying zones */
} rc;
/* Muxing parameters */
int b_aud; /* generate access unit delimiters */
int b_repeat_headers; /* put SPS/PPS before each keyframe */
int i_sps_id; /* SPS and PPS id number */
} x264_param_t;
[root@DeebugFedoraPC libavcodec]# vi x264.c
126 X264_init(AVCodecContext *avctx)
127 {
128 X264Context *x4 = avctx->priv_data;
129
130 x264_param_default(&x4->params);
131
132 x4->params.pf_log = X264_log;
133 x4->params.p_log_private = avctx;
134
135 x4->params.i_keyint_max = avctx->gop_size;
136 x4->params.rc.i_bitrate = avctx->bit_rate / 1000;
137 x4->params.rc.i_vbv_buffer_size = avctx->rc_buffer_size / 1000;
138 x4->params.rc.i_vbv_max_bitrate = avctx->rc_max_rate / 1000;
139 if(avctx->rc_buffer_size)
140 x4->params.rc.b_stat_read = 1; /* x4->params.rc.b_cbr = 1;*/
// 源码对照http://ffmpeg.org/pipermail/ffmpeg-cvslog/2011-August/039499.html
141 x4->params.i_bframe = avctx->max_b_frames;
142 x4->params.b_cabac = avctx->coder_type == FF_CODER_TYPE_AC;
[root@DeebugFedoraPC libavcodec]# make
/usr/local/arm/4.3.2/bin/arm-linux-gcc -O3 -g -Wall -Wno-switch -DHAVE_AV_CONFIG_H -I.. -I'/root/opencv/ffmpeg-0.4.9-p20051120'/libavutil -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -c -o x264.o x264.c
rm -f libavcodec.a
/usr/local/arm/4.3.2/bin/arm-linux-ar rc libavcodec.a bitstream.o utils.o mem.o allcodecs.o mpegvideo.o jrevdct.o jfdctfst.o jfdctint.o mpegaudio.o ac3enc.o mjpeg.o resample.o resample2.o dsputil.o motion_est.o imgconvert.o imgresample.o mpeg12.o mpegaudiodec.o pcm.o simple_idct.o ratecontrol.o adpcm.o eval.o error_resilience.o fft.o mdct.o raw.o golomb.o cabac.o dpcm.o adx.o faandct.o parser.o g726.o vp3dsp.o h264idct.o rangecoder.o pnm.o h263.o msmpeg4.o h263dec.o dvdsub.o dvbsub.o dvbsubdec.o dvdsubenc.o opt.o aasc.o alac.o asv1.o cinepak.o cljr.o cyuv.o dv.o 8bps.o ffv1.o flac.o flicvideo.o 4xm.o fraps.o h261.o h264.o huffyuv.o idcinvideo.o indeo2.o indeo3.o interplayvideo.o lcl.o loco.o mace.o msrle.o msvideo1.o png.o qdm2.o qdrw.o qpeg.o qtrle.o ra144.o ra288.o roqvideo.o rpza.o rv10.o shorten.o smc.o snow.o sonic.o svq1.o truemotion1.o truemotion2.o tscc.o ulti.o vc9.o vcr1.o vmdav.o vorbis.o vp3.o vqavideo.o wmadec.o wnv1.o ws-snd1.o xan.o xl.o pthread.o xvidff.o x264.o
/usr/local/arm/4.3.2/bin/arm-linux-ranlib libavcodec.a
/usr/local/arm/4.3.2/bin/arm-linux-gcc -shared -Wl,--warn-common -rdynamic -o libavcodec.so bitstream.o utils.o mem.o allcodecs.o mpegvideo.o jrevdct.o jfdctfst.o jfdctint.o mpegaudio.o ac3enc.o mjpeg.o resample.o resample2.o dsputil.o motion_est.o imgconvert.o imgresample.o mpeg12.o mpegaudiodec.o pcm.o simple_idct.o ratecontrol.o adpcm.o eval.o error_resilience.o fft.o mdct.o raw.o golomb.o cabac.o dpcm.o adx.o faandct.o parser.o g726.o vp3dsp.o h264idct.o rangecoder.o pnm.o h263.o msmpeg4.o h263dec.o dvdsub.o dvbsub.o dvbsubdec.o dvdsubenc.o opt.o aasc.o alac.o asv1.o cinepak.o cljr.o cyuv.o dv.o 8bps.o ffv1.o flac.o flicvideo.o 4xm.o fraps.o h261.o h264.o huffyuv.o idcinvideo.o indeo2.o indeo3.o interplayvideo.o lcl.o loco.o mace.o msrle.o msvideo1.o png.o qdm2.o qdrw.o qpeg.o qtrle.o ra144.o ra288.o roqvideo.o rpza.o rv10.o shorten.o smc.o snow.o sonic.o svq1.o truemotion1.o truemotion2.o tscc.o ulti.o vc9.o vcr1.o vmdav.o vorbis.o vp3.o vqavideo.o wmadec.o wnv1.o ws-snd1.o xan.o xl.o pthread.o xvidff.o x264.o -lm -lxvidcore -lx264 -lz -ldl -lpthread -L../libavutil -lavutil
[root@DeebugFedoraPC libavcodec]#
[root@DeebugFedoraPC libavcodec]# make install
mkdir -p "/usr/local/arm/4.3.2/arm-none-linux-gnueabi/include/ffmpeg"
install -m 644 '/root/opencv/ffmpeg-0.4.9-p20051120'/libavcodec/avcodec.h \
"/usr/local/arm/4.3.2/arm-none-linux-gnueabi/include/ffmpeg"
install -d "/usr/local/arm/4.3.2/arm-none-linux-gnueabi/lib/pkgconfig"
install -m 644 ../libavcodec.pc "/usr/local/arm/4.3.2/arm-none-linux-gnueabi/lib/pkgconfig"
install -d /usr/local/arm/4.3.2/arm-none-linux-gnueabi/lib
install -m 755 libavcodec.so /usr/local/arm/4.3.2/arm-none-linux-gnueabi/lib/libavcodec-CVS.so
ln -sf libavcodec-CVS.so /usr/local/arm/4.3.2/arm-none-linux-gnueabi/lib/libavcodec.so
ldconfig || true
[root@DeebugFedoraPC libavcodec]#
这里可以在交叉编译链目录/usr/local/arm/4.3.2/arm-none-linux-gnueabi/的
include,lib下生成相应的头文件和库文件
[root@DeebugFedoraPC libavcodec]# ls /usr/local/arm/4.3.2/arm-none-linux-gnueabi/lib
armv4t libjpeg.la libx264.a libyasm.a
boards libjpeg.so libx264.so pkgconfig
ldscripts libjpeg.so.62 libx264.so.49 thumb2
libavcodec-CVS.so libjpeg.so.62.0.0 libxvidcore.a
libavcodec.so libsupc++.a libxvidcore.so.4.1
[root@DeebugFedoraPC libavcodec]#
[root@DeebugFedoraPC libavcodec]# ls /usr/local/arm/4.3.2/arm-none-linux-gnueabi/include/
c++ jconfig.h jmorecfg.h libyasm libyasm-stdint.h xvid.h
ffmpeg jerror.h jpeglib.h libyasm.h x264.h
[root@DeebugFedoraPC libavcodec]#
deebug
20140225
ccnu
- 交叉编译ffmpeg--修改bug
- 交叉编译ffmpeg心得
- ffmpeg交叉编译
- 交叉编译ffmpeg
- 交叉编译 ffmpeg x264
- 交叉编译 ffmpeg x264
- NDK交叉编译ffmpeg
- ffmpeg交叉编译指南
- NDK交叉编译ffmpeg
- 交叉编译 ffmpeg
- ffmpeg交叉编译
- ffmpeg交叉编译
- Opencv+ffmpeg 交叉编译
- ffmpeg-0.5交叉编译
- havlenapetr,ffmpeg 播放器 编译、以及bug修改
- ffmpeg,live555,mplayer交叉编译
- libx264、ffmpeg、SDL交叉编译
- Linux下ffmpeg交叉编译
- Linux epoll详解
- HDU2647 Reward 【拓扑排序】
- http://download.csdn.net/detail/mzzandlss/5652331
- 通透彻底理解BFS和DFS优先搜索算法
- sed
- 交叉编译ffmpeg--修改bug
- android xml解析 XmlPullParser的使用
- Android FM模块学习之四源码解析(四)
- vi 替换
- 理解HashSet及使用
- 第十七周项目4-日期结构体(1 本日为本年第几天?)
- HTTP_WebImageView类(自定义封装下载图片类)
- 基于嵌入式SoC单片机C8051F120的雕刻机数控系统
- 求质数算法的N种境界[1] - 试除法和初级筛法