return LIBAVFILTER_VERSION_INT;
}
-/** list of registered filters */
-static struct FilterList
+const char *avfilter_configuration(void)
{
- AVFilter *filter;
- struct FilterList *next;
-} *filters = NULL;
+ return FFMPEG_CONFIGURATION;
+}
+
+const char *avfilter_license(void)
+{
+#define LICENSE_PREFIX "libavfilter license: "
+ return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1;
+}
/** helper macros to get the in/out pad on the dst/src filter */
#define link_dpad(link) link->dst-> input_pads[link->dstpad]
static void dprintf_link(void *ctx, AVFilterLink *link, int end)
{
dprintf(ctx,
- "link[%p s:%dx%d %-16s->%-16s]%s",
+ "link[%p s:%dx%d fmt:%-16s %-16s->%-16s]%s",
link, link->w, link->h,
+ avcodec_get_pix_fmt_name(link->format),
link->src ? link->src->filter->name : "",
link->dst ? link->dst->filter->name : "",
end ? "\n" : "");
if(link_dpad(link).get_video_buffer)
ret = link_dpad(link).get_video_buffer(link, perms, w, h);
- if(!ret && link->dst->output_count)
- ret = avfilter_get_video_buffer(link->dst->outputs[0], perms, w, h);
-
if(!ret)
ret = avfilter_default_get_video_buffer(link, perms, w, h);
return link_spad(link).poll_frame(link);
for (i=0; i<link->src->input_count; i++) {
+ int val;
if(!link->src->inputs[i])
return -1;
- min = FFMIN(min, avfilter_poll_frame(link->src->inputs[i]));
+ val = avfilter_poll_frame(link->src->inputs[i]);
+ min = FFMIN(min, val);
}
return min;
}
-void avfilter_draw_slice(AVFilterLink *link, int y, int h)
+void avfilter_draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
{
uint8_t *src[4], *dst[4];
int i, j, hsub, vsub;
- void (*draw_slice)(AVFilterLink *, int, int);
+ void (*draw_slice)(AVFilterLink *, int, int, int);
- DPRINTF_START(NULL, draw_slice); dprintf_link(NULL, link, 0); dprintf(NULL, " y:%d h:%d\n", y, h);
+ DPRINTF_START(NULL, draw_slice); dprintf_link(NULL, link, 0); dprintf(NULL, " y:%d h:%d dir:%d\n", y, h, slice_dir);
/* copy the slice if needed for permission reasons */
if(link->srcpic) {
if(!(draw_slice = link_dpad(link).draw_slice))
draw_slice = avfilter_default_draw_slice;
- draw_slice(link, y, h);
+ draw_slice(link, y, h, slice_dir);
}
+#define MAX_REGISTERED_AVFILTERS_NB 64
+
+static AVFilter *registered_avfilters[MAX_REGISTERED_AVFILTERS_NB + 1];
+
+static int next_registered_avfilter_idx = 0;
+
AVFilter *avfilter_get_by_name(const char *name)
{
- struct FilterList *filt;
+ int i;
- for(filt = filters; filt; filt = filt->next)
- if(!strcmp(filt->filter->name, name))
- return filt->filter;
+ for (i = 0; registered_avfilters[i]; i++)
+ if (!strcmp(registered_avfilters[i]->name, name))
+ return registered_avfilters[i];
return NULL;
}
-void avfilter_register(AVFilter *filter)
+int avfilter_register(AVFilter *filter)
{
- struct FilterList *newfilt = av_malloc(sizeof(struct FilterList));
+ if (next_registered_avfilter_idx == MAX_REGISTERED_AVFILTERS_NB)
+ return -1;
- newfilt->filter = filter;
- newfilt->next = filters;
- filters = newfilt;
+ registered_avfilters[next_registered_avfilter_idx++] = filter;
+ return 0;
}
-void avfilter_uninit(void)
+AVFilter **av_filter_next(AVFilter **filter)
{
- struct FilterList *tmp;
+ return filter ? ++filter : ®istered_avfilters[0];
+}
- for(; filters; filters = tmp) {
- tmp = filters->next;
- av_free(filters);
- }
+void avfilter_uninit(void)
+{
+ memset(registered_avfilters, 0, sizeof(registered_avfilters));
+ next_registered_avfilter_idx = 0;
}
static int pad_count(const AVFilterPad *pads)