FFmpeg
avfilter.h
Go to the documentation of this file.
1 /*
2  * filter layer
3  * Copyright (c) 2007 Bobby Bingham
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 #ifndef AVFILTER_AVFILTER_H
23 #define AVFILTER_AVFILTER_H
24 
25 /**
26  * @file
27  * @ingroup lavfi
28  * Main libavfilter public API header
29  */
30 
31 /**
32  * @defgroup lavfi libavfilter
33  * Graph-based frame editing library.
34  *
35  * @{
36  */
37 
38 #include <stddef.h>
39 
40 #include "libavutil/attributes.h"
41 #include "libavutil/avutil.h"
42 #include "libavutil/buffer.h"
43 #include "libavutil/dict.h"
44 #include "libavutil/frame.h"
45 #include "libavutil/log.h"
46 #include "libavutil/samplefmt.h"
47 #include "libavutil/pixfmt.h"
48 #include "libavutil/rational.h"
49 
51 #ifndef HAVE_AV_CONFIG_H
52 /* When included as part of the ffmpeg build, only include the major version
53  * to avoid unnecessary rebuilds. When included externally, keep including
54  * the full version information. */
55 #include "libavfilter/version.h"
56 #endif
57 
58 /**
59  * Return the LIBAVFILTER_VERSION_INT constant.
60  */
61 unsigned avfilter_version(void);
62 
63 /**
64  * Return the libavfilter build-time configuration.
65  */
66 const char *avfilter_configuration(void);
67 
68 /**
69  * Return the libavfilter license.
70  */
71 const char *avfilter_license(void);
72 
73 typedef struct AVFilterContext AVFilterContext;
74 typedef struct AVFilterLink AVFilterLink;
75 typedef struct AVFilterPad AVFilterPad;
76 typedef struct AVFilterFormats AVFilterFormats;
78 
79 /**
80  * Get the name of an AVFilterPad.
81  *
82  * @param pads an array of AVFilterPads
83  * @param pad_idx index of the pad in the array; it is the caller's
84  * responsibility to ensure the index is valid
85  *
86  * @return name of the pad_idx'th pad in pads
87  */
88 const char *avfilter_pad_get_name(const AVFilterPad *pads, int pad_idx);
89 
90 /**
91  * Get the type of an AVFilterPad.
92  *
93  * @param pads an array of AVFilterPads
94  * @param pad_idx index of the pad in the array; it is the caller's
95  * responsibility to ensure the index is valid
96  *
97  * @return type of the pad_idx'th pad in pads
98  */
99 enum AVMediaType avfilter_pad_get_type(const AVFilterPad *pads, int pad_idx);
100 
101 /**
102  * The number of the filter inputs is not determined just by AVFilter.inputs.
103  * The filter might add additional inputs during initialization depending on the
104  * options supplied to it.
105  */
106 #define AVFILTER_FLAG_DYNAMIC_INPUTS (1 << 0)
107 /**
108  * The number of the filter outputs is not determined just by AVFilter.outputs.
109  * The filter might add additional outputs during initialization depending on
110  * the options supplied to it.
111  */
112 #define AVFILTER_FLAG_DYNAMIC_OUTPUTS (1 << 1)
113 /**
114  * The filter supports multithreading by splitting frames into multiple parts
115  * and processing them concurrently.
116  */
117 #define AVFILTER_FLAG_SLICE_THREADS (1 << 2)
118 /**
119  * The filter is a "metadata" filter - it does not modify the frame data in any
120  * way. It may only affect the metadata (i.e. those fields copied by
121  * av_frame_copy_props()).
122  *
123  * More precisely, this means:
124  * - video: the data of any frame output by the filter must be exactly equal to
125  * some frame that is received on one of its inputs. Furthermore, all frames
126  * produced on a given output must correspond to frames received on the same
127  * input and their order must be unchanged. Note that the filter may still
128  * drop or duplicate the frames.
129  * - audio: the data produced by the filter on any of its outputs (viewed e.g.
130  * as an array of interleaved samples) must be exactly equal to the data
131  * received by the filter on one of its inputs.
132  */
133 #define AVFILTER_FLAG_METADATA_ONLY (1 << 3)
134 
135 /**
136  * The filter can create hardware frames using AVFilterContext.hw_device_ctx.
137  */
138 #define AVFILTER_FLAG_HWDEVICE (1 << 4)
139 /**
140  * Some filters support a generic "enable" expression option that can be used
141  * to enable or disable a filter in the timeline. Filters supporting this
142  * option have this flag set. When the enable expression is false, the default
143  * no-op filter_frame() function is called in place of the filter_frame()
144  * callback defined on each input pad, thus the frame is passed unchanged to
145  * the next filters.
146  */
147 #define AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC (1 << 16)
148 /**
149  * Same as AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC, except that the filter will
150  * have its filter_frame() callback(s) called as usual even when the enable
151  * expression is false. The filter will disable filtering within the
152  * filter_frame() callback(s) itself, for example executing code depending on
153  * the AVFilterContext->is_disabled value.
154  */
155 #define AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL (1 << 17)
156 /**
157  * Handy mask to test whether the filter supports or no the timeline feature
158  * (internally or generically).
159  */
160 #define AVFILTER_FLAG_SUPPORT_TIMELINE (AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL)
161 
162 /**
163  * Filter definition. This defines the pads a filter contains, and all the
164  * callback functions used to interact with the filter.
165  */
166 typedef struct AVFilter {
167  /**
168  * Filter name. Must be non-NULL and unique among filters.
169  */
170  const char *name;
171 
172  /**
173  * A description of the filter. May be NULL.
174  *
175  * You should use the NULL_IF_CONFIG_SMALL() macro to define it.
176  */
177  const char *description;
178 
179  /**
180  * List of static inputs.
181  *
182  * NULL if there are no (static) inputs. Instances of filters with
183  * AVFILTER_FLAG_DYNAMIC_INPUTS set may have more inputs than present in
184  * this list.
185  */
187 
188  /**
189  * List of static outputs.
190  *
191  * NULL if there are no (static) outputs. Instances of filters with
192  * AVFILTER_FLAG_DYNAMIC_OUTPUTS set may have more outputs than present in
193  * this list.
194  */
196 
197  /**
198  * A class for the private data, used to declare filter private AVOptions.
199  * This field is NULL for filters that do not declare any options.
200  *
201  * If this field is non-NULL, the first member of the filter private data
202  * must be a pointer to AVClass, which will be set by libavfilter generic
203  * code to this class.
204  */
206 
207  /**
208  * A combination of AVFILTER_FLAG_*
209  */
210  int flags;
211 
212  /*****************************************************************
213  * All fields below this line are not part of the public API. They
214  * may not be used outside of libavfilter and can be changed and
215  * removed at will.
216  * New public fields should be added right above.
217  *****************************************************************
218  */
219 
220  /**
221  * The number of entries in the list of inputs.
222  */
223  uint8_t nb_inputs;
224 
225  /**
226  * The number of entries in the list of outputs.
227  */
228  uint8_t nb_outputs;
229 
230  /**
231  * This field determines the state of the formats union.
232  * It is an enum FilterFormatsState value.
233  */
234  uint8_t formats_state;
235 
236  /**
237  * Filter pre-initialization function
238  *
239  * This callback will be called immediately after the filter context is
240  * allocated, to allow allocating and initing sub-objects.
241  *
242  * If this callback is not NULL, the uninit callback will be called on
243  * allocation failure.
244  *
245  * @return 0 on success,
246  * AVERROR code on failure (but the code will be
247  * dropped and treated as ENOMEM by the calling code)
248  */
250 
251  /**
252  * Filter initialization function.
253  *
254  * This callback will be called only once during the filter lifetime, after
255  * all the options have been set, but before links between filters are
256  * established and format negotiation is done.
257  *
258  * Basic filter initialization should be done here. Filters with dynamic
259  * inputs and/or outputs should create those inputs/outputs here based on
260  * provided options. No more changes to this filter's inputs/outputs can be
261  * done after this callback.
262  *
263  * This callback must not assume that the filter links exist or frame
264  * parameters are known.
265  *
266  * @ref AVFilter.uninit "uninit" is guaranteed to be called even if
267  * initialization fails, so this callback does not have to clean up on
268  * failure.
269  *
270  * @return 0 on success, a negative AVERROR on failure
271  */
273 
274  /**
275  * Filter uninitialization function.
276  *
277  * Called only once right before the filter is freed. Should deallocate any
278  * memory held by the filter, release any buffer references, etc. It does
279  * not need to deallocate the AVFilterContext.priv memory itself.
280  *
281  * This callback may be called even if @ref AVFilter.init "init" was not
282  * called or failed, so it must be prepared to handle such a situation.
283  */
285 
286  /**
287  * The state of the following union is determined by formats_state.
288  * See the documentation of enum FilterFormatsState in internal.h.
289  */
290  union {
291  /**
292  * Query formats supported by the filter on its inputs and outputs.
293  *
294  * This callback is called after the filter is initialized (so the inputs
295  * and outputs are fixed), shortly before the format negotiation. This
296  * callback may be called more than once.
297  *
298  * This callback must set ::AVFilterLink's
299  * @ref AVFilterFormatsConfig.formats "outcfg.formats"
300  * on every input link and
301  * @ref AVFilterFormatsConfig.formats "incfg.formats"
302  * on every output link to a list of pixel/sample formats that the filter
303  * supports on that link.
304  * For audio links, this filter must also set
305  * @ref AVFilterFormatsConfig.samplerates "incfg.samplerates"
306  * /
307  * @ref AVFilterFormatsConfig.samplerates "outcfg.samplerates"
308  * and @ref AVFilterFormatsConfig.channel_layouts "incfg.channel_layouts"
309  * /
310  * @ref AVFilterFormatsConfig.channel_layouts "outcfg.channel_layouts"
311  * analogously.
312  *
313  * This callback must never be NULL if the union is in this state.
314  *
315  * @return zero on success, a negative value corresponding to an
316  * AVERROR code otherwise
317  */
319  /**
320  * A pointer to an array of admissible pixel formats delimited
321  * by AV_PIX_FMT_NONE. The generic code will use this list
322  * to indicate that this filter supports each of these pixel formats,
323  * provided that all inputs and outputs use the same pixel format.
324  *
325  * This list must never be NULL if the union is in this state.
326  * The type of all inputs and outputs of filters using this must
327  * be AVMEDIA_TYPE_VIDEO.
328  */
330  /**
331  * Analogous to pixels, but delimited by AV_SAMPLE_FMT_NONE
332  * and restricted to filters that only have AVMEDIA_TYPE_AUDIO
333  * inputs and outputs.
334  *
335  * In addition to that the generic code will mark all inputs
336  * and all outputs as supporting all sample rates and every
337  * channel count and channel layout, as long as all inputs
338  * and outputs use the same sample rate and channel count/layout.
339  */
341  /**
342  * Equivalent to { pix_fmt, AV_PIX_FMT_NONE } as pixels_list.
343  */
345  /**
346  * Equivalent to { sample_fmt, AV_SAMPLE_FMT_NONE } as samples_list.
347  */
349  } formats;
350 
351  int priv_size; ///< size of private data to allocate for the filter
352 
353  int flags_internal; ///< Additional flags for avfilter internal use only.
354 
355  /**
356  * Make the filter instance process a command.
357  *
358  * @param cmd the command to process, for handling simplicity all commands must be alphanumeric only
359  * @param arg the argument for the command
360  * @param res a buffer with size res_size where the filter(s) can return a response. This must not change when the command is not supported.
361  * @param flags if AVFILTER_CMD_FLAG_FAST is set and the command would be
362  * time consuming then a filter should treat it like an unsupported command
363  *
364  * @returns >=0 on success otherwise an error code.
365  * AVERROR(ENOSYS) on unsupported commands
366  */
367  int (*process_command)(AVFilterContext *, const char *cmd, const char *arg, char *res, int res_len, int flags);
368 
369  /**
370  * Filter activation function.
371  *
372  * Called when any processing is needed from the filter, instead of any
373  * filter_frame and request_frame on pads.
374  *
375  * The function must examine inlinks and outlinks and perform a single
376  * step of processing. If there is nothing to do, the function must do
377  * nothing and not return an error. If more steps are or may be
378  * possible, it must use ff_filter_set_ready() to schedule another
379  * activation.
380  */
382 } AVFilter;
383 
384 /**
385  * Get the number of elements in an AVFilter's inputs or outputs array.
386  */
387 unsigned avfilter_filter_pad_count(const AVFilter *filter, int is_output);
388 
389 /**
390  * Process multiple parts of the frame concurrently.
391  */
392 #define AVFILTER_THREAD_SLICE (1 << 0)
393 
394 typedef struct AVFilterInternal AVFilterInternal;
395 
396 /** An instance of a filter */
398  const AVClass *av_class; ///< needed for av_log() and filters common options
399 
400  const AVFilter *filter; ///< the AVFilter of which this is an instance
401 
402  char *name; ///< name of this filter instance
403 
404  AVFilterPad *input_pads; ///< array of input pads
405  AVFilterLink **inputs; ///< array of pointers to input links
406  unsigned nb_inputs; ///< number of input pads
407 
408  AVFilterPad *output_pads; ///< array of output pads
409  AVFilterLink **outputs; ///< array of pointers to output links
410  unsigned nb_outputs; ///< number of output pads
411 
412  void *priv; ///< private data for use by the filter
413 
414  struct AVFilterGraph *graph; ///< filtergraph this filter belongs to
415 
416  /**
417  * Type of multithreading being allowed/used. A combination of
418  * AVFILTER_THREAD_* flags.
419  *
420  * May be set by the caller before initializing the filter to forbid some
421  * or all kinds of multithreading for this filter. The default is allowing
422  * everything.
423  *
424  * When the filter is initialized, this field is combined using bit AND with
425  * AVFilterGraph.thread_type to get the final mask used for determining
426  * allowed threading types. I.e. a threading type needs to be set in both
427  * to be allowed.
428  *
429  * After the filter is initialized, libavfilter sets this field to the
430  * threading type that is actually used (0 for no multithreading).
431  */
433 
434  /**
435  * An opaque struct for libavfilter internal use.
436  */
437  AVFilterInternal *internal;
438 
440 
441  char *enable_str; ///< enable expression string
442  void *enable; ///< parsed expression (AVExpr*)
443  double *var_values; ///< variable values for the enable expression
444  int is_disabled; ///< the enabled state from the last expression evaluation
445 
446  /**
447  * For filters which will create hardware frames, sets the device the
448  * filter should create them in. All other filters will ignore this field:
449  * in particular, a filter which consumes or processes hardware frames will
450  * instead use the hw_frames_ctx field in AVFilterLink to carry the
451  * hardware context information.
452  *
453  * May be set by the caller on filters flagged with AVFILTER_FLAG_HWDEVICE
454  * before initializing the filter with avfilter_init_str() or
455  * avfilter_init_dict().
456  */
458 
459  /**
460  * Max number of threads allowed in this filter instance.
461  * If <= 0, its value is ignored.
462  * Overrides global number of threads set per filter graph.
463  */
465 
466  /**
467  * Ready status of the filter.
468  * A non-0 value means that the filter needs activating;
469  * a higher value suggests a more urgent activation.
470  */
471  unsigned ready;
472 
473  /**
474  * Sets the number of extra hardware frames which the filter will
475  * allocate on its output links for use in following filters or by
476  * the caller.
477  *
478  * Some hardware filters require all frames that they will use for
479  * output to be defined in advance before filtering starts. For such
480  * filters, any hardware frame pools used for output must therefore be
481  * of fixed size. The extra frames set here are on top of any number
482  * that the filter needs internally in order to operate normally.
483  *
484  * This field must be set before the graph containing this filter is
485  * configured.
486  */
488 };
489 
490 /**
491  * Lists of formats / etc. supported by an end of a link.
492  *
493  * This structure is directly part of AVFilterLink, in two copies:
494  * one for the source filter, one for the destination filter.
495 
496  * These lists are used for negotiating the format to actually be used,
497  * which will be loaded into the format and channel_layout members of
498  * AVFilterLink, when chosen.
499  */
500 typedef struct AVFilterFormatsConfig {
501 
502  /**
503  * List of supported formats (pixel or sample).
504  */
506 
507  /**
508  * Lists of supported sample rates, only for audio.
509  */
511 
512  /**
513  * Lists of supported channel layouts, only for audio.
514  */
516 
518 
519 /**
520  * A link between two filters. This contains pointers to the source and
521  * destination filters between which this link exists, and the indexes of
522  * the pads involved. In addition, this link also contains the parameters
523  * which have been negotiated and agreed upon between the filter, such as
524  * image dimensions, format, etc.
525  *
526  * Applications must not normally access the link structure directly.
527  * Use the buffersrc and buffersink API instead.
528  * In the future, access to the header may be reserved for filters
529  * implementation.
530  */
531 struct AVFilterLink {
532  AVFilterContext *src; ///< source filter
533  AVFilterPad *srcpad; ///< output pad on the source filter
534 
535  AVFilterContext *dst; ///< dest filter
536  AVFilterPad *dstpad; ///< input pad on the dest filter
537 
538  enum AVMediaType type; ///< filter media type
539 
540  /* These parameters apply only to video */
541  int w; ///< agreed upon image width
542  int h; ///< agreed upon image height
543  AVRational sample_aspect_ratio; ///< agreed upon sample aspect ratio
544  /* These parameters apply only to audio */
545 #if FF_API_OLD_CHANNEL_LAYOUT
546  /**
547  * channel layout of current buffer (see libavutil/channel_layout.h)
548  * @deprecated use ch_layout
549  */
551  uint64_t channel_layout;
552 #endif
553  int sample_rate; ///< samples per second
554 
555  int format; ///< agreed upon media format
556 
557  /**
558  * Define the time base used by the PTS of the frames/samples
559  * which will pass through this link.
560  * During the configuration stage, each filter is supposed to
561  * change only the output timebase, while the timebase of the
562  * input link is assumed to be an unchangeable property.
563  */
565 
566  AVChannelLayout ch_layout; ///< channel layout of current buffer (see libavutil/channel_layout.h)
567 
568  /*****************************************************************
569  * All fields below this line are not part of the public API. They
570  * may not be used outside of libavfilter and can be changed and
571  * removed at will.
572  * New public fields should be added right above.
573  *****************************************************************
574  */
575 
576  /**
577  * Lists of supported formats / etc. supported by the input filter.
578  */
580 
581  /**
582  * Lists of supported formats / etc. supported by the output filter.
583  */
585 
586  /** stage of the initialization of the link properties (dimensions, etc) */
587  enum {
588  AVLINK_UNINIT = 0, ///< not started
589  AVLINK_STARTINIT, ///< started, but incomplete
590  AVLINK_INIT ///< complete
591  } init_state;
592 
593  /**
594  * Graph the filter belongs to.
595  */
597 
598  /**
599  * Current timestamp of the link, as defined by the most recent
600  * frame(s), in link time_base units.
601  */
602  int64_t current_pts;
603 
604  /**
605  * Current timestamp of the link, as defined by the most recent
606  * frame(s), in AV_TIME_BASE units.
607  */
608  int64_t current_pts_us;
609 
610  /**
611  * Index in the age array.
612  */
614 
615  /**
616  * Frame rate of the stream on the link, or 1/0 if unknown or variable;
617  * if left to 0/0, will be automatically copied from the first input
618  * of the source filter if it exists.
619  *
620  * Sources should set it to the best estimation of the real frame rate.
621  * If the source frame rate is unknown or variable, set this to 1/0.
622  * Filters should update it if necessary depending on their function.
623  * Sinks can use it to set a default output frame rate.
624  * It is similar to the r_frame_rate field in AVStream.
625  */
627 
628  /**
629  * Minimum number of samples to filter at once. If filter_frame() is
630  * called with fewer samples, it will accumulate them in fifo.
631  * This field and the related ones must not be changed after filtering
632  * has started.
633  * If 0, all related fields are ignored.
634  */
636 
637  /**
638  * Maximum number of samples to filter at once. If filter_frame() is
639  * called with more samples, it will split them.
640  */
642 
643  /**
644  * Number of past frames sent through the link.
645  */
647 
648  /**
649  * Number of past samples sent through the link.
650  */
652 
653  /**
654  * A pointer to a FFFramePool struct.
655  */
656  void *frame_pool;
657 
658  /**
659  * True if a frame is currently wanted on the output of this filter.
660  * Set when ff_request_frame() is called by the output,
661  * cleared when a frame is filtered.
662  */
664 
665  /**
666  * For hwaccel pixel formats, this should be a reference to the
667  * AVHWFramesContext describing the frames.
668  */
670 
671 #ifndef FF_INTERNAL_FIELDS
672 
673  /**
674  * Internal structure members.
675  * The fields below this limit are internal for libavfilter's use
676  * and must in no way be accessed by applications.
677  */
678  char reserved[0xF000];
679 
680 #else /* FF_INTERNAL_FIELDS */
681 
682  /**
683  * Queue of frames waiting to be filtered.
684  */
685  FFFrameQueue fifo;
686 
687  /**
688  * If set, the source filter can not generate a frame as is.
689  * The goal is to avoid repeatedly calling the request_frame() method on
690  * the same link.
691  */
692  int frame_blocked_in;
693 
694  /**
695  * Link input status.
696  * If not zero, all attempts of filter_frame will fail with the
697  * corresponding code.
698  */
699  int status_in;
700 
701  /**
702  * Timestamp of the input status change.
703  */
704  int64_t status_in_pts;
705 
706  /**
707  * Link output status.
708  * If not zero, all attempts of request_frame will fail with the
709  * corresponding code.
710  */
711  int status_out;
712 
713 #endif /* FF_INTERNAL_FIELDS */
714 
715 };
716 
717 /**
718  * Link two filters together.
719  *
720  * @param src the source filter
721  * @param srcpad index of the output pad on the source filter
722  * @param dst the destination filter
723  * @param dstpad index of the input pad on the destination filter
724  * @return zero on success
725  */
726 int avfilter_link(AVFilterContext *src, unsigned srcpad,
727  AVFilterContext *dst, unsigned dstpad);
728 
729 /**
730  * Free the link in *link, and set its pointer to NULL.
731  */
733 
734 /**
735  * Negotiate the media format, dimensions, etc of all inputs to a filter.
736  *
737  * @param filter the filter to negotiate the properties for its inputs
738  * @return zero on successful negotiation
739  */
741 
742 #define AVFILTER_CMD_FLAG_ONE 1 ///< Stop once a filter understood the command (for target=all for example), fast filters are favored automatically
743 #define AVFILTER_CMD_FLAG_FAST 2 ///< Only execute command when its fast (like a video out that supports contrast adjustment in hw)
744 
745 /**
746  * Make the filter instance process a command.
747  * It is recommended to use avfilter_graph_send_command().
748  */
749 int avfilter_process_command(AVFilterContext *filter, const char *cmd, const char *arg, char *res, int res_len, int flags);
750 
751 /**
752  * Iterate over all registered filters.
753  *
754  * @param opaque a pointer where libavfilter will store the iteration state. Must
755  * point to NULL to start the iteration.
756  *
757  * @return the next registered filter or NULL when the iteration is
758  * finished
759  */
760 const AVFilter *av_filter_iterate(void **opaque);
761 
762 /**
763  * Get a filter definition matching the given name.
764  *
765  * @param name the filter name to find
766  * @return the filter definition, if any matching one is registered.
767  * NULL if none found.
768  */
769 const AVFilter *avfilter_get_by_name(const char *name);
770 
771 
772 /**
773  * Initialize a filter with the supplied parameters.
774  *
775  * @param ctx uninitialized filter context to initialize
776  * @param args Options to initialize the filter with. This must be a
777  * ':'-separated list of options in the 'key=value' form.
778  * May be NULL if the options have been set directly using the
779  * AVOptions API or there are no options that need to be set.
780  * @return 0 on success, a negative AVERROR on failure
781  */
782 int avfilter_init_str(AVFilterContext *ctx, const char *args);
783 
784 /**
785  * Initialize a filter with the supplied dictionary of options.
786  *
787  * @param ctx uninitialized filter context to initialize
788  * @param options An AVDictionary filled with options for this filter. On
789  * return this parameter will be destroyed and replaced with
790  * a dict containing options that were not found. This dictionary
791  * must be freed by the caller.
792  * May be NULL, then this function is equivalent to
793  * avfilter_init_str() with the second parameter set to NULL.
794  * @return 0 on success, a negative AVERROR on failure
795  *
796  * @note This function and avfilter_init_str() do essentially the same thing,
797  * the difference is in manner in which the options are passed. It is up to the
798  * calling code to choose whichever is more preferable. The two functions also
799  * behave differently when some of the provided options are not declared as
800  * supported by the filter. In such a case, avfilter_init_str() will fail, but
801  * this function will leave those extra options in the options AVDictionary and
802  * continue as usual.
803  */
805 
806 /**
807  * Free a filter context. This will also remove the filter from its
808  * filtergraph's list of filters.
809  *
810  * @param filter the filter to free
811  */
813 
814 /**
815  * Insert a filter in the middle of an existing link.
816  *
817  * @param link the link into which the filter should be inserted
818  * @param filt the filter to be inserted
819  * @param filt_srcpad_idx the input pad on the filter to connect
820  * @param filt_dstpad_idx the output pad on the filter to connect
821  * @return zero on success
822  */
824  unsigned filt_srcpad_idx, unsigned filt_dstpad_idx);
825 
826 /**
827  * @return AVClass for AVFilterContext.
828  *
829  * @see av_opt_find().
830  */
831 const AVClass *avfilter_get_class(void);
832 
834 
835 /**
836  * A function pointer passed to the @ref AVFilterGraph.execute callback to be
837  * executed multiple times, possibly in parallel.
838  *
839  * @param ctx the filter context the job belongs to
840  * @param arg an opaque parameter passed through from @ref
841  * AVFilterGraph.execute
842  * @param jobnr the index of the job being executed
843  * @param nb_jobs the total number of jobs
844  *
845  * @return 0 on success, a negative AVERROR on error
846  */
847 typedef int (avfilter_action_func)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs);
848 
849 /**
850  * A function executing multiple jobs, possibly in parallel.
851  *
852  * @param ctx the filter context to which the jobs belong
853  * @param func the function to be called multiple times
854  * @param arg the argument to be passed to func
855  * @param ret a nb_jobs-sized array to be filled with return values from each
856  * invocation of func
857  * @param nb_jobs the number of jobs to execute
858  *
859  * @return 0 on success, a negative AVERROR on error
860  */
862  void *arg, int *ret, int nb_jobs);
863 
864 typedef struct AVFilterGraph {
867  unsigned nb_filters;
868 
869  char *scale_sws_opts; ///< sws options to use for the auto-inserted scale filters
870 
871  /**
872  * Type of multithreading allowed for filters in this graph. A combination
873  * of AVFILTER_THREAD_* flags.
874  *
875  * May be set by the caller at any point, the setting will apply to all
876  * filters initialized after that. The default is allowing everything.
877  *
878  * When a filter in this graph is initialized, this field is combined using
879  * bit AND with AVFilterContext.thread_type to get the final mask used for
880  * determining allowed threading types. I.e. a threading type needs to be
881  * set in both to be allowed.
882  */
884 
885  /**
886  * Maximum number of threads used by filters in this graph. May be set by
887  * the caller before adding any filters to the filtergraph. Zero (the
888  * default) means that the number of threads is determined automatically.
889  */
891 
892  /**
893  * Opaque object for libavfilter internal use.
894  */
896 
897  /**
898  * Opaque user data. May be set by the caller to an arbitrary value, e.g. to
899  * be used from callbacks like @ref AVFilterGraph.execute.
900  * Libavfilter will not touch this field in any way.
901  */
902  void *opaque;
903 
904  /**
905  * This callback may be set by the caller immediately after allocating the
906  * graph and before adding any filters to it, to provide a custom
907  * multithreading implementation.
908  *
909  * If set, filters with slice threading capability will call this callback
910  * to execute multiple jobs in parallel.
911  *
912  * If this field is left unset, libavfilter will use its internal
913  * implementation, which may or may not be multithreaded depending on the
914  * platform and build options.
915  */
917 
918  char *aresample_swr_opts; ///< swr options to use for the auto-inserted aresample filters, Access ONLY through AVOptions
919 
920  /**
921  * Private fields
922  *
923  * The following fields are for internal use only.
924  * Their type, offset, number and semantic can change without notice.
925  */
926 
929 
931 } AVFilterGraph;
932 
933 /**
934  * Allocate a filter graph.
935  *
936  * @return the allocated filter graph on success or NULL.
937  */
939 
940 /**
941  * Create a new filter instance in a filter graph.
942  *
943  * @param graph graph in which the new filter will be used
944  * @param filter the filter to create an instance of
945  * @param name Name to give to the new instance (will be copied to
946  * AVFilterContext.name). This may be used by the caller to identify
947  * different filters, libavfilter itself assigns no semantics to
948  * this parameter. May be NULL.
949  *
950  * @return the context of the newly created filter instance (note that it is
951  * also retrievable directly through AVFilterGraph.filters or with
952  * avfilter_graph_get_filter()) on success or NULL on failure.
953  */
955  const AVFilter *filter,
956  const char *name);
957 
958 /**
959  * Get a filter instance identified by instance name from graph.
960  *
961  * @param graph filter graph to search through.
962  * @param name filter instance name (should be unique in the graph).
963  * @return the pointer to the found filter instance or NULL if it
964  * cannot be found.
965  */
967 
968 /**
969  * Create and add a filter instance into an existing graph.
970  * The filter instance is created from the filter filt and inited
971  * with the parameter args. opaque is currently ignored.
972  *
973  * In case of success put in *filt_ctx the pointer to the created
974  * filter instance, otherwise set *filt_ctx to NULL.
975  *
976  * @param name the instance name to give to the created filter instance
977  * @param graph_ctx the filter graph
978  * @return a negative AVERROR error code in case of failure, a non
979  * negative value otherwise
980  */
982  const char *name, const char *args, void *opaque,
983  AVFilterGraph *graph_ctx);
984 
985 /**
986  * Enable or disable automatic format conversion inside the graph.
987  *
988  * Note that format conversion can still happen inside explicitly inserted
989  * scale and aresample filters.
990  *
991  * @param flags any of the AVFILTER_AUTO_CONVERT_* constants
992  */
994 
995 enum {
996  AVFILTER_AUTO_CONVERT_ALL = 0, /**< all automatic conversions enabled */
997  AVFILTER_AUTO_CONVERT_NONE = -1, /**< all automatic conversions disabled */
998 };
999 
1000 /**
1001  * Check validity and configure all the links and formats in the graph.
1002  *
1003  * @param graphctx the filter graph
1004  * @param log_ctx context used for logging
1005  * @return >= 0 in case of success, a negative AVERROR code otherwise
1006  */
1007 int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx);
1008 
1009 /**
1010  * Free a graph, destroy its links, and set *graph to NULL.
1011  * If *graph is NULL, do nothing.
1012  */
1013 void avfilter_graph_free(AVFilterGraph **graph);
1014 
1015 /**
1016  * A linked-list of the inputs/outputs of the filter chain.
1017  *
1018  * This is mainly useful for avfilter_graph_parse() / avfilter_graph_parse2(),
1019  * where it is used to communicate open (unlinked) inputs and outputs from and
1020  * to the caller.
1021  * This struct specifies, per each not connected pad contained in the graph, the
1022  * filter context and the pad index required for establishing a link.
1023  */
1024 typedef struct AVFilterInOut {
1025  /** unique name for this input/output in the list */
1026  char *name;
1027 
1028  /** filter context associated to this input/output */
1030 
1031  /** index of the filt_ctx pad to use for linking */
1032  int pad_idx;
1033 
1034  /** next input/input in the list, NULL if this is the last */
1036 } AVFilterInOut;
1037 
1038 /**
1039  * Allocate a single AVFilterInOut entry.
1040  * Must be freed with avfilter_inout_free().
1041  * @return allocated AVFilterInOut on success, NULL on failure.
1042  */
1044 
1045 /**
1046  * Free the supplied list of AVFilterInOut and set *inout to NULL.
1047  * If *inout is NULL, do nothing.
1048  */
1049 void avfilter_inout_free(AVFilterInOut **inout);
1050 
1051 /**
1052  * Add a graph described by a string to a graph.
1053  *
1054  * @note The caller must provide the lists of inputs and outputs,
1055  * which therefore must be known before calling the function.
1056  *
1057  * @note The inputs parameter describes inputs of the already existing
1058  * part of the graph; i.e. from the point of view of the newly created
1059  * part, they are outputs. Similarly the outputs parameter describes
1060  * outputs of the already existing filters, which are provided as
1061  * inputs to the parsed filters.
1062  *
1063  * @param graph the filter graph where to link the parsed graph context
1064  * @param filters string to be parsed
1065  * @param inputs linked list to the inputs of the graph
1066  * @param outputs linked list to the outputs of the graph
1067  * @return zero on success, a negative AVERROR code on error
1068  */
1069 int avfilter_graph_parse(AVFilterGraph *graph, const char *filters,
1071  void *log_ctx);
1072 
1073 /**
1074  * Add a graph described by a string to a graph.
1075  *
1076  * In the graph filters description, if the input label of the first
1077  * filter is not specified, "in" is assumed; if the output label of
1078  * the last filter is not specified, "out" is assumed.
1079  *
1080  * @param graph the filter graph where to link the parsed graph context
1081  * @param filters string to be parsed
1082  * @param inputs pointer to a linked list to the inputs of the graph, may be NULL.
1083  * If non-NULL, *inputs is updated to contain the list of open inputs
1084  * after the parsing, should be freed with avfilter_inout_free().
1085  * @param outputs pointer to a linked list to the outputs of the graph, may be NULL.
1086  * If non-NULL, *outputs is updated to contain the list of open outputs
1087  * after the parsing, should be freed with avfilter_inout_free().
1088  * @return non negative on success, a negative AVERROR code on error
1089  */
1090 int avfilter_graph_parse_ptr(AVFilterGraph *graph, const char *filters,
1092  void *log_ctx);
1093 
1094 /**
1095  * Add a graph described by a string to a graph.
1096  *
1097  * @param[in] graph the filter graph where to link the parsed graph context
1098  * @param[in] filters string to be parsed
1099  * @param[out] inputs a linked list of all free (unlinked) inputs of the
1100  * parsed graph will be returned here. It is to be freed
1101  * by the caller using avfilter_inout_free().
1102  * @param[out] outputs a linked list of all free (unlinked) outputs of the
1103  * parsed graph will be returned here. It is to be freed by the
1104  * caller using avfilter_inout_free().
1105  * @return zero on success, a negative AVERROR code on error
1106  *
1107  * @note This function returns the inputs and outputs that are left
1108  * unlinked after parsing the graph and the caller then deals with
1109  * them.
1110  * @note This function makes no reference whatsoever to already
1111  * existing parts of the graph and the inputs parameter will on return
1112  * contain inputs of the newly parsed part of the graph. Analogously
1113  * the outputs parameter will contain outputs of the newly created
1114  * filters.
1115  */
1116 int avfilter_graph_parse2(AVFilterGraph *graph, const char *filters,
1119 
1120 /**
1121  * Parameters of a filter's input or output pad.
1122  *
1123  * Created as a child of AVFilterParams by avfilter_graph_segment_parse().
1124  * Freed in avfilter_graph_segment_free().
1125  */
1126 typedef struct AVFilterPadParams {
1127  /**
1128  * An av_malloc()'ed string containing the pad label.
1129  *
1130  * May be av_free()'d and set to NULL by the caller, in which case this pad
1131  * will be treated as unlabeled for linking.
1132  * May also be replaced by another av_malloc()'ed string.
1133  */
1134  char *label;
1136 
1137 /**
1138  * Parameters describing a filter to be created in a filtergraph.
1139  *
1140  * Created as a child of AVFilterGraphSegment by avfilter_graph_segment_parse().
1141  * Freed in avfilter_graph_segment_free().
1142  */
1143 typedef struct AVFilterParams {
1144  /**
1145  * The filter context.
1146  *
1147  * Created by avfilter_graph_segment_create_filters() based on
1148  * AVFilterParams.filter_name and instance_name.
1149  *
1150  * Callers may also create the filter context manually, then they should
1151  * av_free() filter_name and set it to NULL. Such AVFilterParams instances
1152  * are then skipped by avfilter_graph_segment_create_filters().
1153  */
1155 
1156  /**
1157  * Name of the AVFilter to be used.
1158  *
1159  * An av_malloc()'ed string, set by avfilter_graph_segment_parse(). Will be
1160  * passed to avfilter_get_by_name() by
1161  * avfilter_graph_segment_create_filters().
1162  *
1163  * Callers may av_free() this string and replace it with another one or
1164  * NULL. If the caller creates the filter instance manually, this string
1165  * MUST be set to NULL.
1166  *
1167  * When both AVFilterParams.filter an AVFilterParams.filter_name are NULL,
1168  * this AVFilterParams instance is skipped by avfilter_graph_segment_*()
1169  * functions.
1170  */
1172  /**
1173  * Name to be used for this filter instance.
1174  *
1175  * An av_malloc()'ed string, may be set by avfilter_graph_segment_parse() or
1176  * left NULL. The caller may av_free() this string and replace with another
1177  * one or NULL.
1178  *
1179  * Will be used by avfilter_graph_segment_create_filters() - passed as the
1180  * third argument to avfilter_graph_alloc_filter(), then freed and set to
1181  * NULL.
1182  */
1184 
1185  /**
1186  * Options to be apllied to the filter.
1187  *
1188  * Filled by avfilter_graph_segment_parse(). Afterwards may be freely
1189  * modified by the caller.
1190  *
1191  * Will be applied to the filter by avfilter_graph_segment_apply_opts()
1192  * with an equivalent of av_opt_set_dict2(filter, &opts, AV_OPT_SEARCH_CHILDREN),
1193  * i.e. any unapplied options will be left in this dictionary.
1194  */
1196 
1198  unsigned nb_inputs;
1199 
1201  unsigned nb_outputs;
1202 } AVFilterParams;
1203 
1204 /**
1205  * A filterchain is a list of filter specifications.
1206  *
1207  * Created as a child of AVFilterGraphSegment by avfilter_graph_segment_parse().
1208  * Freed in avfilter_graph_segment_free().
1209  */
1210 typedef struct AVFilterChain {
1212  size_t nb_filters;
1213 } AVFilterChain;
1214 
1215 /**
1216  * A parsed representation of a filtergraph segment.
1217  *
1218  * A filtergraph segment is conceptually a list of filterchains, with some
1219  * supplementary information (e.g. format conversion flags).
1220  *
1221  * Created by avfilter_graph_segment_parse(). Must be freed with
1222  * avfilter_graph_segment_free().
1223  */
1224 typedef struct AVFilterGraphSegment {
1225  /**
1226  * The filtergraph this segment is associated with.
1227  * Set by avfilter_graph_segment_parse().
1228  */
1230 
1231  /**
1232  * A list of filter chain contained in this segment.
1233  * Set in avfilter_graph_segment_parse().
1234  */
1236  size_t nb_chains;
1237 
1238  /**
1239  * A string containing a colon-separated list of key=value options applied
1240  * to all scale filters in this segment.
1241  *
1242  * May be set by avfilter_graph_segment_parse().
1243  * The caller may free this string with av_free() and replace it with a
1244  * different av_malloc()'ed string.
1245  */
1248 
1249 /**
1250  * Parse a textual filtergraph description into an intermediate form.
1251  *
1252  * This intermediate representation is intended to be modified by the caller as
1253  * described in the documentation of AVFilterGraphSegment and its children, and
1254  * then applied to the graph either manually or with other
1255  * avfilter_graph_segment_*() functions. See the documentation for
1256  * avfilter_graph_segment_apply() for the canonical way to apply
1257  * AVFilterGraphSegment.
1258  *
1259  * @param graph Filter graph the parsed segment is associated with. Will only be
1260  * used for logging and similar auxiliary purposes. The graph will
1261  * not be actually modified by this function - the parsing results
1262  * are instead stored in seg for further processing.
1263  * @param graph_str a string describing the filtergraph segment
1264  * @param flags reserved for future use, caller must set to 0 for now
1265  * @param seg A pointer to the newly-created AVFilterGraphSegment is written
1266  * here on success. The graph segment is owned by the caller and must
1267  * be freed with avfilter_graph_segment_free() before graph itself is
1268  * freed.
1269  *
1270  * @retval "non-negative number" success
1271  * @retval "negative error code" failure
1272  */
1273 int avfilter_graph_segment_parse(AVFilterGraph *graph, const char *graph_str,
1274  int flags, AVFilterGraphSegment **seg);
1275 
1276 /**
1277  * Create filters specified in a graph segment.
1278  *
1279  * Walk through the creation-pending AVFilterParams in the segment and create
1280  * new filter instances for them.
1281  * Creation-pending params are those where AVFilterParams.filter_name is
1282  * non-NULL (and hence AVFilterParams.filter is NULL). All other AVFilterParams
1283  * instances are ignored.
1284  *
1285  * For any filter created by this function, the corresponding
1286  * AVFilterParams.filter is set to the newly-created filter context,
1287  * AVFilterParams.filter_name and AVFilterParams.instance_name are freed and set
1288  * to NULL.
1289  *
1290  * @param seg the filtergraph segment to process
1291  * @param flags reserved for future use, caller must set to 0 for now
1292  *
1293  * @retval "non-negative number" Success, all creation-pending filters were
1294  * successfully created
1295  * @retval AVERROR_FILTER_NOT_FOUND some filter's name did not correspond to a
1296  * known filter
1297  * @retval "another negative error code" other failures
1298  *
1299  * @note Calling this function multiple times is safe, as it is idempotent.
1300  */
1302 
1303 /**
1304  * Apply parsed options to filter instances in a graph segment.
1305  *
1306  * Walk through all filter instances in the graph segment that have option
1307  * dictionaries associated with them and apply those options with
1308  * av_opt_set_dict2(..., AV_OPT_SEARCH_CHILDREN). AVFilterParams.opts is
1309  * replaced by the dictionary output by av_opt_set_dict2(), which should be
1310  * empty (NULL) if all options were successfully applied.
1311  *
1312  * If any options could not be found, this function will continue processing all
1313  * other filters and finally return AVERROR_OPTION_NOT_FOUND (unless another
1314  * error happens). The calling program may then deal with unapplied options as
1315  * it wishes.
1316  *
1317  * Any creation-pending filters (see avfilter_graph_segment_create_filters())
1318  * present in the segment will cause this function to fail. AVFilterParams with
1319  * no associated filter context are simply skipped.
1320  *
1321  * @param seg the filtergraph segment to process
1322  * @param flags reserved for future use, caller must set to 0 for now
1323  *
1324  * @retval "non-negative number" Success, all options were successfully applied.
1325  * @retval AVERROR_OPTION_NOT_FOUND some options were not found in a filter
1326  * @retval "another negative error code" other failures
1327  *
1328  * @note Calling this function multiple times is safe, as it is idempotent.
1329  */
1331 
1332 /**
1333  * Initialize all filter instances in a graph segment.
1334  *
1335  * Walk through all filter instances in the graph segment and call
1336  * avfilter_init_dict(..., NULL) on those that have not been initialized yet.
1337  *
1338  * Any creation-pending filters (see avfilter_graph_segment_create_filters())
1339  * present in the segment will cause this function to fail. AVFilterParams with
1340  * no associated filter context or whose filter context is already initialized,
1341  * are simply skipped.
1342  *
1343  * @param seg the filtergraph segment to process
1344  * @param flags reserved for future use, caller must set to 0 for now
1345  *
1346  * @retval "non-negative number" Success, all filter instances were successfully
1347  * initialized
1348  * @retval "negative error code" failure
1349  *
1350  * @note Calling this function multiple times is safe, as it is idempotent.
1351  */
1353 
1354 /**
1355  * Link filters in a graph segment.
1356  *
1357  * Walk through all filter instances in the graph segment and try to link all
1358  * unlinked input and output pads. Any creation-pending filters (see
1359  * avfilter_graph_segment_create_filters()) present in the segment will cause
1360  * this function to fail. Disabled filters and already linked pads are skipped.
1361  *
1362  * Every filter output pad that has a corresponding AVFilterPadParams with a
1363  * non-NULL label is
1364  * - linked to the input with the matching label, if one exists;
1365  * - exported in the outputs linked list otherwise, with the label preserved.
1366  * Unlabeled outputs are
1367  * - linked to the first unlinked unlabeled input in the next non-disabled
1368  * filter in the chain, if one exists
1369  * - exported in the ouputs linked list otherwise, with NULL label
1370  *
1371  * Similarly, unlinked input pads are exported in the inputs linked list.
1372  *
1373  * @param seg the filtergraph segment to process
1374  * @param flags reserved for future use, caller must set to 0 for now
1375  * @param[out] inputs a linked list of all free (unlinked) inputs of the
1376  * filters in this graph segment will be returned here. It
1377  * is to be freed by the caller using avfilter_inout_free().
1378  * @param[out] outputs a linked list of all free (unlinked) outputs of the
1379  * filters in this graph segment will be returned here. It
1380  * is to be freed by the caller using avfilter_inout_free().
1381  *
1382  * @retval "non-negative number" success
1383  * @retval "negative error code" failure
1384  *
1385  * @note Calling this function multiple times is safe, as it is idempotent.
1386  */
1390 
1391 /**
1392  * Apply all filter/link descriptions from a graph segment to the associated filtergraph.
1393  *
1394  * This functions is currently equivalent to calling the following in sequence:
1395  * - avfilter_graph_segment_create_filters();
1396  * - avfilter_graph_segment_apply_opts();
1397  * - avfilter_graph_segment_init();
1398  * - avfilter_graph_segment_link();
1399  * failing if any of them fails. This list may be extended in the future.
1400  *
1401  * Since the above functions are idempotent, the caller may call some of them
1402  * manually, then do some custom processing on the filtergraph, then call this
1403  * function to do the rest.
1404  *
1405  * @param seg the filtergraph segment to process
1406  * @param flags reserved for future use, caller must set to 0 for now
1407  * @param[out] inputs passed to avfilter_graph_segment_link()
1408  * @param[out] outputs passed to avfilter_graph_segment_link()
1409  *
1410  * @retval "non-negative number" success
1411  * @retval "negative error code" failure
1412  *
1413  * @note Calling this function multiple times is safe, as it is idempotent.
1414  */
1418 
1419 /**
1420  * Free the provided AVFilterGraphSegment and everything associated with it.
1421  *
1422  * @param seg double pointer to the AVFilterGraphSegment to be freed. NULL will
1423  * be written to this pointer on exit from this function.
1424  *
1425  * @note
1426  * The filter contexts (AVFilterParams.filter) are owned by AVFilterGraph rather
1427  * than AVFilterGraphSegment, so they are not freed.
1428  */
1430 
1431 /**
1432  * Send a command to one or more filter instances.
1433  *
1434  * @param graph the filter graph
1435  * @param target the filter(s) to which the command should be sent
1436  * "all" sends to all filters
1437  * otherwise it can be a filter or filter instance name
1438  * which will send the command to all matching filters.
1439  * @param cmd the command to send, for handling simplicity all commands must be alphanumeric only
1440  * @param arg the argument for the command
1441  * @param res a buffer with size res_size where the filter(s) can return a response.
1442  *
1443  * @returns >=0 on success otherwise an error code.
1444  * AVERROR(ENOSYS) on unsupported commands
1445  */
1446 int avfilter_graph_send_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, char *res, int res_len, int flags);
1447 
1448 /**
1449  * Queue a command for one or more filter instances.
1450  *
1451  * @param graph the filter graph
1452  * @param target the filter(s) to which the command should be sent
1453  * "all" sends to all filters
1454  * otherwise it can be a filter or filter instance name
1455  * which will send the command to all matching filters.
1456  * @param cmd the command to sent, for handling simplicity all commands must be alphanumeric only
1457  * @param arg the argument for the command
1458  * @param ts time at which the command should be sent to the filter
1459  *
1460  * @note As this executes commands after this function returns, no return code
1461  * from the filter is provided, also AVFILTER_CMD_FLAG_ONE is not supported.
1462  */
1463 int avfilter_graph_queue_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, int flags, double ts);
1464 
1465 
1466 /**
1467  * Dump a graph into a human-readable string representation.
1468  *
1469  * @param graph the graph to dump
1470  * @param options formatting options; currently ignored
1471  * @return a string, or NULL in case of memory allocation failure;
1472  * the string must be freed using av_free
1473  */
1474 char *avfilter_graph_dump(AVFilterGraph *graph, const char *options);
1475 
1476 /**
1477  * Request a frame on the oldest sink link.
1478  *
1479  * If the request returns AVERROR_EOF, try the next.
1480  *
1481  * Note that this function is not meant to be the sole scheduling mechanism
1482  * of a filtergraph, only a convenience function to help drain a filtergraph
1483  * in a balanced way under normal circumstances.
1484  *
1485  * Also note that AVERROR_EOF does not mean that frames did not arrive on
1486  * some of the sinks during the process.
1487  * When there are multiple sink links, in case the requested link
1488  * returns an EOF, this may cause a filter to flush pending frames
1489  * which are sent to another sink link, although unrequested.
1490  *
1491  * @return the return value of ff_request_frame(),
1492  * or AVERROR_EOF if all links returned AVERROR_EOF
1493  */
1495 
1496 /**
1497  * @}
1498  */
1499 
1500 #endif /* AVFILTER_AVFILTER_H */
func
int(* func)(AVBPrint *dst, const char *in, const char *arg)
Definition: jacosubdec.c:68
AVFilterGraph::execute
avfilter_execute_func * execute
This callback may be set by the caller immediately after allocating the graph and before adding any f...
Definition: avfilter.h:916
AVFilterChannelLayouts
A list of supported channel layouts.
Definition: formats.h:85
AVFilterContext::nb_threads
int nb_threads
Max number of threads allowed in this filter instance.
Definition: avfilter.h:464
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64
AVFilterFormatsConfig::samplerates
AVFilterFormats * samplerates
Lists of supported sample rates, only for audio.
Definition: avfilter.h:510
name
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default minimum maximum flags name is the option name
Definition: writing_filters.txt:88
avfilter_filter_pad_count
unsigned avfilter_filter_pad_count(const AVFilter *filter, int is_output)
Get the number of elements in an AVFilter's inputs or outputs array.
Definition: avfilter.c:577
AVFilterGraph::nb_threads
int nb_threads
Maximum number of threads used by filters in this graph.
Definition: avfilter.h:890
avfilter_pad_get_name
const char * avfilter_pad_get_name(const AVFilterPad *pads, int pad_idx)
Get the name of an AVFilterPad.
Definition: avfilter.c:932
AVFilterFormatsConfig::channel_layouts
AVFilterChannelLayouts * channel_layouts
Lists of supported channel layouts, only for audio.
Definition: avfilter.h:515
AVFilterParams::instance_name
char * instance_name
Name to be used for this filter instance.
Definition: avfilter.h:1183
avfilter_graph_segment_create_filters
int avfilter_graph_segment_create_filters(AVFilterGraphSegment *seg, int flags)
Create filters specified in a graph segment.
Definition: graphparser.c:515
AVFilter::pixels_list
enum AVPixelFormat * pixels_list
A pointer to an array of admissible pixel formats delimited by AV_PIX_FMT_NONE.
Definition: avfilter.h:329
AVFilter::priv_class
const AVClass * priv_class
A class for the private data, used to declare filter private AVOptions.
Definition: avfilter.h:205
avfilter_action_func
int() avfilter_action_func(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
A function pointer passed to the AVFilterGraph::execute callback to be executed multiple times,...
Definition: avfilter.h:847
AVFilterContext::var_values
double * var_values
variable values for the enable expression
Definition: avfilter.h:443
AVFilter::pix_fmt
enum AVPixelFormat pix_fmt
Equivalent to { pix_fmt, AV_PIX_FMT_NONE } as pixels_list.
Definition: avfilter.h:344
rational.h
AVFilterContext::is_disabled
int is_disabled
the enabled state from the last expression evaluation
Definition: avfilter.h:444
AVFilter::process_command
int(* process_command)(AVFilterContext *, const char *cmd, const char *arg, char *res, int res_len, int flags)
Make the filter instance process a command.
Definition: avfilter.h:367
AVFilterInOut::next
struct AVFilterInOut * next
next input/input in the list, NULL if this is the last
Definition: avfilter.h:1035
AVFilterContext::nb_outputs
unsigned nb_outputs
number of output pads
Definition: avfilter.h:410
AVFilterContext::av_class
const AVClass * av_class
needed for av_log() and filters common options
Definition: avfilter.h:398
AVFilterGraph::disable_auto_convert
unsigned disable_auto_convert
Definition: avfilter.h:930
AVFilterContext::hw_device_ctx
AVBufferRef * hw_device_ctx
For filters which will create hardware frames, sets the device the filter should create them in.
Definition: avfilter.h:457
AVFilterGraphInternal
Definition: internal.h:130
filter
filter_frame For filters that do not use the this method is called when a frame is pushed to the filter s input It can be called at any time except in a reentrant way If the input frame is enough to produce then the filter should push the output frames on the output link immediately As an exception to the previous rule if the input frame is enough to produce several output frames then the filter needs output only at least one per link The additional frames can be left buffered in the filter
Definition: filter_design.txt:228
AVDictionary
Definition: dict.c:34
AVFILTER_AUTO_CONVERT_ALL
@ AVFILTER_AUTO_CONVERT_ALL
all automatic conversions enabled
Definition: avfilter.h:996
AVFilterContext::output_pads
AVFilterPad * output_pads
array of output pads
Definition: avfilter.h:408
AVFILTER_AUTO_CONVERT_NONE
@ AVFILTER_AUTO_CONVERT_NONE
all automatic conversions disabled
Definition: avfilter.h:997
AVFilter::name
const char * name
Filter name.
Definition: avfilter.h:170
AVFilterParams::inputs
AVFilterPadParams ** inputs
Definition: avfilter.h:1197
avfilter_graph_free
void avfilter_graph_free(AVFilterGraph **graph)
Free a graph, destroy its links, and set *graph to NULL.
Definition: avfiltergraph.c:119
AVFilterFormats
A list of supported formats for one end of a filter link.
Definition: formats.h:64
AVFilterParams::outputs
AVFilterPadParams ** outputs
Definition: avfilter.h:1200
avfilter_graph_create_filter
int avfilter_graph_create_filter(AVFilterContext **filt_ctx, const AVFilter *filt, const char *name, const char *args, void *opaque, AVFilterGraph *graph_ctx)
Create and add a filter instance into an existing graph.
Definition: avfiltergraph.c:138
avfilter_graph_alloc_filter
AVFilterContext * avfilter_graph_alloc_filter(AVFilterGraph *graph, const AVFilter *filter, const char *name)
Create a new filter instance in a filter graph.
Definition: avfiltergraph.c:165
avfilter_graph_segment_link
int avfilter_graph_segment_link(AVFilterGraphSegment *seg, int flags, AVFilterInOut **inputs, AVFilterInOut **outputs)
Link filters in a graph segment.
Definition: graphparser.c:812
AVFilterContext::priv
void * priv
private data for use by the filter
Definition: avfilter.h:412
AVFilterContext::graph
struct AVFilterGraph * graph
filtergraph this filter belongs to
Definition: avfilter.h:414
AVFilterContext::enable_str
char * enable_str
enable expression string
Definition: avfilter.h:441
avfilter_graph_alloc
AVFilterGraph * avfilter_graph_alloc(void)
Allocate a filter graph.
Definition: avfiltergraph.c:82
AVFilter::formats
union AVFilter::@227 formats
The state of the following union is determined by formats_state.
AVFilter::formats_state
uint8_t formats_state
This field determines the state of the formats union.
Definition: avfilter.h:234
avfilter_insert_filter
int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt, unsigned filt_srcpad_idx, unsigned filt_dstpad_idx)
Insert a filter in the middle of an existing link.
Definition: avfilter.c:262
av_filter_iterate
const AVFilter * av_filter_iterate(void **opaque)
Iterate over all registered filters.
Definition: allfilters.c:614
samplefmt.h
AVFilterContext::extra_hw_frames
int extra_hw_frames
Sets the number of extra hardware frames which the filter will allocate on its output links for use i...
Definition: avfilter.h:487
avfilter_config_links
int avfilter_config_links(AVFilterContext *filter)
Negotiate the media format, dimensions, etc of all inputs to a filter.
Definition: avfilter.c:299
avfilter_graph_segment_free
void avfilter_graph_segment_free(AVFilterGraphSegment **seg)
Free the provided AVFilterGraphSegment and everything associated with it.
Definition: graphparser.c:275
AVFilterGraph::opaque
void * opaque
Opaque user data.
Definition: avfilter.h:902
avfilter_graph_segment_parse
int avfilter_graph_segment_parse(AVFilterGraph *graph, const char *graph_str, int flags, AVFilterGraphSegment **seg)
Parse a textual filtergraph description into an intermediate form.
Definition: graphparser.c:459
AVFilter::flags_internal
int flags_internal
Additional flags for avfilter internal use only.
Definition: avfilter.h:353
AVFilterPad
A filter pad used for either input or output.
Definition: internal.h:47
avfilter_license
const char * avfilter_license(void)
Return the libavfilter license.
Definition: version.c:40
AVFilterContext::input_pads
AVFilterPad * input_pads
array of input pads
Definition: avfilter.h:404
avfilter_inout_free
void avfilter_inout_free(AVFilterInOut **inout)
Free the supplied list of AVFilterInOut and set *inout to NULL.
Definition: graphparser.c:75
AVFilterChain::filters
AVFilterParams ** filters
Definition: avfilter.h:1211
AVFilter::samples_list
enum AVSampleFormat * samples_list
Analogous to pixels, but delimited by AV_SAMPLE_FMT_NONE and restricted to filters that only have AVM...
Definition: avfilter.h:340
avfilter_process_command
int avfilter_process_command(AVFilterContext *filter, const char *cmd, const char *arg, char *res, int res_len, int flags)
Make the filter instance process a command.
Definition: avfilter.c:556
filters
#define filters(fmt, type, inverse, clp, inverset, clip, one, clip_fn, packed)
Definition: af_crystalizer.c:54
avfilter_graph_segment_init
int avfilter_graph_segment_init(AVFilterGraphSegment *seg, int flags)
Initialize all filter instances in a graph segment.
Definition: graphparser.c:615
AVFilter::flags
int flags
A combination of AVFILTER_FLAG_*.
Definition: avfilter.h:210
ctx
AVFormatContext * ctx
Definition: movenc.c:48
AVFilterGraph::aresample_swr_opts
char * aresample_swr_opts
swr options to use for the auto-inserted aresample filters, Access ONLY through AVOptions
Definition: avfilter.h:918
AVFilterPadParams::label
char * label
An av_malloc()'ed string containing the pad label.
Definition: avfilter.h:1134
link
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a link
Definition: filter_design.txt:23
arg
const char * arg
Definition: jacosubdec.c:67
AVFilter::activate
int(* activate)(AVFilterContext *ctx)
Filter activation function.
Definition: avfilter.h:381
avfilter_get_by_name
const AVFilter * avfilter_get_by_name(const char *name)
Get a filter definition matching the given name.
Definition: allfilters.c:625
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:66
AVFilterContext::thread_type
int thread_type
Type of multithreading being allowed/used.
Definition: avfilter.h:432
avfilter_graph_config
int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx)
Check validity and configure all the links and formats in the graph.
Definition: avfiltergraph.c:1169
avfilter_graph_segment_apply
int avfilter_graph_segment_apply(AVFilterGraphSegment *seg, int flags, AVFilterInOut **inputs, AVFilterInOut **outputs)
Apply all filter/link descriptions from a graph segment to the associated filtergraph.
Definition: graphparser.c:880
AVFilterParams
Parameters describing a filter to be created in a filtergraph.
Definition: avfilter.h:1143
AVFilter::outputs
const AVFilterPad * outputs
List of static outputs.
Definition: avfilter.h:195
avfilter_graph_set_auto_convert
void avfilter_graph_set_auto_convert(AVFilterGraph *graph, unsigned flags)
Enable or disable automatic format conversion inside the graph.
Definition: avfiltergraph.c:160
AVFilterParams::filter
AVFilterContext * filter
The filter context.
Definition: avfilter.h:1154
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
AVFilterChain::nb_filters
size_t nb_filters
Definition: avfilter.h:1212
AVFilterParams::filter_name
char * filter_name
Name of the AVFilter to be used.
Definition: avfilter.h:1171
AVFilterGraph::filters
AVFilterContext ** filters
Definition: avfilter.h:866
AVFilterContext::inputs
AVFilterLink ** inputs
array of pointers to input links
Definition: avfilter.h:405
AVFilterInternal
Definition: internal.h:136
AVFilterContext::name
char * name
name of this filter instance
Definition: avfilter.h:402
avfilter_inout_alloc
AVFilterInOut * avfilter_inout_alloc(void)
Allocate a single AVFilterInOut entry.
Definition: graphparser.c:70
avfilter_graph_get_filter
AVFilterContext * avfilter_graph_get_filter(AVFilterGraph *graph, const char *name)
Get a filter instance identified by instance name from graph.
Definition: avfiltergraph.c:283
avfilter_graph_request_oldest
int avfilter_graph_request_oldest(AVFilterGraph *graph)
Request a frame on the oldest sink link.
Definition: avfiltergraph.c:1297
AVFilterGraphSegment::chains
AVFilterChain ** chains
A list of filter chain contained in this segment.
Definition: avfilter.h:1235
AVFilterGraph
Definition: avfilter.h:864
inputs
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several inputs
Definition: filter_design.txt:243
avfilter_graph_parse2
int avfilter_graph_parse2(AVFilterGraph *graph, const char *filters, AVFilterInOut **inputs, AVFilterInOut **outputs)
Add a graph described by a string to a graph.
Definition: graphparser.c:137
AVFilterParams::nb_outputs
unsigned nb_outputs
Definition: avfilter.h:1201
AVFilterFormatsConfig
Lists of formats / etc.
Definition: avfilter.h:500
AVFilterGraphSegment
A parsed representation of a filtergraph segment.
Definition: avfilter.h:1224
AVFilterInOut::pad_idx
int pad_idx
index of the filt_ctx pad to use for linking
Definition: avfilter.h:1032
FFFrameQueue
Queue of AVFrame pointers.
Definition: framequeue.h:53
AVFilterGraph::scale_sws_opts
char * scale_sws_opts
sws options to use for the auto-inserted scale filters
Definition: avfilter.h:869
options
const OptionDef options[]
AVFilterContext::nb_inputs
unsigned nb_inputs
number of input pads
Definition: avfilter.h:406
AVFilterGraph::av_class
const AVClass * av_class
Definition: avfilter.h:865
AVMediaType
AVMediaType
Definition: avutil.h:199
AVFilterContext::command_queue
struct AVFilterCommand * command_queue
Definition: avfilter.h:439
AVChannelLayout
An AVChannelLayout holds information about the channel layout of audio data.
Definition: channel_layout.h:307
AVFilterInOut::filter_ctx
AVFilterContext * filter_ctx
filter context associated to this input/output
Definition: avfilter.h:1029
avfilter_execute_func
int() avfilter_execute_func(AVFilterContext *ctx, avfilter_action_func *func, void *arg, int *ret, int nb_jobs)
A function executing multiple jobs, possibly in parallel.
Definition: avfilter.h:861
AVFilter::preinit
int(* preinit)(AVFilterContext *ctx)
Filter pre-initialization function.
Definition: avfilter.h:249
avfilter_link
int avfilter_link(AVFilterContext *src, unsigned srcpad, AVFilterContext *dst, unsigned dstpad)
Link two filters together.
Definition: avfilter.c:149
avfilter_graph_queue_command
int avfilter_graph_queue_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, int flags, double ts)
Queue a command for one or more filter instances.
Definition: avfiltergraph.c:1217
AVFilterGraphSegment::scale_sws_opts
char * scale_sws_opts
A string containing a colon-separated list of key=value options applied to all scale filters in this ...
Definition: avfilter.h:1246
frame.h
AVFilter::description
const char * description
A description of the filter.
Definition: avfilter.h:177
avfilter_link_free
void avfilter_link_free(AVFilterLink **link)
Free the link in *link, and set its pointer to NULL.
Definition: avfilter.c:193
buffer.h
attribute_deprecated
#define attribute_deprecated
Definition: attributes.h:104
attributes.h
AVFilter::nb_inputs
uint8_t nb_inputs
The number of entries in the list of inputs.
Definition: avfilter.h:223
AVFilter::init
int(* init)(AVFilterContext *ctx)
Filter initialization function.
Definition: avfilter.h:272
avfilter_init_str
int avfilter_init_str(AVFilterContext *ctx, const char *args)
Initialize a filter with the supplied parameters.
Definition: avfilter.c:904
AVFilterParams::nb_inputs
unsigned nb_inputs
Definition: avfilter.h:1198
AVFilter::query_func
int(* query_func)(AVFilterContext *)
Query formats supported by the filter on its inputs and outputs.
Definition: avfilter.h:318
log.h
AVFilterGraphSegment::graph
AVFilterGraph * graph
The filtergraph this segment is associated with.
Definition: avfilter.h:1229
avfilter_graph_parse_ptr
int avfilter_graph_parse_ptr(AVFilterGraph *graph, const char *filters, AVFilterInOut **inputs, AVFilterInOut **outputs, void *log_ctx)
Add a graph described by a string to a graph.
Definition: graphparser.c:918
AVFilterCommand
Definition: internal.h:31
version_major.h
AVSampleFormat
AVSampleFormat
Audio sample formats.
Definition: samplefmt.h:55
AVFilterGraph::thread_type
int thread_type
Type of multithreading allowed for filters in this graph.
Definition: avfilter.h:883
filt
static const int8_t filt[NUMTAPS *2]
Definition: af_earwax.c:39
AVFilter::priv_size
int priv_size
size of private data to allocate for the filter
Definition: avfilter.h:351
AVFilter
Filter definition.
Definition: avfilter.h:166
ret
ret
Definition: filter_design.txt:187
AVFilterGraph::sink_links
AVFilterLink ** sink_links
Private fields.
Definition: avfilter.h:927
pixfmt.h
avfilter_configuration
const char * avfilter_configuration(void)
Return the libavfilter build-time configuration.
Definition: version.c:35
AVFilterParams::opts
AVDictionary * opts
Options to be apllied to the filter.
Definition: avfilter.h:1195
avfilter_graph_dump
char * avfilter_graph_dump(AVFilterGraph *graph, const char *options)
Dump a graph into a human-readable string representation.
Definition: graphdump.c:157
dict.h
AVFilter::nb_outputs
uint8_t nb_outputs
The number of entries in the list of outputs.
Definition: avfilter.h:228
avfilter_pad_get_type
enum AVMediaType avfilter_pad_get_type(const AVFilterPad *pads, int pad_idx)
Get the type of an AVFilterPad.
Definition: avfilter.c:937
outputs
static const AVFilterPad outputs[]
Definition: af_afwtdn.c:1291
avfilter_init_dict
int avfilter_init_dict(AVFilterContext *ctx, AVDictionary **options)
Initialize a filter with the supplied dictionary of options.
Definition: avfilter.c:864
AVFilterChain
A filterchain is a list of filter specifications.
Definition: avfilter.h:1210
version.h
AVFilterContext::enable
void * enable
parsed expression (AVExpr*)
Definition: avfilter.h:442
AVFilterGraphSegment::nb_chains
size_t nb_chains
Definition: avfilter.h:1236
AVFilterContext
An instance of a filter.
Definition: avfilter.h:397
avfilter_graph_parse
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.
Definition: graphparser.c:163
avutil.h
AVBufferRef
A reference to a data buffer.
Definition: buffer.h:82
AVFilterFormatsConfig::formats
AVFilterFormats * formats
List of supported formats (pixel or sample).
Definition: avfilter.h:505
AVFilter::inputs
const AVFilterPad * inputs
List of static inputs.
Definition: avfilter.h:186
AVFilter::uninit
void(* uninit)(AVFilterContext *ctx)
Filter uninitialization function.
Definition: avfilter.h:284
avfilter_free
void avfilter_free(AVFilterContext *filter)
Free a filter context.
Definition: avfilter.c:740
AVFilter::sample_fmt
enum AVSampleFormat sample_fmt
Equivalent to { sample_fmt, AV_SAMPLE_FMT_NONE } as samples_list.
Definition: avfilter.h:348
status_in
the definition of that something depends on the semantic of the filter The callback must examine the status of the filter s links and proceed accordingly The status of output links is stored in the status_in and status_out fields and tested by the then the processing requires a frame on this link and the filter is expected to make efforts in that direction The status of input links is stored by the status_in
Definition: filter_design.txt:154
src
INIT_CLIP pixel * src
Definition: h264pred_template.c:418
AVFilterInOut::name
char * name
unique name for this input/output in the list
Definition: avfilter.h:1026
flags
#define flags(name, subs,...)
Definition: cbs_av1.c:474
avfilter_graph_send_command
int avfilter_graph_send_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, char *res, int res_len, int flags)
Send a command to one or more filter instances.
Definition: avfiltergraph.c:1187
avfilter_graph_segment_apply_opts
int avfilter_graph_segment_apply_opts(AVFilterGraphSegment *seg, int flags)
Apply parsed options to filter instances in a graph segment.
Definition: graphparser.c:585
AVFilterGraph::nb_filters
unsigned nb_filters
Definition: avfilter.h:867
AVFilterContext::filter
const AVFilter * filter
the AVFilter of which this is an instance
Definition: avfilter.h:400
int
int
Definition: ffmpeg_filter.c:368
avfilter_version
unsigned avfilter_version(void)
Return the LIBAVFILTER_VERSION_INT constant.
Definition: version.c:29
avfilter_get_class
const AVClass * avfilter_get_class(void)
Definition: avfilter.c:1542
AVFilterInOut
A linked-list of the inputs/outputs of the filter chain.
Definition: avfilter.h:1024
AVFilterGraph::sink_links_count
int sink_links_count
Definition: avfilter.h:928
AVFilterContext::ready
unsigned ready
Ready status of the filter.
Definition: avfilter.h:471
AVFilterPadParams
Parameters of a filter's input or output pad.
Definition: avfilter.h:1126
AVFilterContext::outputs
AVFilterLink ** outputs
array of pointers to output links
Definition: avfilter.h:409