Browse Source

lavfi: add avfilter_get_class() and iteration callbacks

Allow iteration over filter options.
tags/n1.0
Stefano Sabatini 13 years ago
parent
commit
5c0d8bc4ce
4 changed files with 46 additions and 1 deletions
  1. +4
    -0
      doc/APIchanges
  2. +35
    -0
      libavfilter/avfilter.c
  3. +6
    -0
      libavfilter/avfilter.h
  4. +1
    -1
      libavfilter/version.h

+ 4
- 0
doc/APIchanges View File

@@ -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.



+ 35
- 0
libavfilter/avfilter.c View File

@@ -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;


+ 6
- 0
libavfilter/avfilter.h View File

@@ -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 */


+ 1
- 1
libavfilter/version.h View File

@@ -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…
Cancel
Save