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

Unified · Split

7 files
  1. cmdutils.c +4 −4
  2. doc/APIchanges +2 −0
  3. ffmpeg.c +0 −1
  4. ffplay.c +0 −1
  5. libavfilter/avfilter.c +27 −28
  6. libavfilter/avfilter.h +16 −0
  7. libavfilter/version.h +3 −0
cmdutils.c+4−4
@@ -1448,21 +1448,21 @@ int show_protocols(void *optctx, const char *opt, const char *arg) · 1447 unmodified lines
1448 1448
1449int show_filters(void *optctx, const char *opt, const char *arg)1449int show_filters(void *optctx, const char *opt, const char *arg)
1450{1450{
1451 AVFilter av_unused(**filter) = NULL;1451 const AVFilter av_unused(*filter) = NULL;
1452 char descr[64], *descr_cur;1452 char descr[64], *descr_cur;
1453 int i, j;1453 int i, j;
1454 const AVFilterPad *pad;1454 const AVFilterPad *pad;
1455 1455
1456 printf("Filters:\n");1456 printf("Filters:\n");
1457#if CONFIG_AVFILTER1457#if CONFIG_AVFILTER
1458 while ((filter = av_filter_next(filter)) && *filter) {1458 while ((filter = avfilter_next(filter))) {
1459 descr_cur = descr;1459 descr_cur = descr;
1460 for (i = 0; i < 2; i++) {1460 for (i = 0; i < 2; i++) {
1461 if (i) {1461 if (i) {
1462 *(descr_cur++) = '-';1462 *(descr_cur++) = '-';
1463 *(descr_cur++) = '>';1463 *(descr_cur++) = '>';
1464 }1464 }
1465 pad = i ? (*filter)->outputs : (*filter)->inputs;1465 pad = i ? filter->outputs : filter->inputs;
1466 for (j = 0; pad && pad[j].name; j++) {1466 for (j = 0; pad && pad[j].name; j++) {
1467 if (descr_cur >= descr + sizeof(descr) - 4)1467 if (descr_cur >= descr + sizeof(descr) - 4)
1468 break;1468 break;
@@ -1472,7 +1472,7 @@ int show_filters(void *optctx, const char *opt, const char *arg) · 3 unmodified lines
1472 *(descr_cur++) = '|';1472 *(descr_cur++) = '|';
1473 }1473 }
1474 *descr_cur = 0;1474 *descr_cur = 0;
1475 printf("%-16s %-10s %s\n", (*filter)->name, descr, (*filter)->description);1475 printf("%-16s %-10s %s\n", filter->name, descr, filter->description);
1476 }1476 }
1477#endif1477#endif
1478 return 0;1478 return 0;
doc/APIchanges+2−0
@@ -171,6 +171,8 @@ API changes, most recent first: · 170 unmodified lines
171 Add avfilter_init_dict().171 Add avfilter_init_dict().
172 Add AVFilter.flags field and AVFILTER_FLAG_DYNAMIC_{INPUTS,OUTPUTS} flags.172 Add AVFilter.flags field and AVFILTER_FLAG_DYNAMIC_{INPUTS,OUTPUTS} flags.
173 Add avfilter_pad_count() for counting filter inputs/outputs.173 Add avfilter_pad_count() for counting filter inputs/outputs.
174 Add avfilter_next(), deprecate av_filter_next().
175 Deprecate avfilter_uninit().
174 176
1752013-xx-xx - lavfi 3.7.0 - avfilter.h1772013-xx-xx - lavfi 3.7.0 - avfilter.h
176 Add AVFilter.priv_class for exporting filter options through the AVOptions API178 Add AVFilter.priv_class for exporting filter options through the AVOptions API
ffmpeg.c+0−1
@@ -499,7 +499,6 @@ static void exit_program(void) · 498 unmodified lines
499 499
500 uninit_opts();500 uninit_opts();
501 501
502 avfilter_uninit();
503 avformat_network_deinit();502 avformat_network_deinit();
504 503
505 if (received_sigterm) {504 if (received_sigterm) {
ffplay.c+0−1
@@ -1027,7 +1027,6 @@ static void do_exit(VideoState *is) · 1026 unmodified lines
1027 av_lockmgr_register(NULL);1027 av_lockmgr_register(NULL);
1028 uninit_opts();1028 uninit_opts();
1029#if CONFIG_AVFILTER1029#if CONFIG_AVFILTER
1030 avfilter_uninit();
1031 av_freep(&vfilters);1030 av_freep(&vfilters);
1032#endif1031#endif
1033 avformat_network_deinit();1032 avformat_network_deinit();
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
libavfilter/avfilter.h+16−0
@@ -496,6 +496,8 @@ typedef struct AVFilter { · 495 unmodified lines
496 496
497 int priv_size; ///< size of private data to allocate for the filter497 int priv_size; ///< size of private data to allocate for the filter
498 498
499 struct AVFilter *next;
500
499 /**501 /**
500 * Make the filter instance process a command.502 * Make the filter instance process a command.
501 *503 *
@@ -837,8 +839,11 @@ int avfilter_process_command(AVFilterContext *filter, const char *cmd, const cha · 335 unmodified lines
837/** Initialize the filter system. Register all builtin filters. */839/** Initialize the filter system. Register all builtin filters. */
838void avfilter_register_all(void);840void avfilter_register_all(void);
839 841
842#if FF_API_OLD_FILTER_REGISTER
840/** Uninitialize the filter system. Unregister all filters. */843/** Uninitialize the filter system. Unregister all filters. */
844attribute_deprecated
841void avfilter_uninit(void);845void avfilter_uninit(void);
846#endif
842 847
843/**848/**
844 * Register a filter. This is only needed if you plan to use849 * Register a filter. This is only needed if you plan to use
@@ -861,13 +866,24 @@ int avfilter_register(AVFilter *filter); · 16 unmodified lines
861 */866 */
862AVFilter *avfilter_get_by_name(const char *name);867AVFilter *avfilter_get_by_name(const char *name);
863 868
869/**
870 * Iterate over all registered filters.
871 * @return If prev is non-NULL, next registered filter after prev or NULL if
872 * prev is the last filter. If prev is NULL, return the first registered filter.
873 */
874const AVFilter *avfilter_next(const AVFilter *prev);
875
876#if FF_API_OLD_FILTER_REGISTER
864/**877/**
865 * If filter is NULL, returns a pointer to the first registered filter pointer,878 * If filter is NULL, returns a pointer to the first registered filter pointer,
866 * if filter is non-NULL, returns the next pointer after filter.879 * if filter is non-NULL, returns the next pointer after filter.
867 * If the returned pointer points to NULL, the last registered filter880 * If the returned pointer points to NULL, the last registered filter
868 * was already reached.881 * was already reached.
882 * @deprecated use avfilter_next()
869 */883 */
884attribute_deprecated
870AVFilter **av_filter_next(AVFilter **filter);885AVFilter **av_filter_next(AVFilter **filter);
886#endif
871 887
872#if FF_API_AVFILTER_OPEN888#if FF_API_AVFILTER_OPEN
873/**889/**
libavfilter/version.h+3−0
@@ -75,5 +75,8 @@ · 74 unmodified lines
75#ifndef FF_API_AVFILTER_INIT_FILTER75#ifndef FF_API_AVFILTER_INIT_FILTER
76#define FF_API_AVFILTER_INIT_FILTER (LIBAVFILTER_VERSION_MAJOR < 4)76#define FF_API_AVFILTER_INIT_FILTER (LIBAVFILTER_VERSION_MAJOR < 4)
77#endif77#endif
78#ifndef FF_API_OLD_FILTER_REGISTER
79#define FF_API_OLD_FILTER_REGISTER (LIBAVFILTER_VERSION_MAJOR < 4)
80#endif
78 81
79#endif /* AVFILTER_VERSION_H */82#endif /* AVFILTER_VERSION_H */

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