X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Fvf_crop.c;h=4d3a7f355ac8f74e491f0d6b72caf93920f84851;hb=b2bc48ae22969256334988238f284c78e73c89e4;hp=915806bdaa4f084cb3d6f67b087b2b0ea64a8772;hpb=56ae5926f739bd26a5aa4add98604b7cd3c2d6ca;p=ffmpeg diff --git a/libavfilter/vf_crop.c b/libavfilter/vf_crop.c index 915806bdaa4..4d3a7f355ac 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,16 +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; - avfilter_unref_buffer(link->cur_buf); - ff_end_frame(link->dst->outputs[0]); + return ff_end_frame(link->dst->outputs[0]); } AVFilter avfilter_vf_crop = { @@ -350,16 +352,16 @@ AVFilter avfilter_vf_crop = { .init = init, .uninit = uninit, - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .start_frame = start_frame, - .draw_slice = draw_slice, - .end_frame = end_frame, - .get_video_buffer = ff_null_get_video_buffer, - .config_props = config_input, }, - { .name = NULL}}, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .config_props = config_output, }, - { .name = NULL}}, + .inputs = (const AVFilterPad[]) {{ .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .start_frame = start_frame, + .draw_slice = draw_slice, + .end_frame = end_frame, + .get_video_buffer = ff_null_get_video_buffer, + .config_props = config_input, }, + { .name = NULL}}, + .outputs = (const AVFilterPad[]) {{ .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .config_props = config_output, }, + { .name = NULL}}, };