[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