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
267267 return min;
268268 }
269269
270−#define MAX_REGISTERED_AVFILTERS_NB 64
271−
272−static AVFilter *registered_avfilters[MAX_REGISTERED_AVFILTERS_NB + 1];
273−
274−static int next_registered_avfilter_idx = 0;
270+static AVFilter *first_filter;
275271
276272 AVFilter *avfilter_get_by_name(const char *name)
277273 {
278− int i;
274+ AVFilter *f = NULL;
279275
280− for (i = 0; registered_avfilters[i]; i++)
281− if (!strcmp(registered_avfilters[i]->name, name))
282− return registered_avfilters[i];
276+ while ((f = avfilter_next(f)))
277+ if (!strcmp(f->name, name))
278+ return f;
283279
284280 return NULL;
285281 }
286282
287283 int avfilter_register(AVFilter *filter)
288284 {
289− if (next_registered_avfilter_idx == MAX_REGISTERED_AVFILTERS_NB)
290− return -1;
291−
292− registered_avfilters[next_registered_avfilter_idx++] = filter;
285+ AVFilter **f = &first_filter;
286+ while (*f)
287+ f = &(*f)->next;
288+ *f = filter;
289+ filter->next = NULL;
293290 return 0;
294291 }
295292
293+const AVFilter *avfilter_next(const AVFilter *prev)
294+{
295+ return prev ? prev->next : first_filter;
296+}
297+
298+#if FF_API_OLD_FILTER_REGISTER
296299 AVFilter **av_filter_next(AVFilter **filter)
297300 {
298− return filter ? ++filter : &registered_avfilters[0];
301+ return filter ? &(*filter)->next : &first_filter;
299302 }
300303
301304 void avfilter_uninit(void)
302305 {
303− memset(registered_avfilters, 0, sizeof(registered_avfilters));
304− next_registered_avfilter_idx = 0;
305306 }
307+#endif
306308
307309 int avfilter_pad_count(const AVFilterPad *pads)
308310 {
@@ -331,15 +333,15 @@ static void *filter_child_next(void *obj, void *prev) · 22 unmodified lines
331333
332334 static const AVClass *filter_child_class_next(const AVClass *prev)
333335 {
334− AVFilter **f = NULL;
336+ AVFilter *f = NULL;
335337
336− while (prev && *(f = av_filter_next(f)))
337− if ((*f)->priv_class == prev)
338+ while (prev && (f = avfilter_next(f)))
339+ if (f->priv_class == prev)
338340 break;
339341
340− while (*(f = av_filter_next(f)))
341− if ((*f)->priv_class)
342− return (*f)->priv_class;
342+ while ((f = avfilter_next(f)))
343+ if (f->priv_class)
344+ return f->priv_class;
343345
344346 return NULL;
345347 }

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