[FFmpeg-trac] #7331(avcodec:new): malformed input not playable in libfdk_aacdec

FFmpeg trac at avcodec.org
Fri Jul 27 19:12:09 EEST 2018


#7331: malformed input not playable in libfdk_aacdec
---------------------------------+----------------------------------
             Reporter:  ramcq    |                     Type:  defect
               Status:  new      |                 Priority:  normal
            Component:  avcodec  |                  Version:  3.2.4
             Keywords:           |               Blocked By:
             Blocking:           |  Reproduced by developer:  0
Analyzed by developer:  0        |
---------------------------------+----------------------------------
 Summary of the bug:

 The attached .m4a file (sourced from youtube-dl -g
 "http://www.youtube.com/watch?v=reeQ3Nsjti0") does not play in ffplay
 using the libfdk_aacdec decoder in ffplay. However, GStreamer using
 libfdk-aac is able to play the same file without error.

 How to reproduce:
 {{{
 % ramcq at upsilon:~$ ffplay sample.m4a
 ffplay version 3.2.10-1~deb9u1endless1beos3.4.1 Copyright (c) 2003-2018
 the FFmpeg developers
   built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1endless1bem1) 20170516
   configuration: --prefix=/usr --extra-version='1~deb9u1endless1beos3.4.1'
 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu
 --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --enable-nonfree
 --disable-stripping --disable-doc --disable-everything --disable-ffserver
 --enable-encoder='ac3,mp2' --enable-
 decoder='pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw' --enable-
 decoder='pcm_u8,pcm_s16le,pcm_s24le,pcm_f32le' --enable-
 decoder='theora,vorbis,vp8,vp9,mp2,mp3,ac3,libfdk_aac' --enable-
 parser='opus,vp3,vorbis,vp8,mpegaudio,aac,ac3' --enable-
 demuxer='ogg,matroska,wav,mp3,aac,ac3,m4a' --enable-protocol=file
 --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa
 --enable-libass --enable-libbluray --enable-libcaca --enable-libcdio
 --enable-libfdk-aac --enable-libflite --enable-libfontconfig --enable-
 libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-
 libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse
 --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh
 --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx
 --enable-libwavpack --enable-libwebp --enable-libzvbi --enable-openal
 --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883
 --enable-frei0r --enable-libopencv --enable-shared
   WARNING: library configuration mismatch
   avcodec     configuration: --prefix=/usr --extra-
 version='1~deb9u1endless1beos3.4.1' --toolchain=hardened
 --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu
 --enable-gpl --enable-nonfree --disable-stripping --disable-doc --disable-
 everything --disable-ffserver --enable-encoder='ac3,mp2' --enable-
 decoder='pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw' --enable-
 decoder='pcm_u8,pcm_s16le,pcm_s24le,pcm_f32le' --enable-
 decoder='theora,vorbis,vp8,vp9,mp2,mp3,ac3,libfdk_aac' --enable-
 parser='opus,vp3,vorbis,vp8,mpegaudio,aac,ac3' --enable-
 demuxer='ogg,matroska,wav,mp3,aac,ac3,m4a' --enable-protocol=file
 --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa
 --enable-libass --enable-libbluray --enable-libcaca --enable-libcdio
 --enable-libfdk-aac --enable-libflite --enable-libfontconfig --enable-
 libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-
 libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse
 --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh
 --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx
 --enable-libwavpack --enable-libwebp --enable-libzvbi --enable-openal
 --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883
 --enable-frei0r --enable-libopencv --enable-shared --disable-doc
 --disable-programs --enable-decoder='h264,h263,mpeg4' --enable-
 hwaccel='h264_vaapi,h264_vdpau' --enable-parser='h264,mpeg4video'
 --enable-demuxer='h264,mov,m4v'
   libavutil      55. 34.101 / 55. 34.101
   libavcodec     57. 64.101 / 57. 64.101
   libavformat    57. 56.101 / 57. 56.101
   libavdevice    57.  1.100 / 57.  1.100
   libavfilter     6. 65.100 /  6. 65.100
   libavresample   3.  1.  0 /  3.  1.  0
   libswscale      4.  2.100 /  4.  2.100
   libswresample   2.  3.100 /  2.  3.100
   libpostproc    54.  1.100 / 54.  1.100
 sample.m4a: Invalid data found when processing input
     nan    :  0.000 fd=   0 aq=    0KB vq=    0KB sq=    0B f=0/0
 }}}

 Given the file is clearly slightly corrupted, I believe the difference
 between GStreamer and libavcodec's handling of fdk-aac is whether
 AAC_DEC_TRANSPORT_SYNC_ERROR is considered fatal or not. GStreamer handles
 it as can be seen here https://cgit.freedesktop.org/gstreamer/gst-plugins-
 bad/tree/ext/fdkaac/gstfdkaacdec.c#n214 whereas FFmpeg does not, per
 https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/libfdk-
 aacdec.c#L332. The documented correct handling of
 AAC_DEC_TRANSPORT_SYNC_ERROR is to continue inputting buffers to the
 decoder, per https://github.com/esrlabs/fdk-
 aac/blob/master/libAACdec/include/aacdecoder_lib.h#L362.

 This is also reproducible in a much newer version of ffmpeg embedded into
 the Chromium browser (which we have patched to use libfdk-aac) but the
 problem is reproducible outside of the Chromium media pipeline.

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


More information about the FFmpeg-trac mailing list