Commit 83a2ff41 authored by stefano's avatar stefano

Implement a new registration system for filters.

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.


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@20605 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent c8b1b340
...@@ -328,33 +328,36 @@ void avfilter_draw_slice(AVFilterLink *link, int y, int h) ...@@ -328,33 +328,36 @@ void avfilter_draw_slice(AVFilterLink *link, int y, int h)
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)
{ {
AVFilter *filter; int i;
for (filter = first_avfilter; filter; filter = filter->next) for (i = 0; registered_avfilters[i]; i++)
if (!strcmp(filter->name, name)) if (!strcmp(registered_avfilters[i]->name, name))
return filter; return registered_avfilters[i];
return NULL; return NULL;
} }
void avfilter_register(AVFilter *filter) int avfilter_register(AVFilter *filter)
{ {
AVFilter **p; if (next_registered_avfilter_idx == MAX_REGISTERED_AVFILTERS_NB)
p = &first_avfilter; return -1;
while (*p)
p = &(*p)->next;
*p = filter; registered_avfilters[next_registered_avfilter_idx++] = filter;
filter->next = NULL; return 0;
} }
void avfilter_uninit(void) void avfilter_uninit(void)
{ {
first_avfilter = NULL; 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)
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#include "libavutil/avutil.h" #include "libavutil/avutil.h"
#define LIBAVFILTER_VERSION_MAJOR 1 #define LIBAVFILTER_VERSION_MAJOR 1
#define LIBAVFILTER_VERSION_MINOR 8 #define LIBAVFILTER_VERSION_MINOR 9
#define LIBAVFILTER_VERSION_MICRO 0 #define LIBAVFILTER_VERSION_MICRO 0
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
...@@ -581,8 +581,10 @@ void avfilter_uninit(void); ...@@ -581,8 +581,10 @@ void avfilter_uninit(void);
* filter can still by instantiated with avfilter_open even if it is not * filter can still by instantiated with avfilter_open even if it is not
* registered. * registered.
* @param filter the filter to register * @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.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment