X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Favfilter.h;h=b82f72d040ce02c856f572f2af319987c0950c74;hb=4be1714b12b6c311a99a64888ea5f279c3ed9885;hp=9d70e7118beeaac0c23e14a664014ebbccdb2b3f;hpb=39278ff0de5b5e3397c22538978bffbb38ee099b;p=ffmpeg diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h index 9d70e7118be..b82f72d040c 100644 --- a/libavfilter/avfilter.h +++ b/libavfilter/avfilter.h @@ -68,6 +68,7 @@ typedef struct AVFilterContext AVFilterContext; typedef struct AVFilterLink AVFilterLink; typedef struct AVFilterPad AVFilterPad; typedef struct AVFilterFormats AVFilterFormats; +typedef struct AVFilterChannelLayouts AVFilterChannelLayouts; /** * Get the number of elements in a NULL-terminated array of AVFilterPads (e.g. @@ -79,7 +80,7 @@ int avfilter_pad_count(const AVFilterPad *pads); * Get the name of an AVFilterPad. * * @param pads an array of AVFilterPads - * @param pad_idx index of the pad in the array it; is the caller's + * @param pad_idx index of the pad in the array; it is the caller's * responsibility to ensure the index is valid * * @return name of the pad_idx'th pad in pads @@ -264,13 +265,13 @@ typedef struct AVFilter { * 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 + * This callback must set AVFilterLink.outcfg.formats on every input link and + * AVFilterLink.incfg.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. + * filter must also set @ref AVFilterLink.incfg.samplerates "in_samplerates" / + * @ref AVFilterLink.outcfg.samplerates "out_samplerates" and + * @ref AVFilterLink.incfg.channel_layouts "in_channel_layouts" / + * @ref AVFilterLink.outcfg.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 @@ -285,12 +286,6 @@ typedef struct AVFilter { int flags_internal; ///< Additional flags for avfilter internal use only. - /** - * Used by the filter registration system. Must not be touched by any other - * code. - */ - struct AVFilter *next; - /** * Make the filter instance process a command. * @@ -424,6 +419,35 @@ struct AVFilterContext { int extra_hw_frames; }; +/** + * Lists of formats / etc. supported by an end of a link. + * + * This structure is directly part of AVFilterLink, in two copies: + * one for the source filter, one for the destination filter. + + * These lists are used for negotiating the format to actually be used, + * which will be loaded into the format and channel_layout members of + * AVFilterLink, when chosen. + */ +typedef struct AVFilterFormatsConfig { + + /** + * List of supported formats (pixel or sample). + */ + AVFilterFormats *formats; + + /** + * Lists of supported sample rates, only for audio. + */ + AVFilterFormats *samplerates; + + /** + * Lists of supported channel layouts, only for audio. + */ + AVFilterChannelLayouts *channel_layouts; + +} AVFilterFormatsConfig; + /** * A link between two filters. This contains pointers to the source and * destination filters between which this link exists, and the indexes of @@ -471,33 +495,16 @@ struct AVFilterLink { * New public fields should be added right above. ***************************************************************** */ - /** - * Lists of formats and channel layouts supported by the input and output - * filters respectively. These lists are used for negotiating the format - * to actually be used, which will be loaded into the format and - * channel_layout members, above, when chosen. - * - */ - AVFilterFormats *in_formats; - AVFilterFormats *out_formats; /** - * Lists of channel layouts and sample rates used for automatic - * negotiation. + * Lists of supported formats / etc. supported by the input filter. */ - AVFilterFormats *in_samplerates; - AVFilterFormats *out_samplerates; - struct AVFilterChannelLayouts *in_channel_layouts; - struct AVFilterChannelLayouts *out_channel_layouts; + AVFilterFormatsConfig incfg; /** - * Audio only, the destination filter sets this to a non-zero value to - * request that buffers with the given number of samples should be sent to - * it. AVFilterPad.needs_fifo must also be set on the corresponding input - * pad. - * Last buffer before EOF will be padded with silence. + * Lists of supported formats / etc. supported by the output filter. */ - int request_samples; + AVFilterFormatsConfig outcfg; /** stage of the initialization of the link properties (dimensions, etc) */ enum { @@ -572,11 +579,6 @@ struct AVFilterLink { */ int channels; - /** - * Link processing flags. - */ - unsigned flags; - /** * Number of past frames sent through the link. */ @@ -663,23 +665,6 @@ int avfilter_link(AVFilterContext *src, unsigned srcpad, */ void avfilter_link_free(AVFilterLink **link); -#if FF_API_FILTER_GET_SET -/** - * Get the number of channels of a link. - * @deprecated Use av_buffersink_get_channels() - */ -attribute_deprecated -int avfilter_link_get_channels(AVFilterLink *link); -#endif - -/** - * Set the closed field of a link. - * @deprecated applications are not supposed to mess with links, they should - * close the sinks. - */ -attribute_deprecated -void avfilter_link_set_closed(AVFilterLink *link, int closed); - /** * Negotiate the media format, dimensions, etc of all inputs to a filter. * @@ -708,33 +693,6 @@ int avfilter_process_command(AVFilterContext *filter, const char *cmd, const cha */ const AVFilter *av_filter_iterate(void **opaque); -#if FF_API_NEXT -/** Initialize the filter system. Register all builtin filters. */ -attribute_deprecated -void avfilter_register_all(void); - -/** - * Register a filter. This is only needed if you plan to use - * avfilter_get_by_name later to lookup the AVFilter structure by name. A - * filter can still by instantiated with avfilter_graph_alloc_filter even if it - * is not registered. - * - * @param filter the filter to register - * @return 0 if the registration was successful, a negative value - * otherwise - */ -attribute_deprecated -int avfilter_register(AVFilter *filter); - -/** - * Iterate over all registered filters. - * @return If prev is non-NULL, next registered filter after prev or NULL if - * prev is the last filter. If prev is NULL, return the first registered filter. - */ -attribute_deprecated -const AVFilter *avfilter_next(const AVFilter *prev); -#endif - /** * Get a filter definition matching the given name. * @@ -843,9 +801,6 @@ typedef struct AVFilterGraph { unsigned nb_filters; char *scale_sws_opts; ///< sws options to use for the auto-inserted scale filters -#if FF_API_LAVR_OPTS - attribute_deprecated char *resample_lavr_opts; ///< libavresample options to use for the auto-inserted resample filters -#endif /** * Type of multithreading allowed for filters in this graph. A combination @@ -947,7 +902,7 @@ AVFilterContext *avfilter_graph_get_filter(AVFilterGraph *graph, const char *nam /** * Create and add a filter instance into an existing graph. * The filter instance is created from the filter filt and inited - * with the parameters args and opaque. + * with the parameter args. opaque is currently ignored. * * In case of success put in *filt_ctx the pointer to the created * filter instance, otherwise set *filt_ctx to NULL.