交叉编译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 gccBUT 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  -->  错误的代码140x4->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 


0 0
原创粉丝点击