|
|
|
@ -412,20 +412,42 @@ enum AVMediaType avfilter_pad_get_type(const AVFilterPad *pads, int pad_idx); |
|
|
|
|
* callback functions used to interact with the filter. |
|
|
|
|
*/ |
|
|
|
|
typedef struct AVFilter { |
|
|
|
|
const char *name; ///< filter name
|
|
|
|
|
/**
|
|
|
|
|
* Filter name. Must be non-NULL and unique among filters. |
|
|
|
|
*/ |
|
|
|
|
const char *name; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* A description for the filter. You should use the |
|
|
|
|
* NULL_IF_CONFIG_SMALL() macro to define it. |
|
|
|
|
* A description of the filter. May be NULL. |
|
|
|
|
* |
|
|
|
|
* You should use the NULL_IF_CONFIG_SMALL() macro to define it. |
|
|
|
|
*/ |
|
|
|
|
const char *description; |
|
|
|
|
|
|
|
|
|
const AVFilterPad *inputs; ///< NULL terminated list of inputs. NULL if none
|
|
|
|
|
const AVFilterPad *outputs; ///< NULL terminated list of outputs. NULL if none
|
|
|
|
|
/**
|
|
|
|
|
* List of inputs, terminated by a zeroed element. |
|
|
|
|
* |
|
|
|
|
* NULL if there are no (static) inputs. Instances of filters with |
|
|
|
|
* AVFILTER_FLAG_DYNAMIC_INPUTS set may have more inputs than present in |
|
|
|
|
* this list. |
|
|
|
|
*/ |
|
|
|
|
const AVFilterPad *inputs; |
|
|
|
|
/**
|
|
|
|
|
* List of outputs, terminated by a zeroed element. |
|
|
|
|
* |
|
|
|
|
* NULL if there are no (static) outputs. Instances of filters with |
|
|
|
|
* AVFILTER_FLAG_DYNAMIC_OUTPUTS set may have more outputs than present in |
|
|
|
|
* this list. |
|
|
|
|
*/ |
|
|
|
|
const AVFilterPad *outputs; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* A class for the private data, used to access filter private |
|
|
|
|
* AVOptions. |
|
|
|
|
* A class for the private data, used to declare filter private AVOptions. |
|
|
|
|
* This field is NULL for filters that do not declare any options. |
|
|
|
|
* |
|
|
|
|
* If this field is non-NULL, the first member of the filter private data |
|
|
|
|
* must be a pointer to AVClass, which will be set by libavfilter generic |
|
|
|
|
* code to this class. |
|
|
|
|
*/ |
|
|
|
|
const AVClass *priv_class; |
|
|
|
|
|
|
|
|
@ -443,29 +465,71 @@ typedef struct AVFilter { |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Filter initialization function. Called when all the options have been |
|
|
|
|
* set. |
|
|
|
|
* Filter initialization function. |
|
|
|
|
* |
|
|
|
|
* This callback will be called only once during the filter lifetime, after |
|
|
|
|
* all the options have been set, but before links between filters are |
|
|
|
|
* established and format negotiation is done. |
|
|
|
|
* |
|
|
|
|
* Basic filter initialization should be done here. Filters with dynamic |
|
|
|
|
* inputs and/or outputs should create those inputs/outputs here based on |
|
|
|
|
* provided options. No more changes to this filter's inputs/outputs can be |
|
|
|
|
* done after this callback. |
|
|
|
|
* |
|
|
|
|
* This callback must not assume that the filter links exist or frame |
|
|
|
|
* parameters are known. |
|
|
|
|
* |
|
|
|
|
* @ref AVFilter.uninit "uninit" is guaranteed to be called even if |
|
|
|
|
* initialization fails, so this callback does not have to clean up on |
|
|
|
|
* failure. |
|
|
|
|
* |
|
|
|
|
* @return 0 on success, a negative AVERROR on failure |
|
|
|
|
*/ |
|
|
|
|
int (*init)(AVFilterContext *ctx); |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Should be set instead of init by the filters that want to pass a |
|
|
|
|
* dictionary of AVOptions to nested contexts that are allocated in |
|
|
|
|
* init. |
|
|
|
|
* Should be set instead of @ref AVFilter.init "init" by the filters that |
|
|
|
|
* want to pass a dictionary of AVOptions to nested contexts that are |
|
|
|
|
* allocated during init. |
|
|
|
|
* |
|
|
|
|
* On return, the options dict should be freed and replaced with one that |
|
|
|
|
* contains all the options which could not be processed by this filter (or |
|
|
|
|
* with NULL if all the options were processed). |
|
|
|
|
* |
|
|
|
|
* Otherwise the semantics is the same as for @ref AVFilter.init "init". |
|
|
|
|
*/ |
|
|
|
|
int (*init_dict)(AVFilterContext *ctx, AVDictionary **options); |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Filter uninitialization function. Should deallocate any memory held |
|
|
|
|
* by the filter, release any buffer references, etc. This does not need |
|
|
|
|
* to deallocate the AVFilterContext->priv memory itself. |
|
|
|
|
* Filter uninitialization function. |
|
|
|
|
* |
|
|
|
|
* Called only once right before the filter is freed. Should deallocate any |
|
|
|
|
* memory held by the filter, release any buffer references, etc. It does |
|
|
|
|
* not need to deallocate the AVFilterContext.priv memory itself. |
|
|
|
|
* |
|
|
|
|
* This callback may be called even if @ref AVFilter.init "init" was not |
|
|
|
|
* called or failed, so it must be prepared to handle such a situation. |
|
|
|
|
*/ |
|
|
|
|
void (*uninit)(AVFilterContext *ctx); |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Queries formats supported by the filter and its pads, and sets the |
|
|
|
|
* in_formats for links connected to its output pads, and out_formats |
|
|
|
|
* for links connected to its input pads. |
|
|
|
|
* Query formats supported by the filter on its inputs and outputs. |
|
|
|
|
* |
|
|
|
|
* This callback is called after the filter is initialized (so the inputs |
|
|
|
|
* and outputs are fixed), shortly before the format negotiation. This |
|
|
|
|
* callback may be called more than once. |
|
|
|
|
* |
|
|
|
|
* This callback must set AVFilterLink.out_formats on every input link and |
|
|
|
|
* AVFilterLink.in_formats on every output link to a list of pixel/sample |
|
|
|
|
* formats that the filter supports on that link. For audio links, this |
|
|
|
|
* filter must also set @ref AVFilterLink.in_samplerates "in_samplerates" / |
|
|
|
|
* @ref AVFilterLink.out_samplerates "out_samplerates" and |
|
|
|
|
* @ref AVFilterLink.in_channel_layouts "in_channel_layouts" / |
|
|
|
|
* @ref AVFilterLink.out_channel_layouts "out_channel_layouts" analogously. |
|
|
|
|
* |
|
|
|
|
* This callback may be NULL for filters with one input, in which case |
|
|
|
|
* libavfilter assumes that it supports all input formats and preserves |
|
|
|
|
* them on output. |
|
|
|
|
* |
|
|
|
|
* @return zero on success, a negative value corresponding to an |
|
|
|
|
* AVERROR code otherwise |
|
|
|
@ -474,6 +538,10 @@ typedef struct AVFilter { |
|
|
|
|
|
|
|
|
|
int priv_size; ///< size of private data to allocate for the filter
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Used by the filter registration system. Must not be touched by any other |
|
|
|
|
* code. |
|
|
|
|
*/ |
|
|
|
|
struct AVFilter *next; |
|
|
|
|
} AVFilter; |
|
|
|
|
|
|
|
|
|