From ebc8d974817fe456a0afe6867fdeb22c761fb04f Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sun, 8 Jul 2012 17:29:42 +0200 Subject: lavfi: add error handling to start_frame(). --- libavfilter/vf_select.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'libavfilter/vf_select.c') diff --git a/libavfilter/vf_select.c b/libavfilter/vf_select.c index 8f47b4144a..8b3a6f84a5 100644 --- a/libavfilter/vf_select.c +++ b/libavfilter/vf_select.c @@ -227,7 +227,7 @@ static int select_frame(AVFilterContext *ctx, AVFilterBufferRef *picref) return res; } -static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref) +static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref) { SelectContext *select = inlink->dst->priv; @@ -241,10 +241,12 @@ static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref) else av_fifo_generic_write(select->pending_frames, &picref, sizeof(picref), NULL); - return; + return 0; } - ff_start_frame(inlink->dst->outputs[0], avfilter_ref_buffer(picref, ~0)); + return ff_start_frame(inlink->dst->outputs[0], avfilter_ref_buffer(picref, ~0)); } + + return 0; } static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir) -- cgit v1.2.1 From e9b992d035b58209d66115bd7d964741dd31d592 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sat, 14 Jul 2012 09:25:33 +0200 Subject: lavfi: add error handling to draw_slice(). --- libavfilter/vf_select.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'libavfilter/vf_select.c') diff --git a/libavfilter/vf_select.c b/libavfilter/vf_select.c index 8b3a6f84a5..a4bb2dfe2b 100644 --- a/libavfilter/vf_select.c +++ b/libavfilter/vf_select.c @@ -249,12 +249,13 @@ static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref) return 0; } -static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir) +static int draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir) { SelectContext *select = inlink->dst->priv; if (select->select && !select->cache_frames) - ff_draw_slice(inlink->dst->outputs[0], y, h, slice_dir); + return ff_draw_slice(inlink->dst->outputs[0], y, h, slice_dir); + return 0; } static void end_frame(AVFilterLink *inlink) -- cgit v1.2.1 From d4f89906e3b310609b636cf6071313ec557ec873 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sat, 14 Jul 2012 09:25:33 +0200 Subject: lavfi: add error handling to end_frame(). --- libavfilter/vf_select.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'libavfilter/vf_select.c') diff --git a/libavfilter/vf_select.c b/libavfilter/vf_select.c index a4bb2dfe2b..b9e053fc03 100644 --- a/libavfilter/vf_select.c +++ b/libavfilter/vf_select.c @@ -258,15 +258,16 @@ static int draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir) return 0; } -static void end_frame(AVFilterLink *inlink) +static int end_frame(AVFilterLink *inlink) { SelectContext *select = inlink->dst->priv; if (select->select) { if (select->cache_frames) - return; - ff_end_frame(inlink->dst->outputs[0]); + return 0; + return ff_end_frame(inlink->dst->outputs[0]); } + return 0; } static int request_frame(AVFilterLink *outlink) -- cgit v1.2.1 From 3825b5268844694ff50a0e0bfde64df43a862fae Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sun, 15 Jul 2012 09:47:01 +0200 Subject: lavfi: check all ff_start_frame/draw_slice/end_frame calls for errors --- libavfilter/vf_select.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'libavfilter/vf_select.c') diff --git a/libavfilter/vf_select.c b/libavfilter/vf_select.c index b9e053fc03..d4cfbe9ceb 100644 --- a/libavfilter/vf_select.c +++ b/libavfilter/vf_select.c @@ -279,12 +279,15 @@ static int request_frame(AVFilterLink *outlink) if (av_fifo_size(select->pending_frames)) { AVFilterBufferRef *picref; + int ret; + av_fifo_generic_read(select->pending_frames, &picref, sizeof(picref), NULL); - ff_start_frame(outlink, avfilter_ref_buffer(picref, ~0)); - ff_draw_slice(outlink, 0, outlink->h, 1); - ff_end_frame(outlink); + if ((ret = ff_start_frame(outlink, avfilter_ref_buffer(picref, ~0))) < 0 || + (ret = ff_draw_slice(outlink, 0, outlink->h, 1)) < 0 || + (ret = ff_end_frame(outlink)) < 0); + avfilter_unref_buffer(picref); - return 0; + return ret; } while (!select->select) { -- cgit v1.2.1 From 80e4ed279b3abe9f5356e2b56255b2aa64527345 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sun, 15 Jul 2012 11:00:49 +0200 Subject: vf_select: avoid an unnecessary avfilter_ref_buffer(). --- libavfilter/vf_select.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'libavfilter/vf_select.c') diff --git a/libavfilter/vf_select.c b/libavfilter/vf_select.c index d4cfbe9ceb..b4a424e1d2 100644 --- a/libavfilter/vf_select.c +++ b/libavfilter/vf_select.c @@ -282,11 +282,10 @@ static int request_frame(AVFilterLink *outlink) int ret; av_fifo_generic_read(select->pending_frames, &picref, sizeof(picref), NULL); - if ((ret = ff_start_frame(outlink, avfilter_ref_buffer(picref, ~0))) < 0 || + if ((ret = ff_start_frame(outlink, picref)) < 0 || (ret = ff_draw_slice(outlink, 0, outlink->h, 1)) < 0 || (ret = ff_end_frame(outlink)) < 0); - avfilter_unref_buffer(picref); return ret; } -- cgit v1.2.1 From 1dc42050185d63c1de5d16146fbaee92640af187 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sun, 15 Jul 2012 11:16:53 +0200 Subject: lavfi: check all avfilter_ref_buffer() calls for errors. --- libavfilter/vf_select.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'libavfilter/vf_select.c') diff --git a/libavfilter/vf_select.c b/libavfilter/vf_select.c index b4a424e1d2..59030ebced 100644 --- a/libavfilter/vf_select.c +++ b/libavfilter/vf_select.c @@ -233,6 +233,7 @@ static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref) select->select = select_frame(inlink->dst, picref); if (select->select) { + AVFilterBufferRef *buf_out; /* frame was requested through poll_frame */ if (select->cache_frames) { if (!av_fifo_space(select->pending_frames)) @@ -243,7 +244,10 @@ static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref) sizeof(picref), NULL); return 0; } - return ff_start_frame(inlink->dst->outputs[0], avfilter_ref_buffer(picref, ~0)); + buf_out = avfilter_ref_buffer(picref, ~0); + if (!buf_out) + return AVERROR(ENOMEM); + return ff_start_frame(inlink->dst->outputs[0], buf_out); } return 0; -- cgit v1.2.1