History

lavfi: add avfilter_get_class() and iteration callbacks

Allow iteration over filter options.

Stefano Sabatini committed 14 years ago

Commit 5c0d8bc1 parent a25346e4 files · +46 −1Browse files

Unified · Split

4 files
  1. doc/APIchanges +4 −0
  2. libavfilter/avfilter.c +35 −0
  3. libavfilter/avfilter.h +6 −0
  4. libavfilter/version.h +1 −1
doc/APIchanges+4−0
@@ -15,6 +15,10 @@ libavutil: 2011-04-18 · 14 unmodified lines
1515
1616 API changes, most recent first:
1717
18+2012-08-13 - xxxxxxx - lavfi 3.8.100 - avfilter.h
19+ Add avfilter_get_class() function, and priv_class field to AVFilter
20+ struct.
21+
1822 2012-08-13 - xxxxxxx - lavu 51.69.100 - opt.h
1923 Add AV_OPT_FLAG_FILTERING_PARAM symbol in opt.h.
2024
libavfilter/avfilter.c+35−0
@@ -432,13 +432,48 @@ static const char *default_filter_name(void *filter_ctx) · 431 unmodified lines
432432 return ctx->name ? ctx->name : ctx->filter->name;
433433 }
434434
435+static void *filter_child_next(void *obj, void *prev)
436+{
437+ AVFilterContext *ctx = obj;
438+ if (!prev && ctx->filter && ctx->filter->priv_class)
439+ return ctx->priv;
440+ return NULL;
441+}
442+
443+static const AVClass *filter_child_class_next(const AVClass *prev)
444+{
445+ AVFilter **filter_ptr = NULL;
446+
447+ /* find the filter that corresponds to prev */
448+ while (prev && *(filter_ptr = av_filter_next(filter_ptr)))
449+ if ((*filter_ptr)->priv_class == prev)
450+ break;
451+
452+ /* could not find filter corresponding to prev */
453+ if (prev && !(*filter_ptr))
454+ return NULL;
455+
456+ /* find next filter with specific options */
457+ while (*(filter_ptr = av_filter_next(filter_ptr)))
458+ if ((*filter_ptr)->priv_class)
459+ return (*filter_ptr)->priv_class;
460+ return NULL;
461+}
462+
435463 static const AVClass avfilter_class = {
436464 .class_name = "AVFilter",
437465 .item_name = default_filter_name,
438466 .version = LIBAVUTIL_VERSION_INT,
439467 .category = AV_CLASS_CATEGORY_FILTER,
468+ .child_next = filter_child_next,
469+ .child_class_next = filter_child_class_next,
440470 };
441471
472+const AVClass *avfilter_get_class(void)
473+{
474+ return &avfilter_class;
475+}
476+
442477 int avfilter_open(AVFilterContext **filter_ctx, AVFilter *filter, const char *inst_name)
443478 {
444479 AVFilterContext *ret;
libavfilter/avfilter.h+6−0
@@ -47,6 +47,10 @@ const char *avfilter_configuration(void); · 46 unmodified lines
4747 */
4848 const char *avfilter_license(void);
4949
50+/**
51+ * Get the class for the AVFilterContext struct.
52+ */
53+const AVClass *avfilter_get_class(void);
5054
5155 typedef struct AVFilterContext AVFilterContext;
5256 typedef struct AVFilterLink AVFilterLink;
@@ -469,6 +473,8 @@ typedef struct AVFilter { · 416 unmodified lines
469473 * used for providing binary data.
470474 */
471475 int (*init_opaque)(AVFilterContext *ctx, const char *args, void *opaque);
476+
477+ const AVClass *priv_class; ///< private class, containing filter specific options
472478 } AVFilter;
473479
474480 /** An instance of a filter */
libavfilter/version.h+1−1
@@ -29,7 +29,7 @@ · 28 unmodified lines
2929 #include "libavutil/avutil.h"
3030
3131 #define LIBAVFILTER_VERSION_MAJOR 3
32−#define LIBAVFILTER_VERSION_MINOR 7
32+#define LIBAVFILTER_VERSION_MINOR 8
3333 #define LIBAVFILTER_VERSION_MICRO 100
3434
3535 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \

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