Create a new static array containing pointers to the AVFilter
definitions, so that the non-constant next filter in the AVFilter
struct is not anymore required and the AVFilter definitions may be
stored in shareable memory.
Also change the signature for avfilter_register(), make it return an
int since it may fail if there is not enough space in the static array
for the registered filters.
Originally committed as revision 20605 to svn://svn.ffmpeg.org/ffmpeg/trunk
draw_slice(link, y, h);
}
draw_slice(link, y, h);
}
-AVFilter *first_avfilter = NULL;
+#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)
{
AVFilter *avfilter_get_by_name(const char *name)
{
- for (filter = first_avfilter; filter; filter = filter->next)
- if (!strcmp(filter->name, name))
- return filter;
+ for (i = 0; registered_avfilters[i]; i++)
+ if (!strcmp(registered_avfilters[i]->name, name))
+ return registered_avfilters[i];
-void avfilter_register(AVFilter *filter)
+int avfilter_register(AVFilter *filter)
- AVFilter **p;
- p = &first_avfilter;
- while (*p)
- p = &(*p)->next;
+ if (next_registered_avfilter_idx == MAX_REGISTERED_AVFILTERS_NB)
+ return -1;
- *p = filter;
- filter->next = NULL;
+ registered_avfilters[next_registered_avfilter_idx++] = filter;
+ return 0;
}
void avfilter_uninit(void)
{
}
void avfilter_uninit(void)
{
+ memset(registered_avfilters, 0, sizeof(registered_avfilters));
+ next_registered_avfilter_idx = 0;
}
static int pad_count(const AVFilterPad *pads)
}
static int pad_count(const AVFilterPad *pads)
#include "libavutil/avutil.h"
#define LIBAVFILTER_VERSION_MAJOR 1
#include "libavutil/avutil.h"
#define LIBAVFILTER_VERSION_MAJOR 1
-#define LIBAVFILTER_VERSION_MINOR 8
+#define LIBAVFILTER_VERSION_MINOR 9
#define LIBAVFILTER_VERSION_MICRO 0
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
#define LIBAVFILTER_VERSION_MICRO 0
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
* filter can still by instantiated with avfilter_open even if it is not
* registered.
* @param filter the filter to register
* filter can still by instantiated with avfilter_open even if it is not
* registered.
* @param filter the filter to register
+ * @return 0 if the registration was succesfull, a negative value
+ * otherwise
-void avfilter_register(AVFilter *filter);
+int avfilter_register(AVFilter *filter);
/**
* Gets a filter definition matching the given name.
/**
* Gets a filter definition matching the given name.