History

lavfi: change the filter registering system to match the other libraries

Removes an arbitrary hardcoded limit on the number of filters.

Anton Khirnov committed 13 years ago

Commit fa2a34c1 parent 7e8fe4b7 files · +48 −29Browse files

Showing the changes to libavfilter/avfilter.c (1 of 7 files). Show all

Unified · Split

libavfilter/avfilter.c+24−22
@@ -267,42 +267,44 @@ int ff_poll_frame(AVFilterLink *link) · 266 unmodified lines
267 return min;267 return min;
268}268}
269 269
270#define MAX_REGISTERED_AVFILTERS_NB 64270static AVFilter *first_filter;
271
272static AVFilter *registered_avfilters[MAX_REGISTERED_AVFILTERS_NB + 1];
273
274static int next_registered_avfilter_idx = 0;
275 271
276AVFilter *avfilter_get_by_name(const char *name)272AVFilter *avfilter_get_by_name(const char *name)
277{273{
278 int i;274 AVFilter *f = NULL;
279 275
280 for (i = 0; registered_avfilters[i]; i++)276 while ((f = avfilter_next(f)))
281 if (!strcmp(registered_avfilters[i]->name, name))277 if (!strcmp(f->name, name))
282 return registered_avfilters[i];278 return f;
283 279
284 return NULL;280 return NULL;
285}281}
286 282
287int avfilter_register(AVFilter *filter)283int avfilter_register(AVFilter *filter)
288{284{
289 if (next_registered_avfilter_idx == MAX_REGISTERED_AVFILTERS_NB)285 AVFilter **f = &first_filter;
290 return -1;286 while (*f)
291 287 f = &(*f)->next;
292 registered_avfilters[next_registered_avfilter_idx++] = filter;288 *f = filter;
289 filter->next = NULL;
293 return 0;290 return 0;
294}291}
295 292
293const AVFilter *avfilter_next(const AVFilter *prev)
294{
295 return prev ? prev->next : first_filter;
296}
297
298#if FF_API_OLD_FILTER_REGISTER
296AVFilter **av_filter_next(AVFilter **filter)299AVFilter **av_filter_next(AVFilter **filter)
297{300{
298 return filter ? ++filter : &registered_avfilters[0];301 return filter ? &(*filter)->next : &first_filter;
299}302}
300 303
301void avfilter_uninit(void)304void avfilter_uninit(void)
302{305{
303 memset(registered_avfilters, 0, sizeof(registered_avfilters));
304 next_registered_avfilter_idx = 0;
305}306}
307#endif
306 308
307int avfilter_pad_count(const AVFilterPad *pads)309int avfilter_pad_count(const AVFilterPad *pads)
308{310{
@@ -331,15 +333,15 @@ static void *filter_child_next(void *obj, void *prev) · 22 unmodified lines
331 333
332static const AVClass *filter_child_class_next(const AVClass *prev)334static const AVClass *filter_child_class_next(const AVClass *prev)
333{335{
334 AVFilter **f = NULL;336 AVFilter *f = NULL;
335 337
336 while (prev && *(f = av_filter_next(f)))338 while (prev && (f = avfilter_next(f)))
337 if ((*f)->priv_class == prev)339 if (f->priv_class == prev)
338 break;340 break;
339 341
340 while (*(f = av_filter_next(f)))342 while ((f = avfilter_next(f)))
341 if ((*f)->priv_class)343 if (f->priv_class)
342 return (*f)->priv_class;344 return f->priv_class;
343 345
344 return NULL;346 return NULL;
345}347}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t