Those functions are only useful inside filters. It is better to not support user filters until the API is more stable.tags/n0.11
| @@ -487,18 +487,24 @@ int avfilter_default_query_formats(AVFilterContext *ctx); | |||
| */ | |||
| void avfilter_set_common_formats(AVFilterContext *ctx, AVFilterFormats *formats); | |||
| #if FF_API_FILTERS_PUBLIC | |||
| /** start_frame() handler for filters which simply pass video along */ | |||
| attribute_deprecated | |||
| void avfilter_null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref); | |||
| /** draw_slice() handler for filters which simply pass video along */ | |||
| attribute_deprecated | |||
| void avfilter_null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir); | |||
| /** end_frame() handler for filters which simply pass video along */ | |||
| attribute_deprecated | |||
| void avfilter_null_end_frame(AVFilterLink *link); | |||
| /** get_video_buffer() handler for filters which simply pass video along */ | |||
| attribute_deprecated | |||
| AVFilterBufferRef *avfilter_null_get_video_buffer(AVFilterLink *link, | |||
| int perms, int w, int h); | |||
| #endif | |||
| /** | |||
| * Filter definition. This defines the pads a filter contains, and all the | |||
| @@ -25,6 +25,7 @@ | |||
| #include "avfilter.h" | |||
| #include "audio.h" | |||
| #include "video.h" | |||
| static int split_init(AVFilterContext *ctx, const char *args, void *opaque) | |||
| { | |||
| @@ -100,7 +101,7 @@ AVFilter avfilter_vf_split = { | |||
| .inputs = (AVFilterPad[]) {{ .name = "default", | |||
| .type = AVMEDIA_TYPE_VIDEO, | |||
| .get_video_buffer= avfilter_null_get_video_buffer, | |||
| .get_video_buffer= ff_null_get_video_buffer, | |||
| .start_frame = start_frame, | |||
| .draw_slice = draw_slice, | |||
| .end_frame = end_frame, }, | |||
| @@ -25,6 +25,7 @@ | |||
| #include "libavutil/mathematics.h" | |||
| #include "avfilter.h" | |||
| #include "video.h" | |||
| typedef struct { | |||
| AVRational aspect; | |||
| @@ -100,9 +101,9 @@ AVFilter avfilter_vf_setdar = { | |||
| .inputs = (AVFilterPad[]) {{ .name = "default", | |||
| .type = AVMEDIA_TYPE_VIDEO, | |||
| .config_props = setdar_config_props, | |||
| .get_video_buffer = avfilter_null_get_video_buffer, | |||
| .get_video_buffer = ff_null_get_video_buffer, | |||
| .start_frame = start_frame, | |||
| .end_frame = avfilter_null_end_frame }, | |||
| .end_frame = ff_null_end_frame }, | |||
| { .name = NULL}}, | |||
| .outputs = (AVFilterPad[]) {{ .name = "default", | |||
| @@ -133,9 +134,9 @@ AVFilter avfilter_vf_setsar = { | |||
| .inputs = (AVFilterPad[]) {{ .name = "default", | |||
| .type = AVMEDIA_TYPE_VIDEO, | |||
| .config_props = setsar_config_props, | |||
| .get_video_buffer = avfilter_null_get_video_buffer, | |||
| .get_video_buffer = ff_null_get_video_buffer, | |||
| .start_frame = start_frame, | |||
| .end_frame = avfilter_null_end_frame }, | |||
| .end_frame = ff_null_end_frame }, | |||
| { .name = NULL}}, | |||
| .outputs = (AVFilterPad[]) {{ .name = "default", | |||
| @@ -28,6 +28,7 @@ | |||
| */ | |||
| #include "avfilter.h" | |||
| #include "video.h" | |||
| typedef struct { | |||
| unsigned int bamount; ///< black amount | |||
| @@ -118,8 +119,8 @@ AVFilter avfilter_vf_blackframe = { | |||
| .inputs = (AVFilterPad[]) {{ .name = "default", | |||
| .type = AVMEDIA_TYPE_VIDEO, | |||
| .draw_slice = draw_slice, | |||
| .get_video_buffer = avfilter_null_get_video_buffer, | |||
| .start_frame = avfilter_null_start_frame, | |||
| .get_video_buffer = ff_null_get_video_buffer, | |||
| .start_frame = ff_null_start_frame, | |||
| .end_frame = end_frame, }, | |||
| { .name = NULL}}, | |||
| @@ -22,6 +22,7 @@ | |||
| */ | |||
| #include "avfilter.h" | |||
| #include "video.h" | |||
| AVFilter avfilter_vf_copy = { | |||
| .name = "copy", | |||
| @@ -29,9 +30,9 @@ AVFilter avfilter_vf_copy = { | |||
| .inputs = (AVFilterPad[]) {{ .name = "default", | |||
| .type = AVMEDIA_TYPE_VIDEO, | |||
| .get_video_buffer = avfilter_null_get_video_buffer, | |||
| .start_frame = avfilter_null_start_frame, | |||
| .end_frame = avfilter_null_end_frame, | |||
| .get_video_buffer = ff_null_get_video_buffer, | |||
| .start_frame = ff_null_start_frame, | |||
| .end_frame = ff_null_end_frame, | |||
| .rej_perms = ~0 }, | |||
| { .name = NULL}}, | |||
| .outputs = (AVFilterPad[]) {{ .name = "default", | |||
| @@ -26,6 +26,7 @@ | |||
| /* #define DEBUG */ | |||
| #include "avfilter.h" | |||
| #include "video.h" | |||
| #include "libavutil/eval.h" | |||
| #include "libavutil/avstring.h" | |||
| #include "libavutil/libm.h" | |||
| @@ -333,7 +334,7 @@ AVFilter avfilter_vf_crop = { | |||
| .start_frame = start_frame, | |||
| .draw_slice = draw_slice, | |||
| .end_frame = end_frame, | |||
| .get_video_buffer = avfilter_null_get_video_buffer, | |||
| .get_video_buffer = ff_null_get_video_buffer, | |||
| .config_props = config_input, }, | |||
| { .name = NULL}}, | |||
| .outputs = (AVFilterPad[]) {{ .name = "default", | |||
| @@ -25,6 +25,7 @@ | |||
| #include "libavutil/imgutils.h" | |||
| #include "avfilter.h" | |||
| #include "video.h" | |||
| typedef struct { | |||
| int x1, y1, x2, y2; | |||
| @@ -203,8 +204,8 @@ AVFilter avfilter_vf_cropdetect = { | |||
| .inputs = (AVFilterPad[]) {{ .name = "default", | |||
| .type = AVMEDIA_TYPE_VIDEO, | |||
| .config_props = config_input, | |||
| .get_video_buffer = avfilter_null_get_video_buffer, | |||
| .start_frame = avfilter_null_start_frame, | |||
| .get_video_buffer = ff_null_get_video_buffer, | |||
| .start_frame = ff_null_start_frame, | |||
| .end_frame = end_frame, }, | |||
| { .name = NULL}}, | |||
| @@ -29,6 +29,7 @@ | |||
| #include "libavutil/opt.h" | |||
| #include "libavutil/pixdesc.h" | |||
| #include "avfilter.h" | |||
| #include "video.h" | |||
| /** | |||
| * Apply a simple delogo algorithm to the image in dst and put the | |||
| @@ -271,7 +272,7 @@ AVFilter avfilter_vf_delogo = { | |||
| .inputs = (AVFilterPad[]) {{ .name = "default", | |||
| .type = AVMEDIA_TYPE_VIDEO, | |||
| .get_video_buffer = avfilter_null_get_video_buffer, | |||
| .get_video_buffer = ff_null_get_video_buffer, | |||
| .start_frame = start_frame, | |||
| .draw_slice = null_draw_slice, | |||
| .end_frame = end_frame, | |||
| @@ -28,6 +28,7 @@ | |||
| #include "libavutil/pixdesc.h" | |||
| #include "libavutil/parseutils.h" | |||
| #include "avfilter.h" | |||
| #include "video.h" | |||
| enum { Y, U, V, A }; | |||
| @@ -130,10 +131,10 @@ AVFilter avfilter_vf_drawbox = { | |||
| .inputs = (AVFilterPad[]) {{ .name = "default", | |||
| .type = AVMEDIA_TYPE_VIDEO, | |||
| .config_props = config_input, | |||
| .get_video_buffer = avfilter_null_get_video_buffer, | |||
| .start_frame = avfilter_null_start_frame, | |||
| .get_video_buffer = ff_null_get_video_buffer, | |||
| .start_frame = ff_null_start_frame, | |||
| .draw_slice = draw_slice, | |||
| .end_frame = avfilter_null_end_frame, | |||
| .end_frame = ff_null_end_frame, | |||
| .min_perms = AV_PERM_WRITE | AV_PERM_READ, | |||
| .rej_perms = AV_PERM_PRESERVE }, | |||
| { .name = NULL}}, | |||
| @@ -41,6 +41,7 @@ | |||
| #include "libavutil/lfg.h" | |||
| #include "avfilter.h" | |||
| #include "drawutils.h" | |||
| #include "video.h" | |||
| #undef time | |||
| @@ -875,7 +876,7 @@ AVFilter avfilter_vf_drawtext = { | |||
| .inputs = (AVFilterPad[]) {{ .name = "default", | |||
| .type = AVMEDIA_TYPE_VIDEO, | |||
| .get_video_buffer = avfilter_null_get_video_buffer, | |||
| .get_video_buffer = ff_null_get_video_buffer, | |||
| .start_frame = start_frame, | |||
| .draw_slice = null_draw_slice, | |||
| .end_frame = end_frame, | |||
| @@ -27,6 +27,7 @@ | |||
| #include "libavutil/pixdesc.h" | |||
| #include "avfilter.h" | |||
| #include "video.h" | |||
| typedef struct { | |||
| int factor, fade_per_frame; | |||
| @@ -157,8 +158,8 @@ AVFilter avfilter_vf_fade = { | |||
| .inputs = (AVFilterPad[]) {{ .name = "default", | |||
| .type = AVMEDIA_TYPE_VIDEO, | |||
| .config_props = config_props, | |||
| .get_video_buffer = avfilter_null_get_video_buffer, | |||
| .start_frame = avfilter_null_start_frame, | |||
| .get_video_buffer = ff_null_get_video_buffer, | |||
| .start_frame = ff_null_start_frame, | |||
| .draw_slice = draw_slice, | |||
| .end_frame = end_frame, | |||
| .min_perms = AV_PERM_READ | AV_PERM_WRITE, | |||
| @@ -24,6 +24,7 @@ | |||
| */ | |||
| #include "avfilter.h" | |||
| #include "video.h" | |||
| typedef struct BufPic { | |||
| AVFilterBufferRef *picref; | |||
| @@ -106,7 +107,7 @@ AVFilter avfilter_vf_fifo = { | |||
| .inputs = (AVFilterPad[]) {{ .name = "default", | |||
| .type = AVMEDIA_TYPE_VIDEO, | |||
| .get_video_buffer= avfilter_null_get_video_buffer, | |||
| .get_video_buffer= ff_null_get_video_buffer, | |||
| .start_frame = start_frame, | |||
| .draw_slice = draw_slice, | |||
| .end_frame = end_frame, | |||
| @@ -25,6 +25,7 @@ | |||
| #include "libavutil/pixdesc.h" | |||
| #include "avfilter.h" | |||
| #include "video.h" | |||
| typedef struct { | |||
| /** | |||
| @@ -104,10 +105,10 @@ AVFilter avfilter_vf_format = { | |||
| .inputs = (AVFilterPad[]) {{ .name = "default", | |||
| .type = AVMEDIA_TYPE_VIDEO, | |||
| .get_video_buffer= avfilter_null_get_video_buffer, | |||
| .start_frame = avfilter_null_start_frame, | |||
| .draw_slice = avfilter_null_draw_slice, | |||
| .end_frame = avfilter_null_end_frame, }, | |||
| .get_video_buffer= ff_null_get_video_buffer, | |||
| .start_frame = ff_null_start_frame, | |||
| .draw_slice = ff_null_draw_slice, | |||
| .end_frame = ff_null_end_frame, }, | |||
| { .name = NULL}}, | |||
| .outputs = (AVFilterPad[]) {{ .name = "default", | |||
| .type = AVMEDIA_TYPE_VIDEO }, | |||
| @@ -134,10 +135,10 @@ AVFilter avfilter_vf_noformat = { | |||
| .inputs = (AVFilterPad[]) {{ .name = "default", | |||
| .type = AVMEDIA_TYPE_VIDEO, | |||
| .get_video_buffer= avfilter_null_get_video_buffer, | |||
| .start_frame = avfilter_null_start_frame, | |||
| .draw_slice = avfilter_null_draw_slice, | |||
| .end_frame = avfilter_null_end_frame, }, | |||
| .get_video_buffer= ff_null_get_video_buffer, | |||
| .start_frame = ff_null_start_frame, | |||
| .draw_slice = ff_null_draw_slice, | |||
| .end_frame = ff_null_end_frame, }, | |||
| { .name = NULL}}, | |||
| .outputs = (AVFilterPad[]) {{ .name = "default", | |||
| .type = AVMEDIA_TYPE_VIDEO }, | |||
| @@ -22,6 +22,7 @@ | |||
| */ | |||
| #include "avfilter.h" | |||
| #include "video.h" | |||
| AVFilter avfilter_vf_null = { | |||
| .name = "null", | |||
| @@ -31,9 +32,9 @@ AVFilter avfilter_vf_null = { | |||
| .inputs = (AVFilterPad[]) {{ .name = "default", | |||
| .type = AVMEDIA_TYPE_VIDEO, | |||
| .get_video_buffer = avfilter_null_get_video_buffer, | |||
| .start_frame = avfilter_null_start_frame, | |||
| .end_frame = avfilter_null_end_frame }, | |||
| .get_video_buffer = ff_null_get_video_buffer, | |||
| .start_frame = ff_null_start_frame, | |||
| .end_frame = ff_null_end_frame }, | |||
| { .name = NULL}}, | |||
| .outputs = (AVFilterPad[]) {{ .name = "default", | |||
| @@ -27,6 +27,7 @@ | |||
| #include "libavutil/fifo.h" | |||
| #include "libavutil/mathematics.h" | |||
| #include "avfilter.h" | |||
| #include "video.h" | |||
| static const char *const var_names[] = { | |||
| "E", ///< Euler number | |||
| @@ -339,7 +340,7 @@ AVFilter avfilter_vf_select = { | |||
| .inputs = (AVFilterPad[]) {{ .name = "default", | |||
| .type = AVMEDIA_TYPE_VIDEO, | |||
| .get_video_buffer = avfilter_null_get_video_buffer, | |||
| .get_video_buffer = ff_null_get_video_buffer, | |||
| .config_props = config_input, | |||
| .start_frame = start_frame, | |||
| .draw_slice = draw_slice, | |||
| @@ -29,6 +29,7 @@ | |||
| #include "libavutil/eval.h" | |||
| #include "libavutil/mathematics.h" | |||
| #include "avfilter.h" | |||
| #include "video.h" | |||
| static const char *const var_names[] = { | |||
| "E", ///< Euler number | |||
| @@ -148,7 +149,7 @@ AVFilter avfilter_vf_setpts = { | |||
| .inputs = (AVFilterPad[]) {{ .name = "default", | |||
| .type = AVMEDIA_TYPE_VIDEO, | |||
| .get_video_buffer = avfilter_null_get_video_buffer, | |||
| .get_video_buffer = ff_null_get_video_buffer, | |||
| .config_props = config_input, | |||
| .start_frame = start_frame, }, | |||
| { .name = NULL }}, | |||
| @@ -29,6 +29,7 @@ | |||
| #include "libavutil/rational.h" | |||
| #include "avfilter.h" | |||
| #include "internal.h" | |||
| #include "video.h" | |||
| static const char *const var_names[] = { | |||
| "E", | |||
| @@ -130,9 +131,9 @@ AVFilter avfilter_vf_settb = { | |||
| .inputs = (AVFilterPad[]) {{ .name = "default", | |||
| .type = AVMEDIA_TYPE_VIDEO, | |||
| .get_video_buffer = avfilter_null_get_video_buffer, | |||
| .get_video_buffer = ff_null_get_video_buffer, | |||
| .start_frame = start_frame, | |||
| .end_frame = avfilter_null_end_frame }, | |||
| .end_frame = ff_null_end_frame }, | |||
| { .name = NULL }}, | |||
| .outputs = (AVFilterPad[]) {{ .name = "default", | |||
| @@ -26,6 +26,7 @@ | |||
| #include "libavutil/imgutils.h" | |||
| #include "libavutil/pixdesc.h" | |||
| #include "avfilter.h" | |||
| #include "video.h" | |||
| typedef struct { | |||
| unsigned int frame; | |||
| @@ -86,8 +87,8 @@ AVFilter avfilter_vf_showinfo = { | |||
| .inputs = (AVFilterPad[]) {{ .name = "default", | |||
| .type = AVMEDIA_TYPE_VIDEO, | |||
| .get_video_buffer = avfilter_null_get_video_buffer, | |||
| .start_frame = avfilter_null_start_frame, | |||
| .get_video_buffer = ff_null_get_video_buffer, | |||
| .start_frame = ff_null_start_frame, | |||
| .end_frame = end_frame, | |||
| .min_perms = AV_PERM_READ, }, | |||
| { .name = NULL}}, | |||
| @@ -24,6 +24,7 @@ | |||
| */ | |||
| #include "avfilter.h" | |||
| #include "video.h" | |||
| #include "libavutil/pixdesc.h" | |||
| typedef struct { | |||
| @@ -105,11 +106,11 @@ AVFilter avfilter_vf_slicify = { | |||
| .inputs = (AVFilterPad[]) {{ .name = "default", | |||
| .type = AVMEDIA_TYPE_VIDEO, | |||
| .get_video_buffer = avfilter_null_get_video_buffer, | |||
| .get_video_buffer = ff_null_get_video_buffer, | |||
| .start_frame = start_frame, | |||
| .draw_slice = draw_slice, | |||
| .config_props = config_props, | |||
| .end_frame = avfilter_null_end_frame, }, | |||
| .end_frame = ff_null_end_frame, }, | |||
| { .name = NULL}}, | |||
| .outputs = (AVFilterPad[]) {{ .name = "default", | |||
| .type = AVMEDIA_TYPE_VIDEO, }, | |||
| @@ -65,7 +65,7 @@ static void ff_dlog_ref(void *ctx, AVFilterBufferRef *ref, int end) | |||
| av_dlog(ctx, "]%s", end ? "\n" : ""); | |||
| } | |||
| AVFilterBufferRef *avfilter_null_get_video_buffer(AVFilterLink *link, int perms, int w, int h) | |||
| AVFilterBufferRef *ff_null_get_video_buffer(AVFilterLink *link, int perms, int w, int h) | |||
| { | |||
| return avfilter_get_video_buffer(link->dst->outputs[0], perms, w, h); | |||
| } | |||
| @@ -160,7 +160,7 @@ AVFilterBufferRef *avfilter_get_video_buffer(AVFilterLink *link, int perms, int | |||
| return ret; | |||
| } | |||
| void avfilter_null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref) | |||
| void ff_null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref) | |||
| { | |||
| avfilter_start_frame(link->dst->outputs[0], picref); | |||
| } | |||
| @@ -211,7 +211,7 @@ void avfilter_start_frame(AVFilterLink *link, AVFilterBufferRef *picref) | |||
| start_frame(link, link->cur_buf); | |||
| } | |||
| void avfilter_null_end_frame(AVFilterLink *link) | |||
| void ff_null_end_frame(AVFilterLink *link) | |||
| { | |||
| avfilter_end_frame(link->dst->outputs[0]); | |||
| } | |||
| @@ -252,7 +252,7 @@ void avfilter_end_frame(AVFilterLink *link) | |||
| } | |||
| } | |||
| void avfilter_null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) | |||
| void ff_null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) | |||
| { | |||
| avfilter_draw_slice(link->dst->outputs[0], y, h, slice_dir); | |||
| } | |||
| @@ -326,4 +326,20 @@ void avfilter_default_draw_slice(AVFilterLink *inlink, int y, int h, int slice_d | |||
| { | |||
| default_draw_slice(inlink, y, h, slice_dir); | |||
| } | |||
| AVFilterBufferRef *avfilter_null_get_video_buffer(AVFilterLink *link, int perms, int w, int h) | |||
| { | |||
| return ff_null_get_video_buffer(link, perms, w, h); | |||
| } | |||
| void avfilter_null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref) | |||
| { | |||
| ff_null_start_frame(link, picref); | |||
| } | |||
| void avfilter_null_end_frame(AVFilterLink *link) | |||
| { | |||
| ff_null_end_frame(link); | |||
| } | |||
| void avfilter_null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) | |||
| { | |||
| ff_null_draw_slice(link, y, h, slice_dir); | |||
| } | |||
| #endif | |||
| @@ -21,4 +21,10 @@ | |||
| AVFilterBufferRef *ff_default_get_video_buffer(AVFilterLink *link, | |||
| int perms, int w, int h); | |||
| AVFilterBufferRef *ff_null_get_video_buffer(AVFilterLink *link, int perms, int w, int h); | |||
| void ff_null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref); | |||
| void ff_null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir); | |||
| void ff_null_end_frame(AVFilterLink *link); | |||
| #endif /* AVFILTER_VIDEO_H */ | |||