[FFmpeg-devel] [PATCH v2 1/2] lavc: consider an error during decoder draining as EOF
wm4
nfxjfg at googlemail.com
Mon Mar 6 12:09:54 EET 2017
On Thu, 2 Mar 2017 10:45:23 +0100
wm4 <nfxjfg at googlemail.com> wrote:
> There is no reason that draining couldn't return an error or two. But
> some decoders don't handle this very well, and might always return an
> error. This can lead to API users getting into an infinite loop and
> burning CPU, because no progress is made and EOF is never returned.
>
> In fact, ffmpeg.c contains a hack against such a case. It is removed
> with this patch. This particular error case seems to have been fixed
> since the hack was added, though.
>
> This might lose frames if decoding returns errors during draining.
> ---
> Minor lavc bump missing.
> ---
> libavcodec/utils.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/libavcodec/utils.c b/libavcodec/utils.c
> index 1156e43079..db3adb18d4 100644
> --- a/libavcodec/utils.c
> +++ b/libavcodec/utils.c
> @@ -2807,12 +2807,12 @@ static int do_decode(AVCodecContext *avctx, AVPacket *pkt)
> if (ret == AVERROR(EAGAIN))
> ret = pkt->size;
>
> - if (ret < 0)
> - return ret;
> -
> if (avctx->internal->draining && !got_frame)
> avctx->internal->draining_done = 1;
>
> + if (ret < 0)
> + return ret;
> +
> if (ret >= pkt->size) {
> av_packet_unref(avctx->internal->buffer_pkt);
> } else {
Both patches pushed, with some changes to the commit message of the
first one. Also I just noticed that I forgot the minor lavc bump, but I
guess it's not too important anyway.
More information about the ffmpeg-devel
mailing list