diff --git a/libavfilter/vf_mp.c b/libavfilter/vf_mp.c index dbfac914ba..122cec75b3 100644 --- a/libavfilter/vf_mp.c +++ b/libavfilter/vf_mp.c @@ -589,10 +589,7 @@ int ff_vf_next_put_image(struct vf_instance *vf,mp_image_t *mpi, double pts){ if(pts != MP_NOPTS_VALUE) picref->pts= pts * av_q2d(outlink->time_base); - ff_start_frame(outlink, avfilter_ref_buffer(picref, ~0)); - ff_draw_slice(outlink, 0, picref->video->h, 1); - ff_end_frame(outlink); - avfilter_unref_buffer(picref); + ff_filter_frame(outlink, picref); m->frame_returned++; return 1; @@ -806,20 +803,9 @@ static int request_frame(AVFilterLink *outlink) return ret; } -static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref) -{ - return 0; -} - -static int null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) -{ - return 0; -} - -static int end_frame(AVFilterLink *inlink) +static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *inpic) { MPContext *m = inlink->dst->priv; - AVFilterBufferRef *inpic = inlink->cur_buf; int i; double pts= MP_NOPTS_VALUE; mp_image_t* mpi = ff_new_mp_image(inpic->video->w, inpic->video->h); @@ -841,6 +827,8 @@ static int end_frame(AVFilterLink *inlink) mpi->flags |= MP_IMGFLAG_PRESERVE; if(m->vf.put_image(&m->vf, mpi, pts) == 0){ av_log(m->avfctx, AV_LOG_DEBUG, "put_image() says skip\n"); + }else{ + avfilter_unref_buffer(inpic); } ff_free_mp_image(mpi); return 0; @@ -850,9 +838,7 @@ static const AVFilterPad mp_inputs[] = { { .name = "default", .type = AVMEDIA_TYPE_VIDEO, - .start_frame = start_frame, - .draw_slice = null_draw_slice, - .end_frame = end_frame, + .filter_frame = filter_frame, .config_props = config_inprops, .min_perms = AV_PERM_READ, },