summaryrefslogtreecommitdiff
path: root/libavfilter
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2012-07-15 10:07:59 +0200
committerAnton Khirnov <anton@khirnov.net>2012-07-22 09:14:05 +0200
commit043800a96888f1a04732f12316ba477d8f098d3f (patch)
treea4bb4d46bca2f32c8dc8eb68f582c92a953d517e /libavfilter
parentd515e9c2259dd825b167a94266efd5336a711702 (diff)
downloadffmpeg-043800a96888f1a04732f12316ba477d8f098d3f.tar.gz
vf_fps: add more error checks.
Diffstat (limited to 'libavfilter')
-rw-r--r--libavfilter/vf_fps.c19
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++;
}