[FFmpeg-trac] #7787(documentation:new): Examples don't flush the decoder causing missing frames
FFmpeg
trac at avcodec.org
Tue Mar 12 16:49:23 EET 2019
#7787: Examples don't flush the decoder causing missing frames
-------------------------------------+-------------------------------------
Reporter: | Type: defect
MichelRouzic |
Status: new | Priority: normal
Component: | Version: git-
documentation | master
Keywords: examples | Blocked By:
docs decoding |
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
-------------------------------------+-------------------------------------
Summary of the bug: The examples in doc/examples don't use
av_read_frame()'s return properly which can cause them to fail to decode
the last few frames. In the case of transcoding.c breaking out of the loop
when av_read_frame() returns negative thus stopping further decoding is at
fault:
{{{
while (1) {
if ((ret = av_read_frame(ifmt_ctx, &packet)) < 0)
break;
}}}
The decoder should be flushed which isn't being done here. It seems that
all the examples are affected which is a serious problem for anyone (like
me) trying to learn from them as it doesn't show us how to decode a stream
properly.
How to reproduce:
After building the examples, using this video with numbered frames
https://photosounder.com/misc/drop_loop_300_frames_360p.mp4 as test input
and running this:
{{{
./transcoding.exe drop_loop_300_frames_360p.mp4 transcoded.mp4
}}}
we can see that there are two frames missing at the end of the output
video. Using the output video as input creates another video with two more
frames missing. I tried other input files like a 1080p YouTube MP4 and
ffprobe reported one frame missing in transcoding.c's transcoded video, so
this seems to be a pretty universal problem.
--
Ticket URL: <https://trac.ffmpeg.org/ticket/7787>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list