[FFmpeg-trac] #5610(undetermined:new): FFmpeg Libraries Seek Wildly On Opening W64-Format Files Via VIO

FFmpeg trac at avcodec.org
Thu Jun 2 22:52:15 CEST 2016


#5610: FFmpeg Libraries Seek Wildly On Opening W64-Format Files Via VIO
-------------------------------------+-------------------------------------
             Reporter:  mocmaint     |                     Type:  defect
               Status:  new          |                 Priority:  normal
            Component:               |                  Version:
  undetermined                       |  unspecified
             Keywords:  w64          |               Blocked By:
  regression                         |  Reproduced by developer:  0
             Blocking:               |
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
 I am testing the next patchset for the MOC player which adds the ability
 to feed FFmpeg's libav* libraries input via the callbacks registered using
 avio_alloc_context(). Some of those tests involve a variety of formats and
 codecs.

 When attempting to play a W64-format file, the application becomes
 unresponsive and GDB shows seeking patterns well outside the bounds of the
 files through repeated calls to the seek and read callbacks.

 As this is a library problem, there is no command line invocation of an
 FFmpeg utility, and those utilities do not appear to use callbacks via
 avio_alloc_context().

 There is no console output (obviously) and no messages are issued by the
 libraries (via the logging callback).

 The sequence of library calls (omitting error checking) is:

     AVFormatContext *ic = avformat_alloc_context();
     ic->pb = avio_alloc_context(...);
     avformat_open_input(ic, ...);

 avformat_open_input() never returns.

 The problem occurs on a W64-format file of any size, but a suitable test
 file can be generated with:

     sox -b16 -c2 -r48000 -n -L test.wav synth 10 sine 440 vol 0.5

 The problem was introduced in commit 14d50c19 in FFmpeg 1.1 and still
 exists in FFmpeg 3.0.2.

 It is possible that the error return values of the seek and read callbacks
 are incorrect, but they appear undocumented and do work in all other
 formats tested and also with the W64 format prior to commit 14d50c19 and
 with LibAV 11.6. The return values used by similar code found vary.

 Full FFmpeg configure originally used is:

     CFLAGS="-O2 -fPIC" ./configure --prefix=/usr/local/stow/$(basename
 $PWD) --libdir='${prefix}/lib64' --shlibdir='${prefix}/lib64' --enable-
 shared --disable-static --disable-yasm --enable-libspeex --enable-
 libtheora --enable-libopus

 '$PWD' was '/tmp/ffmpeg-14d50c19'.

 MOC is available using:

   svn co -r2872 svn://svn.daper.net/moc/trunk

 Aggregated patch for the patchset being tested is available using:

   wget
 ftp://ftp.daper.net/pub/soft/moc/unstable/moc-r2872+ffmpeg_memleak-1.patch.gz

 Apply to the SVN trunk revision 2872 using:

   zcat moc-r2872+ffmpeg_memleak-1.patch.gz | patch -p1

 The MOC FFmpeg decoder will be found in:

   decoder_plugins/ffmpeg

 Build as per instructions in README. After installing, delete all
 installed decoder plugins in 'lib{,64}/moc/decoder_plugins' *except*
 'libffmpeg_decoder.*'.

 Then launch MOC as 'mocp' in the directory containing W64 files.

--
Ticket URL: <https://trac.ffmpeg.org/ticket/5610>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list