diff options
author | Anton Khirnov <anton@khirnov.net> | 2012-07-15 12:07:59 +0400 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2012-07-22 11:14:05 +0400 |
commit | 043800a96888f1a04732f12316ba477d8f098d3f (patch) | |
tree | a4bb4d46bca2f32c8dc8eb68f582c92a953d517e /libavfilter/vf_fps.c | |
parent | d515e9c2259dd825b167a94266efd5336a711702 (diff) |
vf_fps: add more error checks.
Diffstat (limited to 'libavfilter/vf_fps.c')
-rw-r--r-- | libavfilter/vf_fps.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/libavfilter/vf_fps.c b/libavfilter/vf_fps.c index bf140f8143..d95fef5993 100644 --- a/libavfilter/vf_fps.c +++ b/libavfilter/vf_fps.c @@ -184,7 +184,10 @@ static int end_frame(AVFilterLink *inlink) /* discard frames until we get the first timestamp */ if (s->pts == AV_NOPTS_VALUE) { if (buf->pts != AV_NOPTS_VALUE) { - write_to_fifo(s->fifo, buf); + ret = write_to_fifo(s->fifo, buf); + if (ret < 0) + return ret; + s->first_pts = s->pts = buf->pts; } else { av_log(ctx, AV_LOG_WARNING, "Discarding initial frame(s) with no " @@ -227,8 +230,20 @@ static int end_frame(AVFilterLink *inlink) /* duplicate the frame if needed */ if (!av_fifo_size(s->fifo) && i < delta - 1) { + AVFilterBufferRef *dup = avfilter_ref_buffer(buf_out, AV_PERM_READ); + av_log(ctx, AV_LOG_DEBUG, "Duplicating frame.\n"); - write_to_fifo(s->fifo, avfilter_ref_buffer(buf_out, AV_PERM_READ)); + if (dup) + ret = write_to_fifo(s->fifo, dup); + else + ret = AVERROR(ENOMEM); + + if (ret < 0) { + avfilter_unref_bufferp(&buf_out); + avfilter_unref_bufferp(&buf); + return ret; + } + s->dup++; } |