GNOME Bugzilla – Bug 310945
gst-ffmpeg plugin-"ffdemux_mov_mp4_m4a_3gp" read mov files error on ARM platform
Last modified: 2006-05-02 13:32:07 UTC
Dear all, I develop gstreamer software ,use gst-ffmpeg-0.8.4 ,running on ARM platform and find a problem. when play mov files , for example, gst-launch filesrc location=/mnt/nfs/dragonballv_default.mp4 ! ffdemux_mov_mp4 _m4a_3gp will report errors that said read mov header error. I traced in source code and find reasons: in gst-libs/ext/ffmpeg/libavformat/utils.c function av_open_input_stream() err = ic->iformat->read_header(ic, ap); this line will return error. In fact ,it calls mov_read_header. in mov.c function mov_read_header() first call atom.size = url_filesize(url_fileno (pb)); url_filesize will call seek functions in ext/ffmpeg/gstffmpegprotocol.c Although the return value is ok and return current file pointer is OK , Next seek, the return data are error :The return data are 32kbytes offset from file header ! You know ,in aviobuf.c ,the buffer size is 32k bytes so I doubt it is realtive with the buffer operation. gst_bytestream_seek return new pos are OK ,but the data read from file are error ! 32k bytes offset ! But all of these are all OK in X86 system ,only on ARM ,decode mov format files I found this error !
Don't spam the bots please. :). Does this work fine on x86?
Also, does ffplay (gst-ffmpeg/gst-libs/ext/ffmpeg/ffplay) play it correctly on ARM? If not, it's an ffmpeg bug and you probably want to look there. Setting to NEEDINFO until I have answers to the above questions.
The problem only occurs on ARM platform when you try to play mov/mp4 files and on X86 all of them are Ok .On ARM ,when you play mpeg-1 files ,is ok too. I checked versions earlier ,and found in gst-plugin-0.6 ,you found a error in plugin qtdemux ,and fix it for gst_bytestream_seek return error . Is it realtive with my errors? I use gst-ffmpeg-0.8.4, gstreamer-0.8.10 ,gst-plugins-0.8 I disable ffplay options when compile.
Enable ffplay and try that to test... I'd like to know whether this is an ARM/ffmpeg or an ARM/GStreamer bug. :).
OK , I disable ffplay for I don't use X11 system on ARM . Now ,I enable ffplay and ffplay mp4 files are right on ARM platform. Following are the DEBUG outputs of ffplay /mnt/nfs/xx.mp4 av probe input file!/mnt/nfs/dragonballv_default.mp4 call mov header !filesz=12215804 parse: default: tag=NULL offset=0x0 size=0xba65fc |parse: unknown: tag=ftyp offset=0x8 size=0x8 |parse: leaf: tag=udta offset=0x18 size=0x176 |parse: mdat: tag=mdat offset=0x196 size=0x1a |parse: mdat: tag=mdat offset=0x1b8 size=0xa |parse: mdat: tag=mdat offset=0x1ca size=0xb9d218 |parse: moov: tag=moov offset=0xb9d3ea size=0x9212 |parse: default: tag=moov offset=0xb9d3ea size=0x9212 ||parse: mvhd: tag=mvhd offset=0xb9d3f2 size=0x64 time scale = 1000 ||parse: leaf: tag=udta offset=0xb9d45e size=0x18 ||parse: leaf: tag=iods offset=0xb9d47e size=0x19 ||parse: trak: tag=trak offset=0xb9d49f size=0x8e14 ||parse: default: tag=trak offset=0xb9d49f size=0x8e14 |||parse: leaf: tag=udta offset=0xb9d4a7 size=0x30 |||parse: tkhd: tag=tkhd offset=0xb9d4df size=0x54 |||parse: default: tag=edts offset=0xb9d53b size=0x28 ||||parse: elst: tag=elst offset=0xb9d543 size=0x20 track[0].edit_count = 2 |||parse: default: tag=mdia offset=0xb9d56b size=0x8d48 ||||parse: mdhd: tag=mdhd offset=0xb9d573 size=0x18 track[0].time_scale = 1000 ||||parse: hdlr: tag=hdlr offset=0xb9d593 size=0x25 ctype= (0x00000000) stype= vide hdlr: vide ||||parse: default: tag=minf offset=0xb9d5c0 size=0x8cf3 |||||parse: leaf: tag=vmhd offset=0xb9d5c8 size=0xc |||||parse: default: tag=dinf offset=0xb9d5dc size=0x1c ||||||parse: leaf: tag=dref offset=0xb9d5e4 size=0x14 |||||parse: default: tag=stbl offset=0xb9d600 size=0x8cb3 ||||||parse: stts: tag=stts offset=0xb9d608 size=0x31e8 and compared with the "gst-launch filesrc location=/mnt/nfs/xx.mp4 ! ffdemux_mov_mp4_m4a_3gp_3g2", the outputs are av probe input file!gstreamer://0x157a38 call mov header ! default: tag=NULL offset=0x0 size=0xba65fc unknown: tag=€8$?offset=0x8 size=0x418410ff mov: header not found !!! (err:0, moov:0, mdat:0) pos:1099174151 ERROR: from element /pipeline0/ffdemux_mov_mp4_m4a_3gp_3g20: GStreamer encounter ed a general supporting library error. Additional debug info: gstffmpegdemux.c(551): gst_ffmpegdemux_open: /pipeline0/ffdemux_mov_mp4_m4a_3gp_ 3g20: Unknown error Caught SIGSEGV accessing address (nil) Spinning. Please run 'gdb gst-launch 58' to continue debugging, Ctrl-C to quit, or Ctrl-\ to dump core. Please help me to point out the errors , thanks
P.S. The version I use is gst-ffmpeg-0.8.5 . It seems that the parse function of the ffplay is right but gst-launch is error on ARM :)
Some comments, I checked gst-plugins-0.8.8 , under directory gst/qtdemux/ in qtdemux.c ,function gst_qtdemux_loop_header ,the codes are: /* don't believe bytestream */ //cur_offset = gst_bytestream_tell (qtdemux->bs); cur_offset = qtdemux->offset; Why not use bytestream ? Is bytestream lib error here ?
No. Those comments are erronous.
This is very unlikely to get fixed in the old 0.8 series. Please file a new bug report or re-open this one if this still happens with GStreamer-0.10 gst-ffmpeg (CVS).