lavfi: change the filter registering system to match the other libraries
Removes an arbitrary hardcoded limit on the number of filters.
This commit is contained in:
parent
7e8fe4be5f
commit
fa2a34cd40
1
avconv.c
1
avconv.c
@ -211,7 +211,6 @@ static void exit_program(void)
|
||||
|
||||
uninit_opts();
|
||||
|
||||
avfilter_uninit();
|
||||
avformat_network_deinit();
|
||||
|
||||
if (received_sigterm) {
|
||||
|
3
avplay.c
3
avplay.c
@ -1246,9 +1246,6 @@ static void do_exit(void)
|
||||
cur_stream = NULL;
|
||||
}
|
||||
uninit_opts();
|
||||
#if CONFIG_AVFILTER
|
||||
avfilter_uninit();
|
||||
#endif
|
||||
avformat_network_deinit();
|
||||
if (show_status)
|
||||
printf("\n");
|
||||
|
@ -1130,12 +1130,12 @@ int show_protocols(void *optctx, const char *opt, const char *arg)
|
||||
|
||||
int show_filters(void *optctx, const char *opt, const char *arg)
|
||||
{
|
||||
AVFilter av_unused(**filter) = NULL;
|
||||
const AVFilter av_unused(*filter) = NULL;
|
||||
|
||||
printf("Filters:\n");
|
||||
#if CONFIG_AVFILTER
|
||||
while ((filter = av_filter_next(filter)) && *filter)
|
||||
printf("%-16s %s\n", (*filter)->name, (*filter)->description);
|
||||
while ((filter = avfilter_next(filter)))
|
||||
printf("%-16s %s\n", filter->name, filter->description);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
@ -24,6 +24,8 @@ API changes, most recent first:
|
||||
Add avfilter_init_dict().
|
||||
Add AVFilter.flags field and AVFILTER_FLAG_DYNAMIC_{INPUTS,OUTPUTS} flags.
|
||||
Add avfilter_pad_count() for counting filter inputs/outputs.
|
||||
Add avfilter_next(), deprecate av_filter_next().
|
||||
Deprecate avfilter_uninit().
|
||||
|
||||
2013-xx-xx - lavfi 3.7.0 - avfilter.h
|
||||
Add AVFilter.priv_class for exporting filter options through the AVOptions API
|
||||
|
@ -267,42 +267,44 @@ int ff_poll_frame(AVFilterLink *link)
|
||||
return min;
|
||||
}
|
||||
|
||||
#define MAX_REGISTERED_AVFILTERS_NB 64
|
||||
|
||||
static AVFilter *registered_avfilters[MAX_REGISTERED_AVFILTERS_NB + 1];
|
||||
|
||||
static int next_registered_avfilter_idx = 0;
|
||||
static AVFilter *first_filter;
|
||||
|
||||
AVFilter *avfilter_get_by_name(const char *name)
|
||||
{
|
||||
int i;
|
||||
AVFilter *f = NULL;
|
||||
|
||||
for (i = 0; registered_avfilters[i]; i++)
|
||||
if (!strcmp(registered_avfilters[i]->name, name))
|
||||
return registered_avfilters[i];
|
||||
while ((f = avfilter_next(f)))
|
||||
if (!strcmp(f->name, name))
|
||||
return f;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int avfilter_register(AVFilter *filter)
|
||||
{
|
||||
if (next_registered_avfilter_idx == MAX_REGISTERED_AVFILTERS_NB)
|
||||
return -1;
|
||||
|
||||
registered_avfilters[next_registered_avfilter_idx++] = filter;
|
||||
AVFilter **f = &first_filter;
|
||||
while (*f)
|
||||
f = &(*f)->next;
|
||||
*f = filter;
|
||||
filter->next = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
const AVFilter *avfilter_next(const AVFilter *prev)
|
||||
{
|
||||
return prev ? prev->next : first_filter;
|
||||
}
|
||||
|
||||
#if FF_API_OLD_FILTER_REGISTER
|
||||
AVFilter **av_filter_next(AVFilter **filter)
|
||||
{
|
||||
return filter ? ++filter : ®istered_avfilters[0];
|
||||
return filter ? &(*filter)->next : &first_filter;
|
||||
}
|
||||
|
||||
void avfilter_uninit(void)
|
||||
{
|
||||
memset(registered_avfilters, 0, sizeof(registered_avfilters));
|
||||
next_registered_avfilter_idx = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
int avfilter_pad_count(const AVFilterPad *pads)
|
||||
{
|
||||
@ -331,15 +333,15 @@ static void *filter_child_next(void *obj, void *prev)
|
||||
|
||||
static const AVClass *filter_child_class_next(const AVClass *prev)
|
||||
{
|
||||
AVFilter **f = NULL;
|
||||
AVFilter *f = NULL;
|
||||
|
||||
while (prev && *(f = av_filter_next(f)))
|
||||
if ((*f)->priv_class == prev)
|
||||
while (prev && (f = avfilter_next(f)))
|
||||
if (f->priv_class == prev)
|
||||
break;
|
||||
|
||||
while (*(f = av_filter_next(f)))
|
||||
if ((*f)->priv_class)
|
||||
return (*f)->priv_class;
|
||||
while ((f = avfilter_next(f)))
|
||||
if (f->priv_class)
|
||||
return f->priv_class;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
@ -457,6 +457,8 @@ typedef struct AVFilter {
|
||||
int (*query_formats)(AVFilterContext *);
|
||||
|
||||
int priv_size; ///< size of private data to allocate for the filter
|
||||
|
||||
struct AVFilter *next;
|
||||
} AVFilter;
|
||||
|
||||
/** An instance of a filter */
|
||||
@ -622,8 +624,11 @@ AVFilterBufferRef *avfilter_get_audio_buffer_ref_from_arrays(uint8_t **data,
|
||||
/** Initialize the filter system. Register all builtin filters. */
|
||||
void avfilter_register_all(void);
|
||||
|
||||
#if FF_API_OLD_FILTER_REGISTER
|
||||
/** Uninitialize the filter system. Unregister all filters. */
|
||||
attribute_deprecated
|
||||
void avfilter_uninit(void);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Register a filter. This is only needed if you plan to use
|
||||
@ -646,13 +651,24 @@ int avfilter_register(AVFilter *filter);
|
||||
*/
|
||||
AVFilter *avfilter_get_by_name(const char *name);
|
||||
|
||||
/**
|
||||
* Iterate over all registered filters.
|
||||
* @return If prev is non-NULL, next registered filter after prev or NULL if
|
||||
* prev is the last filter. If prev is NULL, return the first registered filter.
|
||||
*/
|
||||
const AVFilter *avfilter_next(const AVFilter *prev);
|
||||
|
||||
#if FF_API_OLD_FILTER_REGISTER
|
||||
/**
|
||||
* If filter is NULL, returns a pointer to the first registered filter pointer,
|
||||
* if filter is non-NULL, returns the next pointer after filter.
|
||||
* If the returned pointer points to NULL, the last registered filter
|
||||
* was already reached.
|
||||
* @deprecated use avfilter_next()
|
||||
*/
|
||||
attribute_deprecated
|
||||
AVFilter **av_filter_next(AVFilter **filter);
|
||||
#endif
|
||||
|
||||
#if FF_API_AVFILTER_OPEN
|
||||
/**
|
||||
|
@ -64,5 +64,8 @@
|
||||
#ifndef FF_API_AVFILTER_INIT_FILTER
|
||||
#define FF_API_AVFILTER_INIT_FILTER (LIBAVFILTER_VERSION_MAJOR < 4)
|
||||
#endif
|
||||
#ifndef FF_API_OLD_FILTER_REGISTER
|
||||
#define FF_API_OLD_FILTER_REGISTER (LIBAVFILTER_VERSION_MAJOR < 4)
|
||||
#endif
|
||||
|
||||
#endif /* AVFILTER_VERSION_H */
|
||||
|
Loading…
x
Reference in New Issue
Block a user