History

Merge commit 'fa2a34cd40d124161c748bb0f430dc63c94dd0da'

* commit 'fa2a34cd40d124161c748bb0f430dc63c94dd0da': lavfi: change the filter registering system to match the other libraries Conflicts: cmdutils.c ffplay.c libavfilter/avfilter.c libavfilter/avfilter.h This removes the ability to put AVFilters in read only memory and having them shareable.

Michael Niedermayer committed 13 years ago

Commit 835cc0f2 parents f4db6bf fa2a34c7 files · +52 −34Browse files

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

Unified · Split

libavfilter/avfilter.c+27−28
@@ -386,55 +386,53 @@ int avfilter_process_command(AVFilterContext *filter, const char *cmd, const cha · 385 unmodified lines
386 return AVERROR(ENOSYS);386 return AVERROR(ENOSYS);
387}387}
388 388
389#define MAX_REGISTERED_AVFILTERS_NB 256389static AVFilter *first_filter;
390
391static AVFilter *registered_avfilters[MAX_REGISTERED_AVFILTERS_NB + 1];
392
393static int next_registered_avfilter_idx = 0;
394 390
395AVFilter *avfilter_get_by_name(const char *name)391AVFilter *avfilter_get_by_name(const char *name)
396{392{
397 int i;393 AVFilter *f = NULL;
398 394
399 for (i = 0; registered_avfilters[i]; i++)395 while ((f = avfilter_next(f)))
400 if (!strcmp(registered_avfilters[i]->name, name))396 if (!strcmp(f->name, name))
401 return registered_avfilters[i];397 return f;
402 398
403 return NULL;399 return NULL;
404}400}
405 401
406int avfilter_register(AVFilter *filter)402int avfilter_register(AVFilter *filter)
407{403{
404 AVFilter **f = &first_filter;
408 int i;405 int i;
409 406
410 if (next_registered_avfilter_idx == MAX_REGISTERED_AVFILTERS_NB) {
411 av_log(NULL, AV_LOG_ERROR,
412 "Maximum number of registered filters %d reached, "
413 "impossible to register filter with name '%s'\n",
414 MAX_REGISTERED_AVFILTERS_NB, filter->name);
415 return AVERROR(ENOMEM);
416 }
417
418 for(i=0; filter->inputs && filter->inputs[i].name; i++) {407 for(i=0; filter->inputs && filter->inputs[i].name; i++) {
419 const AVFilterPad *input = &filter->inputs[i];408 const AVFilterPad *input = &filter->inputs[i];
420 av_assert0( !input->filter_frame409 av_assert0( !input->filter_frame
421 || (!input->start_frame && !input->end_frame));410 || (!input->start_frame && !input->end_frame));
422 }411 }
423 412
424 registered_avfilters[next_registered_avfilter_idx++] = filter;413 while (*f)
414 f = &(*f)->next;
415 *f = filter;
416 filter->next = NULL;
417
425 return 0;418 return 0;
426}419}
427 420
421const AVFilter *avfilter_next(const AVFilter *prev)
422{
423 return prev ? prev->next : first_filter;
424}
425
426#if FF_API_OLD_FILTER_REGISTER
428AVFilter **av_filter_next(AVFilter **filter)427AVFilter **av_filter_next(AVFilter **filter)
429{428{
430 return filter ? ++filter : &registered_avfilters[0];429 return filter ? &(*filter)->next : &first_filter;
431}430}
432 431
433void avfilter_uninit(void)432void avfilter_uninit(void)
434{433{
435 memset(registered_avfilters, 0, sizeof(registered_avfilters));
436 next_registered_avfilter_idx = 0;
437}434}
435#endif
438 436
439int avfilter_pad_count(const AVFilterPad *pads)437int avfilter_pad_count(const AVFilterPad *pads)
440{438{
@@ -463,21 +461,22 @@ static void *filter_child_next(void *obj, void *prev) · 22 unmodified lines
463 461
464static const AVClass *filter_child_class_next(const AVClass *prev)462static const AVClass *filter_child_class_next(const AVClass *prev)
465{463{
466 AVFilter **f = NULL;464 AVFilter *f = NULL;
467 465
468 /* find the filter that corresponds to prev */466 /* find the filter that corresponds to prev */
469 while (prev && *(f = av_filter_next(f)))467 while (prev && (f = avfilter_next(f)))
470 if ((*f)->priv_class == prev)468 if (f->priv_class == prev)
471 break;469 break;
472 470
473 /* could not find filter corresponding to prev */471 /* could not find filter corresponding to prev */
474 if (prev && !(*f))472 if (prev && !f)
475 return NULL;473 return NULL;
476 474
477 /* find next filter with specific options */475 /* find next filter with specific options */
478 while (*(f = av_filter_next(f)))476 while ((f = avfilter_next(f)))
479 if ((*f)->priv_class)477 if (f->priv_class)
480 return (*f)->priv_class;478 return f->priv_class;
479
481 return NULL;480 return NULL;
482}481}
483 482

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