diff options
author | Anton Khirnov <anton@khirnov.net> | 2012-11-28 23:27:21 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-11-28 23:47:01 +0100 |
commit | 9a65b8c0a221fb5206b7680ee729e8e7355ff301 (patch) | |
tree | 9572143b13ce80b62e49f4e7269421df54c2a890 | |
parent | 2d9d4440519f22c092ac37ccd1a1a914564d00b5 (diff) | |
download | ffmpeg-9a65b8c0a221fb5206b7680ee729e8e7355ff301.tar.gz |
vf_fade: switch to filter_frame
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavfilter/vf_fade.c | 33 |
1 files changed, 10 insertions, 23 deletions
diff --git a/libavfilter/vf_fade.c b/libavfilter/vf_fade.c index f1e7c6e958..5be0ec144a 100644 --- a/libavfilter/vf_fade.c +++ b/libavfilter/vf_fade.c @@ -216,10 +216,9 @@ static void fade_plane(int y, int h, int w, } } -static int draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir) +static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *frame) { FadeContext *fade = inlink->dst->priv; - AVFilterBufferRef *outpic = inlink->cur_buf; uint8_t *p; int i, j, plane; @@ -228,22 +227,22 @@ static int draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir) // alpha only plane = fade->is_packed_rgb ? 0 : A; // alpha is on plane 0 for packed formats // or plane 3 for planar formats - fade_plane(y, h, inlink->w, + fade_plane(0, frame->video->h, inlink->w, fade->factor, fade->black_level, fade->black_level_scaled, fade->is_packed_rgb ? fade->rgba_map[A] : 0, // alpha offset for packed formats fade->is_packed_rgb ? 4 : 1, // pixstep for 8 bit packed formats - 1, outpic->data[plane], outpic->linesize[plane]); + 1, frame->data[plane], frame->linesize[plane]); } else { /* luma or rgb plane */ - fade_plane(y, h, inlink->w, + fade_plane(0, frame->video->h, inlink->w, fade->factor, fade->black_level, fade->black_level_scaled, 0, 1, // offset & pixstep for Y plane or RGB packed format - fade->bpp, outpic->data[0], outpic->linesize[0]); - if (outpic->data[1] && outpic->data[2]) { + fade->bpp, frame->data[0], frame->linesize[0]); + if (frame->data[1] && frame->data[2]) { /* chroma planes */ for (plane = 1; plane < 3; plane++) { - for (i = 0; i < h; i++) { - p = outpic->data[plane] + ((y+i) >> fade->vsub) * outpic->linesize[plane]; + for (i = 0; i < frame->video->h; i++) { + p = frame->data[plane] + (i >> fade->vsub) * frame->linesize[plane]; for (j = 0; j < inlink->w >> fade->hsub; j++) { /* 8421367 = ((128 << 1) + 1) << 15. It is an integer * representation of 128.5. The .5 is for rounding @@ -257,23 +256,13 @@ static int draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir) } } - return ff_draw_slice(inlink->dst->outputs[0], y, h, slice_dir); -} - -static int end_frame(AVFilterLink *inlink) -{ - FadeContext *fade = inlink->dst->priv; - int ret; - - ret = ff_end_frame(inlink->dst->outputs[0]); - if (fade->frame_index >= fade->start_frame && fade->frame_index <= fade->stop_frame) fade->factor += fade->fade_per_frame; fade->factor = av_clip_uint16(fade->factor); fade->frame_index++; - return ret; + return ff_filter_frame(inlink->dst->outputs[0], frame); } static const AVFilterPad avfilter_vf_fade_inputs[] = { @@ -282,9 +271,7 @@ static const AVFilterPad avfilter_vf_fade_inputs[] = { .type = AVMEDIA_TYPE_VIDEO, .config_props = config_props, .get_video_buffer = ff_null_get_video_buffer, - .start_frame = ff_null_start_frame, - .draw_slice = draw_slice, - .end_frame = end_frame, + .filter_frame = filter_frame, .min_perms = AV_PERM_READ | AV_PERM_WRITE, }, { NULL } |