From: Michael Niedermayer Date: Thu, 11 Apr 2013 21:40:41 +0000 (+0200) Subject: Merge commit '38f0c0781a6e099f11c0acec07f9b8be742190c4' X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=231fd4411ff35762cb82145c9bebc2dd1db191e0;p=ffmpeg Merge commit '38f0c0781a6e099f11c0acec07f9b8be742190c4' * commit '38f0c0781a6e099f11c0acec07f9b8be742190c4': lavfi: merge avfiltergraph.h into avfilter.h Conflicts: doc/APIchanges ffmpeg_filter.c libavfilter/avfilter.h libavfilter/avfiltergraph.h libavfilter/version.h tools/graph2dot.c Merged-by: Michael Niedermayer --- 231fd4411ff35762cb82145c9bebc2dd1db191e0 diff --cc doc/APIchanges index 08d4d6698ee,490d24b3856..164f0e4b208 --- a/doc/APIchanges +++ b/doc/APIchanges @@@ -15,147 -13,10 +15,151 @@@ libavutil: 2012-10-2 API changes, most recent first: +2013-03-30 - xxxxxxx - lavu 52.24.100 - samplefmt.h + Add av_samples_alloc_array_and_samples(). + +2013-03-29 - xxxxxxx - lavf 55.1.100 - avformat.h + Add av_guess_frame_rate() + +2013-03-20 - xxxxxxx - lavu 52.22.100 - opt.h + Add AV_OPT_TYPE_DURATION value to AVOptionType enum. + +2013-03-17 - xxxxxx - lavu 52.20.100 - opt.h + Add AV_OPT_TYPE_VIDEO_RATE value to AVOptionType enum. + +2013-03-07 - xxxxxx - lavu 52.18.100 - avstring.h,bprint.h + Add av_escape() and av_bprint_escape() API. + +2013-02-24 - xxxxxx - lavfi 3.41.100 - buffersink.h + Add sample_rates field to AVABufferSinkParams. + +2013-01-17 - a1a707f - lavf 54.61.100 + Add av_codec_get_tag2(). + +2013-01-01 - 2eb2e17 - lavfi 3.34.100 + Add avfilter_get_audio_buffer_ref_from_arrays_channels. + +2012-12-20 - 34de47aa - lavfi 3.29.100 - avfilter.h + Add AVFilterLink.channels, avfilter_link_get_channels() + and avfilter_ref_get_channels(). + +2012-12-15 - 2ada584d - lavc 54.80.100 - avcodec.h + Add pkt_size field to AVFrame. + +2012-11-25 - c70ec631 - lavu 52.9.100 - opt.h + Add the following convenience functions to opt.h: + av_opt_get_image_size + av_opt_get_pixel_fmt + av_opt_get_sample_fmt + av_opt_set_image_size + av_opt_set_pixel_fmt + av_opt_set_sample_fmt + +2012-11-17 - 4cd74c81 - lavu 52.8.100 - bprint.h + Add av_bprint_strftime(). + +2012-11-15 - 92648107 - lavu 52.7.100 - opt.h + Add av_opt_get_key_value(). + +2012-11-13 - 79456652 - lavfi 3.23.100 - avfilter.h + Add channels field to AVFilterBufferRefAudioProps. + +2012-11-03 - 481fdeee - lavu 52.3.100 - opt.h + Add AV_OPT_TYPE_SAMPLE_FMT value to AVOptionType enum. + +2012-10-21 - 6fb2fd8 - lavc 54.68.100 - avcodec.h + lavfi 3.20.100 - avfilter.h + Add AV_PKT_DATA_STRINGS_METADATA side data type, used to transmit key/value + strings between AVPacket and AVFrame, and add metadata field to + AVCodecContext (which shall not be accessed by users; see AVFrame metadata + instead). + +2012-09-27 - a70b493 - lavd 54.3.100 - version.h + Add LIBAVDEVICE_IDENT symbol. + +2012-09-27 - a70b493 - lavfi 3.18.100 - version.h + Add LIBAVFILTER_IDENT symbol. + +2012-09-27 - a70b493 - libswr 0.16.100 - version.h + Add LIBSWRESAMPLE_VERSION, LIBSWRESAMPLE_BUILD + and LIBSWRESAMPLE_IDENT symbols. + +2012-09-06 - 29e972f - lavu 51.72.100 - parseutils.h + Add av_small_strptime() time parsing function. + + Can be used as a stripped-down replacement for strptime(), on + systems which do not support it. + +2012-08-25 - 2626cc4 - lavf 54.28.100 + Matroska demuxer now identifies SRT subtitles as AV_CODEC_ID_SUBRIP instead + of AV_CODEC_ID_TEXT. + +2012-08-13 - 5c0d8bc - lavfi 3.8.100 - avfilter.h + Add avfilter_get_class() function, and priv_class field to AVFilter + struct. + +2012-08-12 - a25346e - lavu 51.69.100 - opt.h + Add AV_OPT_FLAG_FILTERING_PARAM symbol in opt.h. + +2012-07-31 - 23fc4dd - lavc 54.46.100 + Add channels field to AVFrame. + +2012-07-30 - f893904 - lavu 51.66.100 + Add av_get_channel_description() + and av_get_standard_channel_layout() functions. + +2012-07-21 - 016a472 - lavc 54.43.100 + Add decode_error_flags field to AVFrame. + +2012-07-20 - b062936 - lavf 54.18.100 + Add avformat_match_stream_specifier() function. + +2012-07-14 - f49ec1b - lavc 54.38.100 - avcodec.h + Add metadata to AVFrame, and the accessor functions + av_frame_get_metadata() and av_frame_set_metadata(). + +2012-07-10 - 0e003d8 - lavc 54.33.100 + Add av_fast_padded_mallocz(). + +2012-07-10 - 21d5609 - lavfi 3.2.0 - avfilter.h + Add init_opaque() callback to AVFilter struct. + +2012-06-26 - e6674e4 - lavu 51.63.100 - imgutils.h + Add functions to libavutil/imgutils.h: + av_image_get_buffer_size() + av_image_fill_arrays() + av_image_copy_to_buffer() + +2012-06-24 - c41899a - lavu 51.62.100 - version.h + version moved from avutil.h to version.h + +2012-04-11 - 359abb1 - lavu 51.58.100 - error.h + Add av_make_error_string() and av_err2str() utilities to + libavutil/error.h. + +2012-06-05 - 62b39d4 - lavc 54.24.100 + Add pkt_duration field to AVFrame. + +2012-05-24 - f2ee065 - lavu 51.54.100 + Move AVPALETTE_SIZE and AVPALETTE_COUNT macros from + libavcodec/avcodec.h to libavutil/pixfmt.h. + +2012-05-14 - 94a9ac1 - lavf 54.5.100 + Add av_guess_sample_aspect_ratio() function. + +2012-04-20 - 65fa7bc - lavfi 2.70.100 + Add avfilter_unref_bufferp() to avfilter.h. + +2012-04-13 - 162e400 - lavfi 2.68.100 + Install libavfilter/asrc_abuffer.h public header. + +2012-03-26 - a67d9cf - lavfi 2.66.100 + Add avfilter_fill_frame_from_{audio_,}buffer_ref() functions. + + 2013-xx-xx - lavfi 3.8.0 + Move all content from avfiltergraph.h to avfilter.h. Deprecate + avfilterhraph.h, user applications should include just avfilter.h + 2013-xx-xx - lavfi 3.7.0 - avfilter.h Add AVFilter.priv_class for exporting filter options through the AVOptions API in the similar way private options work in lavc and lavf. diff --cc doc/filters.texi index 1bb2d9be27a,853d047998a..d3777efc4f2 --- a/doc/filters.texi +++ b/doc/filters.texi @@@ -115,9 -19,9 +115,9 @@@ output pads is called a "sink" A filtergraph can be represented using a textual representation, which is recognized by the @option{-filter}/@option{-vf} and @option{-filter_complex} -options in @command{avconv} and @option{-vf} in @command{avplay}, and by the +options in @command{ffmpeg} and @option{-vf} in @command{ffplay}, and by the @code{avfilter_graph_parse()}/@code{avfilter_graph_parse2()} function defined in - @file{libavfilter/avfiltergraph.h}. + @file{libavfilter/avfilter.h}. A filterchain consists of a sequence of connected filters, each one connected to the previous one in the sequence. A filterchain is diff --cc ffmpeg.c index d39375c5c02,6e3ee0f9ea0..b6e03345a21 --- a/ffmpeg.c +++ b/ffmpeg.c @@@ -60,11 -47,7 +60,10 @@@ #include "libavutil/time.h" #include "libavformat/os_support.h" +#include "libavformat/ffm.h" // not public API + +# include "libavfilter/avcodec.h" # include "libavfilter/avfilter.h" - # include "libavfilter/avfiltergraph.h" # include "libavfilter/buffersrc.h" # include "libavfilter/buffersink.h" diff --cc ffmpeg_filter.c index 4978f1e8870,dd0f35b9075..4d9e97d08ec --- a/ffmpeg_filter.c +++ b/ffmpeg_filter.c @@@ -18,11 -18,9 +18,10 @@@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "avconv.h" +#include "ffmpeg.h" #include "libavfilter/avfilter.h" - #include "libavfilter/avfiltergraph.h" +#include "libavfilter/buffersink.h" #include "libavresample/avresample.h" diff --cc ffplay.c index 13125391bb0,4b7576cc1fc..759f46f3b5f --- a/ffplay.c +++ b/ffplay.c @@@ -41,14 -35,12 +41,13 @@@ #include "libavformat/avformat.h" #include "libavdevice/avdevice.h" #include "libswscale/swscale.h" -#include "libavresample/avresample.h" #include "libavutil/opt.h" #include "libavcodec/avfft.h" +#include "libswresample/swresample.h" #if CONFIG_AVFILTER +# include "libavfilter/avcodec.h" # include "libavfilter/avfilter.h" - # include "libavfilter/avfiltergraph.h" # include "libavfilter/buffersink.h" # include "libavfilter/buffersrc.h" #endif diff --cc libavfilter/avfilter.h index 40be955e0a5,6416e579bf6..296cc420b17 --- a/libavfilter/avfilter.h +++ b/libavfilter/avfilter.h @@@ -912,7 -697,158 +912,258 @@@ int avfilter_copy_buf_props(AVFrame *ds */ const AVClass *avfilter_get_class(void); + typedef struct AVFilterGraph { + const AVClass *av_class; + #if FF_API_FOO_COUNT + attribute_deprecated - unsigned filter_count; ++ unsigned filter_count_unused; + #endif + AVFilterContext **filters; + #if !FF_API_FOO_COUNT + unsigned nb_filters; + #endif + + char *scale_sws_opts; ///< sws options to use for the auto-inserted scale filters + char *resample_lavr_opts; ///< libavresample options to use for the auto-inserted resample filters + #if FF_API_FOO_COUNT + unsigned nb_filters; + #endif ++ char *aresample_swr_opts; ///< swr options to use for the auto-inserted aresample filters, Access ONLY through AVOptions ++ ++ /** ++ * Private fields ++ * ++ * The following fields are for internal use only. ++ * Their type, offset, number and semantic can change without notice. ++ */ ++ ++ AVFilterLink **sink_links; ++ int sink_links_count; ++ ++ unsigned disable_auto_convert; + } AVFilterGraph; + + /** + * Allocate a filter graph. + */ + AVFilterGraph *avfilter_graph_alloc(void); + + /** + * Get a filter instance with name name from graph. + * + * @return the pointer to the found filter instance or NULL if it + * cannot be found. + */ + AVFilterContext *avfilter_graph_get_filter(AVFilterGraph *graph, char *name); + + /** + * Add an existing filter instance to a filter graph. + * + * @param graphctx the filter graph + * @param filter the filter to be added + */ + int avfilter_graph_add_filter(AVFilterGraph *graphctx, AVFilterContext *filter); + + /** + * 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. + * + * In case of success put in *filt_ctx the pointer to the created + * filter instance, otherwise set *filt_ctx to NULL. + * + * @param name the instance name to give to the created filter instance + * @param graph_ctx the filter graph + * @return a negative AVERROR error code in case of failure, a non + * negative value otherwise + */ + int avfilter_graph_create_filter(AVFilterContext **filt_ctx, AVFilter *filt, + const char *name, const char *args, void *opaque, + AVFilterGraph *graph_ctx); + ++/** ++ * Enable or disable automatic format conversion inside the graph. ++ * ++ * Note that format conversion can still happen inside explicitly inserted ++ * scale and aresample filters. ++ * ++ * @param flags any of the AVFILTER_AUTO_CONVERT_* constants ++ */ ++void avfilter_graph_set_auto_convert(AVFilterGraph *graph, unsigned flags); ++ ++enum { ++ AVFILTER_AUTO_CONVERT_ALL = 0, /**< all automatic conversions enabled */ ++ AVFILTER_AUTO_CONVERT_NONE = -1, /**< all automatic conversions disabled */ ++}; ++ + /** + * Check validity and configure all the links and formats in the graph. + * + * @param graphctx the filter graph + * @param log_ctx context used for logging + * @return 0 in case of success, a negative AVERROR code otherwise + */ + int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx); + + /** + * Free a graph, destroy its links, and set *graph to NULL. + * If *graph is NULL, do nothing. + */ + void avfilter_graph_free(AVFilterGraph **graph); + + /** + * A linked-list of the inputs/outputs of the filter chain. + * + * This is mainly useful for avfilter_graph_parse() / avfilter_graph_parse2(), + * where it is used to communicate open (unlinked) inputs and outputs from and + * to the caller. + * This struct specifies, per each not connected pad contained in the graph, the + * filter context and the pad index required for establishing a link. + */ + typedef struct AVFilterInOut { + /** unique name for this input/output in the list */ + char *name; + + /** filter context associated to this input/output */ + AVFilterContext *filter_ctx; + + /** index of the filt_ctx pad to use for linking */ + int pad_idx; + + /** next input/input in the list, NULL if this is the last */ + struct AVFilterInOut *next; + } AVFilterInOut; + + /** + * Allocate a single AVFilterInOut entry. + * Must be freed with avfilter_inout_free(). + * @return allocated AVFilterInOut on success, NULL on failure. + */ + AVFilterInOut *avfilter_inout_alloc(void); + + /** + * Free the supplied list of AVFilterInOut and set *inout to NULL. + * If *inout is NULL, do nothing. + */ + void avfilter_inout_free(AVFilterInOut **inout); + + /** + * Add a graph described by a string to a graph. + * + * @param graph the filter graph where to link the parsed graph context + * @param filters string to be parsed - * @param inputs linked list to the inputs of the graph - * @param outputs linked list to the outputs of the graph - * @return zero on success, a negative AVERROR code on error ++ * @param inputs pointer to a linked list to the inputs of the graph, may be NULL. ++ * If non-NULL, *inputs is updated to contain the list of open inputs ++ * after the parsing, should be freed with avfilter_inout_free(). ++ * @param outputs pointer to a linked list to the outputs of the graph, may be NULL. ++ * If non-NULL, *outputs is updated to contain the list of open outputs ++ * after the parsing, should be freed with avfilter_inout_free(). ++ * @return non negative on success, a negative AVERROR code on error + */ + int avfilter_graph_parse(AVFilterGraph *graph, const char *filters, - AVFilterInOut *inputs, AVFilterInOut *outputs, ++ AVFilterInOut **inputs, AVFilterInOut **outputs, + void *log_ctx); + + /** + * Add a graph described by a string to a graph. + * + * @param[in] graph the filter graph where to link the parsed graph context + * @param[in] filters string to be parsed + * @param[out] inputs a linked list of all free (unlinked) inputs of the + * parsed graph will be returned here. It is to be freed + * by the caller using avfilter_inout_free(). + * @param[out] outputs a linked list of all free (unlinked) outputs of the + * parsed graph will be returned here. It is to be freed by the + * caller using avfilter_inout_free(). + * @return zero on success, a negative AVERROR code on error + * + * @note the difference between avfilter_graph_parse2() and + * avfilter_graph_parse() is that in avfilter_graph_parse(), the caller provides + * the lists of inputs and outputs, which therefore must be known before calling + * the function. On the other hand, avfilter_graph_parse2() \em returns the + * inputs and outputs that are left unlinked after parsing the graph and the + * caller then deals with them. Another difference is that in + * avfilter_graph_parse(), the inputs parameter describes inputs of the + * already existing part of the graph; i.e. from the point of view of + * the newly created part, they are outputs. Similarly the outputs parameter + * describes outputs of the already existing filters, which are provided as + * inputs to the parsed filters. + * avfilter_graph_parse2() takes the opposite approach -- it makes no reference + * whatsoever to already existing parts of the graph and the inputs parameter + * will on return contain inputs of the newly parsed part of the graph. + * Analogously the outputs parameter will contain outputs of the newly created + * filters. + */ + int avfilter_graph_parse2(AVFilterGraph *graph, const char *filters, + AVFilterInOut **inputs, + AVFilterInOut **outputs); + ++/** ++ * Send a command to one or more filter instances. ++ * ++ * @param graph the filter graph ++ * @param target the filter(s) to which the command should be sent ++ * "all" sends to all filters ++ * otherwise it can be a filter or filter instance name ++ * which will send the command to all matching filters. ++ * @param cmd the command to sent, for handling simplicity all commands must be alphanumeric only ++ * @param arg the argument for the command ++ * @param res a buffer with size res_size where the filter(s) can return a response. ++ * ++ * @returns >=0 on success otherwise an error code. ++ * AVERROR(ENOSYS) on unsupported commands ++ */ ++int avfilter_graph_send_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, char *res, int res_len, int flags); ++ ++/** ++ * Queue a command for one or more filter instances. ++ * ++ * @param graph the filter graph ++ * @param target the filter(s) to which the command should be sent ++ * "all" sends to all filters ++ * otherwise it can be a filter or filter instance name ++ * which will send the command to all matching filters. ++ * @param cmd the command to sent, for handling simplicity all commands must be alphanummeric only ++ * @param arg the argument for the command ++ * @param ts time at which the command should be sent to the filter ++ * ++ * @note As this executes commands after this function returns, no return code ++ * from the filter is provided, also AVFILTER_CMD_FLAG_ONE is not supported. ++ */ ++int avfilter_graph_queue_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, int flags, double ts); ++ ++ ++/** ++ * Dump a graph into a human-readable string representation. ++ * ++ * @param graph the graph to dump ++ * @param options formatting options; currently ignored ++ * @return a string, or NULL in case of memory allocation failure; ++ * the string must be freed using av_free ++ */ ++char *avfilter_graph_dump(AVFilterGraph *graph, const char *options); ++ ++/** ++ * Request a frame on the oldest sink link. ++ * ++ * If the request returns AVERROR_EOF, try the next. ++ * ++ * Note that this function is not meant to be the sole scheduling mechanism ++ * of a filtergraph, only a convenience function to help drain a filtergraph ++ * in a balanced way under normal circumstances. ++ * ++ * Also note that AVERROR_EOF does not mean that frames did not arrive on ++ * some of the sinks during the process. ++ * When there are multiple sink links, in case the requested link ++ * returns an EOF, this may cause a filter to flush pending frames ++ * which are sent to another sink link, although unrequested. ++ * ++ * @return the return value of ff_request_frame(), ++ * or AVERROR_EOF if all links returned AVERROR_EOF ++ */ ++int avfilter_graph_request_oldest(AVFilterGraph *graph); ++ +/** + * @} + */ #endif /* AVFILTER_AVFILTER_H */ diff --cc libavfilter/avfiltergraph.c index 75e828feebf,44736cc71dc..28fc743b596 --- a/libavfilter/avfiltergraph.c +++ b/libavfilter/avfiltergraph.c @@@ -24,13 -24,10 +24,12 @@@ #include "libavutil/avassert.h" #include "libavutil/avstring.h" +#include "libavutil/bprint.h" #include "libavutil/channel_layout.h" -#include "libavutil/common.h" -#include "libavutil/log.h" +#include "libavutil/opt.h" +#include "libavutil/pixdesc.h" +#include "libavcodec/avcodec.h" // avcodec_find_best_pix_fmt_of_2() #include "avfilter.h" - #include "avfiltergraph.h" #include "formats.h" #include "internal.h" diff --cc libavfilter/avfiltergraph.h index 2210bfe0fdf,47174efc6ce..b31d581ca03 --- a/libavfilter/avfiltergraph.h +++ b/libavfilter/avfiltergraph.h @@@ -25,256 -25,5 +25,4 @@@ #include "avfilter.h" #include "libavutil/log.h" - typedef struct AVFilterGraph { - const AVClass *av_class; - #if FF_API_FOO_COUNT - attribute_deprecated - unsigned filter_count_unused; - #endif - AVFilterContext **filters; - #if !FF_API_FOO_COUNT - unsigned nb_filters; - #endif - - char *scale_sws_opts; ///< sws options to use for the auto-inserted scale filters - char *resample_lavr_opts; ///< libavresample options to use for the auto-inserted resample filters - #if FF_API_FOO_COUNT - unsigned nb_filters; - #endif - char *aresample_swr_opts; ///< swr options to use for the auto-inserted aresample filters, Access ONLY through AVOptions - - /** - * Private fields - * - * The following fields are for internal use only. - * Their type, offset, number and semantic can change without notice. - */ - - AVFilterLink **sink_links; - int sink_links_count; - - unsigned disable_auto_convert; - } AVFilterGraph; - - /** - * Allocate a filter graph. - */ - AVFilterGraph *avfilter_graph_alloc(void); - - /** - * Get a filter instance with name name from graph. - * - * @return the pointer to the found filter instance or NULL if it - * cannot be found. - */ - AVFilterContext *avfilter_graph_get_filter(AVFilterGraph *graph, char *name); - - /** - * Add an existing filter instance to a filter graph. - * - * @param graphctx the filter graph - * @param filter the filter to be added - */ - int avfilter_graph_add_filter(AVFilterGraph *graphctx, AVFilterContext *filter); - - /** - * 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. - * - * In case of success put in *filt_ctx the pointer to the created - * filter instance, otherwise set *filt_ctx to NULL. - * - * @param name the instance name to give to the created filter instance - * @param graph_ctx the filter graph - * @return a negative AVERROR error code in case of failure, a non - * negative value otherwise - */ - int avfilter_graph_create_filter(AVFilterContext **filt_ctx, AVFilter *filt, - const char *name, const char *args, void *opaque, - AVFilterGraph *graph_ctx); - - /** - * Enable or disable automatic format conversion inside the graph. - * - * Note that format conversion can still happen inside explicitly inserted - * scale and aresample filters. - * - * @param flags any of the AVFILTER_AUTO_CONVERT_* constants - */ - void avfilter_graph_set_auto_convert(AVFilterGraph *graph, unsigned flags); - - enum { - AVFILTER_AUTO_CONVERT_ALL = 0, /**< all automatic conversions enabled */ - AVFILTER_AUTO_CONVERT_NONE = -1, /**< all automatic conversions disabled */ - }; - - /** - * Check validity and configure all the links and formats in the graph. - * - * @param graphctx the filter graph - * @param log_ctx context used for logging - * @return 0 in case of success, a negative AVERROR code otherwise - */ - int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx); - - /** - * Free a graph, destroy its links, and set *graph to NULL. - * If *graph is NULL, do nothing. - */ - void avfilter_graph_free(AVFilterGraph **graph); - - /** - * A linked-list of the inputs/outputs of the filter chain. - * - * This is mainly useful for avfilter_graph_parse() / avfilter_graph_parse2(), - * where it is used to communicate open (unlinked) inputs and outputs from and - * to the caller. - * This struct specifies, per each not connected pad contained in the graph, the - * filter context and the pad index required for establishing a link. - */ - typedef struct AVFilterInOut { - /** unique name for this input/output in the list */ - char *name; - - /** filter context associated to this input/output */ - AVFilterContext *filter_ctx; - - /** index of the filt_ctx pad to use for linking */ - int pad_idx; - - /** next input/input in the list, NULL if this is the last */ - struct AVFilterInOut *next; - } AVFilterInOut; - - /** - * Allocate a single AVFilterInOut entry. - * Must be freed with avfilter_inout_free(). - * @return allocated AVFilterInOut on success, NULL on failure. - */ - AVFilterInOut *avfilter_inout_alloc(void); - - /** - * Free the supplied list of AVFilterInOut and set *inout to NULL. - * If *inout is NULL, do nothing. - */ - void avfilter_inout_free(AVFilterInOut **inout); - - /** - * Add a graph described by a string to a graph. - * - * @param graph the filter graph where to link the parsed graph context - * @param filters string to be parsed - * @param inputs pointer to a linked list to the inputs of the graph, may be NULL. - * If non-NULL, *inputs is updated to contain the list of open inputs - * after the parsing, should be freed with avfilter_inout_free(). - * @param outputs pointer to a linked list to the outputs of the graph, may be NULL. - * If non-NULL, *outputs is updated to contain the list of open outputs - * after the parsing, should be freed with avfilter_inout_free(). - * @return non negative on success, a negative AVERROR code on error - */ - int avfilter_graph_parse(AVFilterGraph *graph, const char *filters, - AVFilterInOut **inputs, AVFilterInOut **outputs, - void *log_ctx); - - /** - * Add a graph described by a string to a graph. - * - * @param[in] graph the filter graph where to link the parsed graph context - * @param[in] filters string to be parsed - * @param[out] inputs a linked list of all free (unlinked) inputs of the - * parsed graph will be returned here. It is to be freed - * by the caller using avfilter_inout_free(). - * @param[out] outputs a linked list of all free (unlinked) outputs of the - * parsed graph will be returned here. It is to be freed by the - * caller using avfilter_inout_free(). - * @return zero on success, a negative AVERROR code on error - * - * @note the difference between avfilter_graph_parse2() and - * avfilter_graph_parse() is that in avfilter_graph_parse(), the caller provides - * the lists of inputs and outputs, which therefore must be known before calling - * the function. On the other hand, avfilter_graph_parse2() \em returns the - * inputs and outputs that are left unlinked after parsing the graph and the - * caller then deals with them. Another difference is that in - * avfilter_graph_parse(), the inputs parameter describes inputs of the - * already existing part of the graph; i.e. from the point of view of - * the newly created part, they are outputs. Similarly the outputs parameter - * describes outputs of the already existing filters, which are provided as - * inputs to the parsed filters. - * avfilter_graph_parse2() takes the opposite approach -- it makes no reference - * whatsoever to already existing parts of the graph and the inputs parameter - * will on return contain inputs of the newly parsed part of the graph. - * Analogously the outputs parameter will contain outputs of the newly created - * filters. - */ - int avfilter_graph_parse2(AVFilterGraph *graph, const char *filters, - AVFilterInOut **inputs, - AVFilterInOut **outputs); - - - /** - * Send a command to one or more filter instances. - * - * @param graph the filter graph - * @param target the filter(s) to which the command should be sent - * "all" sends to all filters - * otherwise it can be a filter or filter instance name - * which will send the command to all matching filters. - * @param cmd the command to sent, for handling simplicity all commands must be alphanumeric only - * @param arg the argument for the command - * @param res a buffer with size res_size where the filter(s) can return a response. - * - * @returns >=0 on success otherwise an error code. - * AVERROR(ENOSYS) on unsupported commands - */ - int avfilter_graph_send_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, char *res, int res_len, int flags); - - /** - * Queue a command for one or more filter instances. - * - * @param graph the filter graph - * @param target the filter(s) to which the command should be sent - * "all" sends to all filters - * otherwise it can be a filter or filter instance name - * which will send the command to all matching filters. - * @param cmd the command to sent, for handling simplicity all commands must be alphanummeric only - * @param arg the argument for the command - * @param ts time at which the command should be sent to the filter - * - * @note As this executes commands after this function returns, no return code - * from the filter is provided, also AVFILTER_CMD_FLAG_ONE is not supported. - */ - int avfilter_graph_queue_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, int flags, double ts); - - - /** - * Dump a graph into a human-readable string representation. - * - * @param graph the graph to dump - * @param options formatting options; currently ignored - * @return a string, or NULL in case of memory allocation failure; - * the string must be freed using av_free - */ - char *avfilter_graph_dump(AVFilterGraph *graph, const char *options); - - /** - * Request a frame on the oldest sink link. - * - * If the request returns AVERROR_EOF, try the next. - * - * Note that this function is not meant to be the sole scheduling mechanism - * of a filtergraph, only a convenience function to help drain a filtergraph - * in a balanced way under normal circumstances. - * - * Also note that AVERROR_EOF does not mean that frames did not arrive on - * some of the sinks during the process. - * When there are multiple sink links, in case the requested link - * returns an EOF, this may cause a filter to flush pending frames - * which are sent to another sink link, although unrequested. - * - * @return the return value of ff_request_frame(), - * or AVERROR_EOF if all links returned AVERROR_EOF - */ - int avfilter_graph_request_oldest(AVFilterGraph *graph); -- #endif /* AVFILTER_AVFILTERGRAPH_H */ diff --cc libavfilter/version.h index 021ff0520d9,1a14956f391..f23d9c1d2fc --- a/libavfilter/version.h +++ b/libavfilter/version.h @@@ -29,8 -29,8 +29,8 @@@ #include "libavutil/avutil.h" #define LIBAVFILTER_VERSION_MAJOR 3 - #define LIBAVFILTER_VERSION_MINOR 52 - #define LIBAVFILTER_VERSION_MICRO 102 -#define LIBAVFILTER_VERSION_MINOR 8 -#define LIBAVFILTER_VERSION_MICRO 0 ++#define LIBAVFILTER_VERSION_MINOR 53 ++#define LIBAVFILTER_VERSION_MICRO 100 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ LIBAVFILTER_VERSION_MINOR, \ diff --cc tools/graph2dot.c index d53642f9157,26cb28b0680..167c49ba8d2 --- a/tools/graph2dot.c +++ b/tools/graph2dot.c @@@ -25,10 -25,10 +25,10 @@@ #include #include +#include "libavutil/channel_layout.h" #include "libavutil/mem.h" #include "libavutil/pixdesc.h" - #include "libavfilter/avfiltergraph.h" -#include "libavutil/audioconvert.h" + #include "libavfilter/avfilter.h" #if !HAVE_GETOPT #include "compat/getopt.c"