[FFmpeg-cvslog] ffmpeg: always use single threaded decoding for attached pictures
Marton Balint
git at videolan.org
Sun Oct 8 23:37:58 EEST 2017
ffmpeg | branch: master | Marton Balint <cus at passwd.hu> | Fri Oct 6 21:49:09 2017 +0200| [41569bbc66d8971a1c5d369e5b335b3542f9cd26] | committer: Marton Balint
ffmpeg: always use single threaded decoding for attached pictures
Since af1761f7b5b1b72197dc40934953b775c2d951cc ffmpeg waits for a frame in each
stream before writing the output header. If we are using threaded decoding for
attached pictures, we have to read till EOF to be able to finally flush the
decoder and output the decoded frame. This essentially makes ffmpeg buffer all
non-attached picture packets, which will cause a "Too many packets buffered for
output stream" eventually.
By forcing single threaded decoding, we get a frame from a single packet as
well and we can avoid the error.
Fixes part of ticket #6375:
ffmpeg -i 46564100.mp3 -acodec libmp3lame -ab 128k -ac 2 out.mp3
Reviewed-by: Hendrik Leppkes <h.leppkes at gmail.com>
Signed-off-by: Marton Balint <cus at passwd.hu>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=41569bbc66d8971a1c5d369e5b335b3542f9cd26
---
fftools/ffmpeg.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c
index 1d248bc269..6d64bc1043 100644
--- a/fftools/ffmpeg.c
+++ b/fftools/ffmpeg.c
@@ -2909,6 +2909,9 @@ static int init_input_stream(int ist_index, char *error, int error_len)
if (!av_dict_get(ist->decoder_opts, "threads", NULL, 0))
av_dict_set(&ist->decoder_opts, "threads", "auto", 0);
+ /* Attached pics are sparse, therefore we would not want to delay their decoding till EOF. */
+ if (ist->st->disposition & AV_DISPOSITION_ATTACHED_PIC)
+ av_dict_set(&ist->decoder_opts, "threads", "1", 0);
ret = hw_device_setup_for_decode(ist);
if (ret < 0) {
More information about the ffmpeg-cvslog
mailing list