diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c index 0f834b3f43..bc3a6db104 100644 --- a/libavfilter/avfilter.c +++ b/libavfilter/avfilter.c @@ -31,70 +31,6 @@ static int filter_count = 0; static AVFilter **filters = NULL; -/* TODO: buffer pool. see comment for avfilter_default_get_video_buffer() */ -void avfilter_default_free_video_buffer(AVFilterPic *pic) -{ - avpicture_free((AVPicture *) pic); - av_free(pic); -} - -/* TODO: set the buffer's priv member to a context structure for the whole - * filter chain. This will allow for a buffer pool instead of the constant - * alloc & free cycle currently implemented. */ -AVFilterPicRef *avfilter_default_get_video_buffer(AVFilterLink *link, int perms) -{ - AVFilterPic *pic = av_mallocz(sizeof(AVFilterPic)); - AVFilterPicRef *ref = av_mallocz(sizeof(AVFilterPicRef)); - - ref->pic = pic; - ref->w = link->w; - ref->h = link->h; - ref->perms = perms; - - pic->refcount = 1; - pic->format = link->format; - pic->free = avfilter_default_free_video_buffer; - avpicture_alloc((AVPicture *)pic, pic->format, ref->w, ref->h); - - memcpy(ref->data, pic->data, sizeof(pic->data)); - memcpy(ref->linesize, pic->linesize, sizeof(pic->linesize)); - - return ref; -} - -void avfilter_default_start_frame(AVFilterLink *link, AVFilterPicRef *picref) -{ - AVFilterLink *out = NULL; - - if(link->dst->output_count) - out = link->dst->outputs[0]; - - link->cur_pic = picref; - - if(out) { - out->outpic = avfilter_get_video_buffer(out, AV_PERM_WRITE); - out->outpic->pts = picref->pts; - avfilter_start_frame(out, avfilter_ref_pic(out->outpic, ~0)); - } -} - -void avfilter_default_end_frame(AVFilterLink *link) -{ - AVFilterLink *out = NULL; - - if(link->dst->output_count) - out = link->dst->outputs[0]; - - avfilter_unref_pic(link->cur_pic); - link->cur_pic = NULL; - - if(out) { - avfilter_unref_pic(out->outpic); - out->outpic = NULL; - avfilter_end_frame(out); - } -} - AVFilterPicRef *avfilter_ref_pic(AVFilterPicRef *ref, int pmask) { AVFilterPicRef *ret = av_malloc(sizeof(AVFilterPicRef)); @@ -111,37 +47,6 @@ void avfilter_unref_pic(AVFilterPicRef *ref) av_free(ref); } -/** - * default config_link() implementation for output video links to simplify - * the implementation of one input one output video filters */ -static int default_config_output_link(AVFilterLink *link) -{ - if(link->src->input_count && link->src->inputs[0]) { - link->w = link->src->inputs[0]->w; - link->h = link->src->inputs[0]->h; - } else { - /* XXX: any non-simple filter which would cause this branch to be taken - * really should implement its own config_props() for this link. */ - link->w = - link->h = 0; - } - - return 0; -} - -/** - * default query_formats() implementation for output video links to simplify - * the implementation of one input one output video filters */ -static int *default_query_output_formats(AVFilterLink *link) -{ - if(link->src->input_count && link->src->inputs[0]) - return avfilter_make_format_list(1, link->src->inputs[0]->format); - else - /* XXX: any non-simple filter which would cause this branch to be taken - * really should implement its own query_formats() for this link */ - return avfilter_make_format_list(0); -} - int avfilter_link(AVFilterContext *src, unsigned srcpad, AVFilterContext *dst, unsigned dstpad) { @@ -166,7 +71,7 @@ int avfilter_link(AVFilterContext *src, unsigned srcpad, if(src->output_pads[srcpad].query_formats) fmts[0] = src->output_pads[srcpad].query_formats(link); else - fmts[0] = default_query_output_formats(link); + fmts[0] = avfilter_default_query_output_formats(link); fmts[1] = dst->input_pads[dstpad].query_formats(link); for(i = 0; fmts[0][i] != -1; i ++) for(j = 0; fmts[1][j] != -1; j ++) @@ -189,7 +94,7 @@ format_done: if (src->output_pads[srcpad].config_props) src->output_pads[srcpad].config_props(link); else - default_config_output_link(link); + avfilter_default_config_output_link(link); if (dst->input_pads[dstpad].config_props) dst->input_pads[dstpad].config_props(link);