diff options
Diffstat (limited to 'libavfilter/vf_crop.c')
-rw-r--r-- | libavfilter/vf_crop.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/libavfilter/vf_crop.c b/libavfilter/vf_crop.c index f9e17573a4..4d3a7f355a 100644 --- a/libavfilter/vf_crop.c +++ b/libavfilter/vf_crop.c @@ -259,7 +259,7 @@ static int config_output(AVFilterLink *link) return 0; } -static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref) +static int start_frame(AVFilterLink *link, AVFilterBufferRef *picref) { AVFilterContext *ctx = link->dst; CropContext *crop = ctx->priv; @@ -267,6 +267,9 @@ static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref) int i; ref2 = avfilter_ref_buffer(picref, ~0); + if (!ref2) + return AVERROR(ENOMEM); + ref2->video->w = crop->w; ref2->video->h = crop->h; @@ -310,16 +313,16 @@ static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref) ref2->data[3] += crop->x * crop->max_step[3]; } - ff_start_frame(link->dst->outputs[0], ref2); + return ff_start_frame(link->dst->outputs[0], ref2); } -static void draw_slice(AVFilterLink *link, int y, int h, int slice_dir) +static int draw_slice(AVFilterLink *link, int y, int h, int slice_dir) { AVFilterContext *ctx = link->dst; CropContext *crop = ctx->priv; if (y >= crop->y + crop->h || y + h <= crop->y) - return; + return 0; if (y < crop->y) { h -= crop->y - y; @@ -328,15 +331,15 @@ static void draw_slice(AVFilterLink *link, int y, int h, int slice_dir) if (y + h > crop->y + crop->h) h = crop->y + crop->h - y; - ff_draw_slice(ctx->outputs[0], y - crop->y, h, slice_dir); + return ff_draw_slice(ctx->outputs[0], y - crop->y, h, slice_dir); } -static void end_frame(AVFilterLink *link) +static int end_frame(AVFilterLink *link) { CropContext *crop = link->dst->priv; crop->var_values[VAR_N] += 1.0; - ff_end_frame(link->dst->outputs[0]); + return ff_end_frame(link->dst->outputs[0]); } AVFilter avfilter_vf_crop = { |