diff --git a/doc/APIchanges b/doc/APIchanges index 35c49f6ddd..87a472b679 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -22,6 +22,7 @@ API changes, most recent first: filter. Add avfilter_init_str(), deprecate avfilter_init_filter(). Add avfilter_init_dict(). + Add AVFilter.flags field and AVFILTER_FLAG_DYNAMIC_{INPUTS,OUTPUTS} flags. 2013-xx-xx - lavfi 3.7.0 - avfilter.h Add AVFilter.priv_class for exporting filter options through the AVOptions API diff --git a/libavfilter/af_amix.c b/libavfilter/af_amix.c index f7f003b6b1..6bc74585c7 100644 --- a/libavfilter/af_amix.c +++ b/libavfilter/af_amix.c @@ -562,4 +562,6 @@ AVFilter avfilter_af_amix = { .inputs = NULL, .outputs = avfilter_af_amix_outputs, + + .flags = AVFILTER_FLAG_DYNAMIC_INPUTS, }; diff --git a/libavfilter/af_channelsplit.c b/libavfilter/af_channelsplit.c index fcdc34eca0..fde5985bf3 100644 --- a/libavfilter/af_channelsplit.c +++ b/libavfilter/af_channelsplit.c @@ -149,4 +149,6 @@ AVFilter avfilter_af_channelsplit = { .inputs = avfilter_af_channelsplit_inputs, .outputs = NULL, + + .flags = AVFILTER_FLAG_DYNAMIC_OUTPUTS, }; diff --git a/libavfilter/af_join.c b/libavfilter/af_join.c index a06812ed32..02bc8c8f14 100644 --- a/libavfilter/af_join.c +++ b/libavfilter/af_join.c @@ -522,4 +522,6 @@ AVFilter avfilter_af_join = { .inputs = NULL, .outputs = avfilter_af_join_outputs, + + .flags = AVFILTER_FLAG_DYNAMIC_INPUTS, }; diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h index dffb2e56d9..dd29ec0564 100644 --- a/libavfilter/avfilter.h +++ b/libavfilter/avfilter.h @@ -372,6 +372,19 @@ const char *avfilter_pad_get_name(const AVFilterPad *pads, int pad_idx); */ enum AVMediaType avfilter_pad_get_type(const AVFilterPad *pads, int pad_idx); +/** + * The number of the filter inputs is not determined just by AVFilter.inputs. + * The filter might add additional inputs during initialization depending on the + * options supplied to it. + */ +#define AVFILTER_FLAG_DYNAMIC_INPUTS (1 << 0) +/** + * The number of the filter outputs is not determined just by AVFilter.outputs. + * The filter might add additional outputs during initialization depending on + * the options supplied to it. + */ +#define AVFILTER_FLAG_DYNAMIC_OUTPUTS (1 << 1) + /** * Filter definition. This defines the pads a filter contains, and all the * callback functions used to interact with the filter. @@ -394,6 +407,11 @@ typedef struct AVFilter { */ const AVClass *priv_class; + /** + * A combination of AVFILTER_FLAG_* + */ + int flags; + /***************************************************************** * All fields below this line are not part of the public API. They * may not be used outside of libavfilter and can be changed and diff --git a/libavfilter/split.c b/libavfilter/split.c index 7e8b4cc24f..8c03de5b17 100644 --- a/libavfilter/split.c +++ b/libavfilter/split.c @@ -129,6 +129,8 @@ AVFilter avfilter_vf_split = { .inputs = avfilter_vf_split_inputs, .outputs = NULL, + + .flags = AVFILTER_FLAG_DYNAMIC_OUTPUTS, }; static const AVFilterPad avfilter_af_asplit_inputs[] = { @@ -153,4 +155,6 @@ AVFilter avfilter_af_asplit = { .inputs = avfilter_af_asplit_inputs, .outputs = NULL, + + .flags = AVFILTER_FLAG_DYNAMIC_OUTPUTS, };