mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
lavfi: add avfilter_get_class() and iteration callbacks
Allow iteration over filter options.
This commit is contained in:
parent
a25346e65c
commit
5c0d8bc4ce
@ -15,6 +15,10 @@ libavutil: 2011-04-18
|
||||
|
||||
API changes, most recent first:
|
||||
|
||||
2012-08-13 - xxxxxxx - lavfi 3.8.100 - avfilter.h
|
||||
Add avfilter_get_class() function, and priv_class field to AVFilter
|
||||
struct.
|
||||
|
||||
2012-08-13 - xxxxxxx - lavu 51.69.100 - opt.h
|
||||
Add AV_OPT_FLAG_FILTERING_PARAM symbol in opt.h.
|
||||
|
||||
|
@ -432,13 +432,48 @@ static const char *default_filter_name(void *filter_ctx)
|
||||
return ctx->name ? ctx->name : ctx->filter->name;
|
||||
}
|
||||
|
||||
static void *filter_child_next(void *obj, void *prev)
|
||||
{
|
||||
AVFilterContext *ctx = obj;
|
||||
if (!prev && ctx->filter && ctx->filter->priv_class)
|
||||
return ctx->priv;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static const AVClass *filter_child_class_next(const AVClass *prev)
|
||||
{
|
||||
AVFilter **filter_ptr = NULL;
|
||||
|
||||
/* find the filter that corresponds to prev */
|
||||
while (prev && *(filter_ptr = av_filter_next(filter_ptr)))
|
||||
if ((*filter_ptr)->priv_class == prev)
|
||||
break;
|
||||
|
||||
/* could not find filter corresponding to prev */
|
||||
if (prev && !(*filter_ptr))
|
||||
return NULL;
|
||||
|
||||
/* find next filter with specific options */
|
||||
while (*(filter_ptr = av_filter_next(filter_ptr)))
|
||||
if ((*filter_ptr)->priv_class)
|
||||
return (*filter_ptr)->priv_class;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static const AVClass avfilter_class = {
|
||||
.class_name = "AVFilter",
|
||||
.item_name = default_filter_name,
|
||||
.version = LIBAVUTIL_VERSION_INT,
|
||||
.category = AV_CLASS_CATEGORY_FILTER,
|
||||
.child_next = filter_child_next,
|
||||
.child_class_next = filter_child_class_next,
|
||||
};
|
||||
|
||||
const AVClass *avfilter_get_class(void)
|
||||
{
|
||||
return &avfilter_class;
|
||||
}
|
||||
|
||||
int avfilter_open(AVFilterContext **filter_ctx, AVFilter *filter, const char *inst_name)
|
||||
{
|
||||
AVFilterContext *ret;
|
||||
|
@ -47,6 +47,10 @@ const char *avfilter_configuration(void);
|
||||
*/
|
||||
const char *avfilter_license(void);
|
||||
|
||||
/**
|
||||
* Get the class for the AVFilterContext struct.
|
||||
*/
|
||||
const AVClass *avfilter_get_class(void);
|
||||
|
||||
typedef struct AVFilterContext AVFilterContext;
|
||||
typedef struct AVFilterLink AVFilterLink;
|
||||
@ -469,6 +473,8 @@ typedef struct AVFilter {
|
||||
* used for providing binary data.
|
||||
*/
|
||||
int (*init_opaque)(AVFilterContext *ctx, const char *args, void *opaque);
|
||||
|
||||
const AVClass *priv_class; ///< private class, containing filter specific options
|
||||
} AVFilter;
|
||||
|
||||
/** An instance of a filter */
|
||||
|
@ -29,7 +29,7 @@
|
||||
#include "libavutil/avutil.h"
|
||||
|
||||
#define LIBAVFILTER_VERSION_MAJOR 3
|
||||
#define LIBAVFILTER_VERSION_MINOR 7
|
||||
#define LIBAVFILTER_VERSION_MINOR 8
|
||||
#define LIBAVFILTER_VERSION_MICRO 100
|
||||
|
||||
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
|
||||
|
Loading…
Reference in New Issue
Block a user