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 module ffmpeg.libavfilter.avfilter;
23 
24 import ffmpeg.libavutil;
25 
26 extern (C) @nogc nothrow:
27 
28 /**
29  * @file
30  * @ingroup lavfi
31  * Main libavfilter public API header
32  */
33 
34 /**
35  * @defgroup lavfi libavfilter
36  * Graph-based frame editing library.
37  *
38  * @{
39  */
40 
41 /**
42  * Return the LIBAVFILTER_VERSION_INT constant.
43  */
44 uint avfilter_version ();
45 
46 /**
47  * Return the libavfilter build-time configuration.
48  */
49 const(char)* avfilter_configuration ();
50 
51 /**
52  * Return the libavfilter license.
53  */
54 const(char)* avfilter_license ();
55 
56 struct AVFilterPad;
57 struct AVFilterFormats;
58 struct AVFilterChannelLayouts;
59 
60 /**
61  * Get the number of elements in a NULL-terminated array of AVFilterPads (e.g.
62  * AVFilter.inputs/outputs).
63  */
64 int avfilter_pad_count (const(AVFilterPad)* pads);
65 
66 /**
67  * Get the name of an AVFilterPad.
68  *
69  * @param pads an array of AVFilterPads
70  * @param pad_idx index of the pad in the array; it is the caller's
71  *                responsibility to ensure the index is valid
72  *
73  * @return name of the pad_idx'th pad in pads
74  */
75 const(char)* avfilter_pad_get_name (const(AVFilterPad)* pads, int pad_idx);
76 
77 /**
78  * Get the type of an AVFilterPad.
79  *
80  * @param pads an array of AVFilterPads
81  * @param pad_idx index of the pad in the array; it is the caller's
82  *                responsibility to ensure the index is valid
83  *
84  * @return type of the pad_idx'th pad in pads
85  */
86 AVMediaType avfilter_pad_get_type (const(AVFilterPad)* pads, int pad_idx);
87 
88 /**
89  * The number of the filter inputs is not determined just by AVFilter.inputs.
90  * The filter might add additional inputs during initialization depending on the
91  * options supplied to it.
92  */
93 enum AVFILTER_FLAG_DYNAMIC_INPUTS = 1 << 0;
94 /**
95  * The number of the filter outputs is not determined just by AVFilter.outputs.
96  * The filter might add additional outputs during initialization depending on
97  * the options supplied to it.
98  */
99 enum AVFILTER_FLAG_DYNAMIC_OUTPUTS = 1 << 1;
100 /**
101  * The filter supports multithreading by splitting frames into multiple parts
102  * and processing them concurrently.
103  */
104 enum AVFILTER_FLAG_SLICE_THREADS = 1 << 2;
105 /**
106  * Some filters support a generic "enable" expression option that can be used
107  * to enable or disable a filter in the timeline. Filters supporting this
108  * option have this flag set. When the enable expression is false, the default
109  * no-op filter_frame() function is called in place of the filter_frame()
110  * callback defined on each input pad, thus the frame is passed unchanged to
111  * the next filters.
112  */
113 enum AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC = 1 << 16;
114 /**
115  * Same as AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC, except that the filter will
116  * have its filter_frame() callback(s) called as usual even when the enable
117  * expression is false. The filter will disable filtering within the
118  * filter_frame() callback(s) itself, for example executing code depending on
119  * the AVFilterContext->is_disabled value.
120  */
121 enum AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL = 1 << 17;
122 /**
123  * Handy mask to test whether the filter supports or no the timeline feature
124  * (internally or generically).
125  */
126 enum AVFILTER_FLAG_SUPPORT_TIMELINE = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL;
127 
128 /**
129  * Filter definition. This defines the pads a filter contains, and all the
130  * callback functions used to interact with the filter.
131  */
132 struct AVFilter
133 {
134     /**
135      * Filter name. Must be non-NULL and unique among filters.
136      */
137     const(char)* name;
138 
139     /**
140      * A description of the filter. May be NULL.
141      *
142      * You should use the NULL_IF_CONFIG_SMALL() macro to define it.
143      */
144     const(char)* description;
145 
146     /**
147      * List of inputs, terminated by a zeroed element.
148      *
149      * NULL if there are no (static) inputs. Instances of filters with
150      * AVFILTER_FLAG_DYNAMIC_INPUTS set may have more inputs than present in
151      * this list.
152      */
153     const(AVFilterPad)* inputs;
154     /**
155      * List of outputs, terminated by a zeroed element.
156      *
157      * NULL if there are no (static) outputs. Instances of filters with
158      * AVFILTER_FLAG_DYNAMIC_OUTPUTS set may have more outputs than present in
159      * this list.
160      */
161     const(AVFilterPad)* outputs;
162 
163     /**
164      * A class for the private data, used to declare filter private AVOptions.
165      * This field is NULL for filters that do not declare any options.
166      *
167      * If this field is non-NULL, the first member of the filter private data
168      * must be a pointer to AVClass, which will be set by libavfilter generic
169      * code to this class.
170      */
171     const(AVClass)* priv_class;
172 
173     /**
174      * A combination of AVFILTER_FLAG_*
175      */
176     int flags;
177 
178     /*****************************************************************
179      * All fields below this line are not part of the public API. They
180      * may not be used outside of libavfilter and can be changed and
181      * removed at will.
182      * New public fields should be added right above.
183      *****************************************************************
184      */
185 
186     /**
187      * Filter pre-initialization function
188      *
189      * This callback will be called immediately after the filter context is
190      * allocated, to allow allocating and initing sub-objects.
191      *
192      * If this callback is not NULL, the uninit callback will be called on
193      * allocation failure.
194      *
195      * @return 0 on success,
196      *         AVERROR code on failure (but the code will be
197      *           dropped and treated as ENOMEM by the calling code)
198      */
199     int function (AVFilterContext* ctx) preinit;
200 
201     /**
202      * Filter initialization function.
203      *
204      * This callback will be called only once during the filter lifetime, after
205      * all the options have been set, but before links between filters are
206      * established and format negotiation is done.
207      *
208      * Basic filter initialization should be done here. Filters with dynamic
209      * inputs and/or outputs should create those inputs/outputs here based on
210      * provided options. No more changes to this filter's inputs/outputs can be
211      * done after this callback.
212      *
213      * This callback must not assume that the filter links exist or frame
214      * parameters are known.
215      *
216      * @ref AVFilter.uninit "uninit" is guaranteed to be called even if
217      * initialization fails, so this callback does not have to clean up on
218      * failure.
219      *
220      * @return 0 on success, a negative AVERROR on failure
221      */
222     int function (AVFilterContext* ctx) init;
223 
224     /**
225      * Should be set instead of @ref AVFilter.init "init" by the filters that
226      * want to pass a dictionary of AVOptions to nested contexts that are
227      * allocated during init.
228      *
229      * On return, the options dict should be freed and replaced with one that
230      * contains all the options which could not be processed by this filter (or
231      * with NULL if all the options were processed).
232      *
233      * Otherwise the semantics is the same as for @ref AVFilter.init "init".
234      */
235     int function (AVFilterContext* ctx, AVDictionary** options) init_dict;
236 
237     /**
238      * Filter uninitialization function.
239      *
240      * Called only once right before the filter is freed. Should deallocate any
241      * memory held by the filter, release any buffer references, etc. It does
242      * not need to deallocate the AVFilterContext.priv memory itself.
243      *
244      * This callback may be called even if @ref AVFilter.init "init" was not
245      * called or failed, so it must be prepared to handle such a situation.
246      */
247     void function (AVFilterContext* ctx) uninit;
248 
249     /**
250      * Query formats supported by the filter on its inputs and outputs.
251      *
252      * This callback is called after the filter is initialized (so the inputs
253      * and outputs are fixed), shortly before the format negotiation. This
254      * callback may be called more than once.
255      *
256      * This callback must set AVFilterLink.outcfg.formats on every input link and
257      * AVFilterLink.incfg.formats on every output link to a list of pixel/sample
258      * formats that the filter supports on that link. For audio links, this
259      * filter must also set @ref AVFilterLink.incfg.samplerates "in_samplerates" /
260      * @ref AVFilterLink.outcfg.samplerates "out_samplerates" and
261      * @ref AVFilterLink.incfg.channel_layouts "in_channel_layouts" /
262      * @ref AVFilterLink.outcfg.channel_layouts "out_channel_layouts" analogously.
263      *
264      * This callback may be NULL for filters with one input, in which case
265      * libavfilter assumes that it supports all input formats and preserves
266      * them on output.
267      *
268      * @return zero on success, a negative value corresponding to an
269      * AVERROR code otherwise
270      */
271     int function (AVFilterContext*) query_formats;
272 
273     int priv_size; ///< size of private data to allocate for the filter
274 
275     int flags_internal; ///< Additional flags for avfilter internal use only.
276 
277     /**
278      * Used by the filter registration system. Must not be touched by any other
279      * code.
280      */
281     AVFilter* next;
282 
283     /**
284      * Make the filter instance process a command.
285      *
286      * @param cmd    the command to process, for handling simplicity all commands must be alphanumeric only
287      * @param arg    the argument for the command
288      * @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.
289      * @param flags  if AVFILTER_CMD_FLAG_FAST is set and the command would be
290      *               time consuming then a filter should treat it like an unsupported command
291      *
292      * @returns >=0 on success otherwise an error code.
293      *          AVERROR(ENOSYS) on unsupported commands
294      */
295     int function (AVFilterContext*, const(char)* cmd, const(char)* arg, char* res, int res_len, int flags) process_command;
296 
297     /**
298      * Filter initialization function, alternative to the init()
299      * callback. Args contains the user-supplied parameters, opaque is
300      * used for providing binary data.
301      */
302     int function (AVFilterContext* ctx, void* opaque) init_opaque;
303 
304     /**
305      * Filter activation function.
306      *
307      * Called when any processing is needed from the filter, instead of any
308      * filter_frame and request_frame on pads.
309      *
310      * The function must examine inlinks and outlinks and perform a single
311      * step of processing. If there is nothing to do, the function must do
312      * nothing and not return an error. If more steps are or may be
313      * possible, it must use ff_filter_set_ready() to schedule another
314      * activation.
315      */
316     int function (AVFilterContext* ctx) activate;
317 }
318 
319 /**
320  * Process multiple parts of the frame concurrently.
321  */
322 enum AVFILTER_THREAD_SLICE = 1 << 0;
323 
324 struct AVFilterInternal;
325 
326 /** An instance of a filter */
327 struct AVFilterContext
328 {
329     const(AVClass)* av_class; ///< needed for av_log() and filters common options
330 
331     const(AVFilter)* filter; ///< the AVFilter of which this is an instance
332 
333     char* name; ///< name of this filter instance
334 
335     AVFilterPad* input_pads; ///< array of input pads
336     AVFilterLink** inputs; ///< array of pointers to input links
337     uint nb_inputs; ///< number of input pads
338 
339     AVFilterPad* output_pads; ///< array of output pads
340     AVFilterLink** outputs; ///< array of pointers to output links
341     uint nb_outputs; ///< number of output pads
342 
343     void* priv; ///< private data for use by the filter
344 
345     AVFilterGraph* graph; ///< filtergraph this filter belongs to
346 
347     /**
348      * Type of multithreading being allowed/used. A combination of
349      * AVFILTER_THREAD_* flags.
350      *
351      * May be set by the caller before initializing the filter to forbid some
352      * or all kinds of multithreading for this filter. The default is allowing
353      * everything.
354      *
355      * When the filter is initialized, this field is combined using bit AND with
356      * AVFilterGraph.thread_type to get the final mask used for determining
357      * allowed threading types. I.e. a threading type needs to be set in both
358      * to be allowed.
359      *
360      * After the filter is initialized, libavfilter sets this field to the
361      * threading type that is actually used (0 for no multithreading).
362      */
363     int thread_type;
364 
365     /**
366      * An opaque struct for libavfilter internal use.
367      */
368     AVFilterInternal* internal;
369 
370     struct AVFilterCommand;
371     AVFilterCommand* command_queue;
372 
373     char* enable_str; ///< enable expression string
374     void* enable; ///< parsed expression (AVExpr*)
375     double* var_values; ///< variable values for the enable expression
376     int is_disabled; ///< the enabled state from the last expression evaluation
377 
378     /**
379      * For filters which will create hardware frames, sets the device the
380      * filter should create them in.  All other filters will ignore this field:
381      * in particular, a filter which consumes or processes hardware frames will
382      * instead use the hw_frames_ctx field in AVFilterLink to carry the
383      * hardware context information.
384      */
385     AVBufferRef* hw_device_ctx;
386 
387     /**
388      * Max number of threads allowed in this filter instance.
389      * If <= 0, its value is ignored.
390      * Overrides global number of threads set per filter graph.
391      */
392     int nb_threads;
393 
394     /**
395      * Ready status of the filter.
396      * A non-0 value means that the filter needs activating;
397      * a higher value suggests a more urgent activation.
398      */
399     uint ready;
400 
401     /**
402      * Sets the number of extra hardware frames which the filter will
403      * allocate on its output links for use in following filters or by
404      * the caller.
405      *
406      * Some hardware filters require all frames that they will use for
407      * output to be defined in advance before filtering starts.  For such
408      * filters, any hardware frame pools used for output must therefore be
409      * of fixed size.  The extra frames set here are on top of any number
410      * that the filter needs internally in order to operate normally.
411      *
412      * This field must be set before the graph containing this filter is
413      * configured.
414      */
415     int extra_hw_frames;
416 }
417 
418 /**
419  * Lists of formats / etc. supported by an end of a link.
420  *
421  * This structure is directly part of AVFilterLink, in two copies:
422  * one for the source filter, one for the destination filter.
423 
424  * These lists are used for negotiating the format to actually be used,
425  * which will be loaded into the format and channel_layout members of
426  * AVFilterLink, when chosen.
427  */
428 struct AVFilterFormatsConfig
429 {
430     /**
431      * List of supported formats (pixel or sample).
432      */
433     AVFilterFormats* formats;
434 
435     /**
436      * Lists of supported sample rates, only for audio.
437      */
438     AVFilterFormats* samplerates;
439 
440     /**
441      * Lists of supported channel layouts, only for audio.
442      */
443     AVFilterChannelLayouts* channel_layouts;
444 }
445 
446 /**
447  * A link between two filters. This contains pointers to the source and
448  * destination filters between which this link exists, and the indexes of
449  * the pads involved. In addition, this link also contains the parameters
450  * which have been negotiated and agreed upon between the filter, such as
451  * image dimensions, format, etc.
452  *
453  * Applications must not normally access the link structure directly.
454  * Use the buffersrc and buffersink API instead.
455  * In the future, access to the header may be reserved for filters
456  * implementation.
457  */
458 struct AVFilterLink
459 {
460     AVFilterContext* src; ///< source filter
461     AVFilterPad* srcpad; ///< output pad on the source filter
462 
463     AVFilterContext* dst; ///< dest filter
464     AVFilterPad* dstpad; ///< input pad on the dest filter
465 
466     AVMediaType type; ///< filter media type
467 
468     /* These parameters apply only to video */
469     int w; ///< agreed upon image width
470     int h; ///< agreed upon image height
471     AVRational sample_aspect_ratio; ///< agreed upon sample aspect ratio
472     /* These parameters apply only to audio */
473     ulong channel_layout; ///< channel layout of current buffer (see libavutil/channel_layout.h)
474     int sample_rate; ///< samples per second
475 
476     int format; ///< agreed upon media format
477 
478     /**
479      * Define the time base used by the PTS of the frames/samples
480      * which will pass through this link.
481      * During the configuration stage, each filter is supposed to
482      * change only the output timebase, while the timebase of the
483      * input link is assumed to be an unchangeable property.
484      */
485     AVRational time_base;
486 
487     /*****************************************************************
488      * All fields below this line are not part of the public API. They
489      * may not be used outside of libavfilter and can be changed and
490      * removed at will.
491      * New public fields should be added right above.
492      *****************************************************************
493      */
494 
495     /**
496      * Lists of supported formats / etc. supported by the input filter.
497      */
498     AVFilterFormatsConfig incfg;
499 
500     /**
501      * Lists of supported formats / etc. supported by the output filter.
502      */
503     AVFilterFormatsConfig outcfg;
504 
505     /** stage of the initialization of the link properties (dimensions, etc) */
506     enum _Anonymous_0
507     {
508         AVLINK_UNINIT = 0, ///< not started
509         AVLINK_STARTINIT = 1, ///< started, but incomplete
510         AVLINK_INIT = 2 ///< complete
511     }
512 
513     _Anonymous_0 init_state;
514 
515     /**
516      * Graph the filter belongs to.
517      */
518     AVFilterGraph* graph;
519 
520     /**
521      * Current timestamp of the link, as defined by the most recent
522      * frame(s), in link time_base units.
523      */
524     long current_pts;
525 
526     /**
527      * Current timestamp of the link, as defined by the most recent
528      * frame(s), in AV_TIME_BASE units.
529      */
530     long current_pts_us;
531 
532     /**
533      * Index in the age array.
534      */
535     int age_index;
536 
537     /**
538      * Frame rate of the stream on the link, or 1/0 if unknown or variable;
539      * if left to 0/0, will be automatically copied from the first input
540      * of the source filter if it exists.
541      *
542      * Sources should set it to the best estimation of the real frame rate.
543      * If the source frame rate is unknown or variable, set this to 1/0.
544      * Filters should update it if necessary depending on their function.
545      * Sinks can use it to set a default output frame rate.
546      * It is similar to the r_frame_rate field in AVStream.
547      */
548     AVRational frame_rate;
549 
550     /**
551      * Buffer partially filled with samples to achieve a fixed/minimum size.
552      */
553     AVFrame* partial_buf;
554 
555     /**
556      * Size of the partial buffer to allocate.
557      * Must be between min_samples and max_samples.
558      */
559     int partial_buf_size;
560 
561     /**
562      * Minimum number of samples to filter at once. If filter_frame() is
563      * called with fewer samples, it will accumulate them in partial_buf.
564      * This field and the related ones must not be changed after filtering
565      * has started.
566      * If 0, all related fields are ignored.
567      */
568     int min_samples;
569 
570     /**
571      * Maximum number of samples to filter at once. If filter_frame() is
572      * called with more samples, it will split them.
573      */
574     int max_samples;
575 
576     /**
577      * Number of channels.
578      */
579     int channels;
580 
581     /**
582      * Number of past frames sent through the link.
583      */
584     long frame_count_in;
585     long frame_count_out;
586 
587     /**
588      * A pointer to a FFFramePool struct.
589      */
590     void* frame_pool;
591 
592     /**
593      * True if a frame is currently wanted on the output of this filter.
594      * Set when ff_request_frame() is called by the output,
595      * cleared when a frame is filtered.
596      */
597     int frame_wanted_out;
598 
599     /**
600      * For hwaccel pixel formats, this should be a reference to the
601      * AVHWFramesContext describing the frames.
602      */
603     AVBufferRef* hw_frames_ctx;
604 
605     /**
606      * Internal structure members.
607      * The fields below this limit are internal for libavfilter's use
608      * and must in no way be accessed by applications.
609      */
610     char[0xF000] reserved;
611 
612     /* FF_INTERNAL_FIELDS */
613 
614     /**
615      * Queue of frames waiting to be filtered.
616      */
617 
618     /**
619      * If set, the source filter can not generate a frame as is.
620      * The goal is to avoid repeatedly calling the request_frame() method on
621      * the same link.
622      */
623 
624     /**
625      * Link input status.
626      * If not zero, all attempts of filter_frame will fail with the
627      * corresponding code.
628      */
629 
630     /**
631      * Timestamp of the input status change.
632      */
633 
634     /**
635      * Link output status.
636      * If not zero, all attempts of request_frame will fail with the
637      * corresponding code.
638      */
639 
640     /* FF_INTERNAL_FIELDS */
641 }
642 
643 alias AVLINK_UNINIT = AVFilterLink._Anonymous_0.AVLINK_UNINIT;
644 alias AVLINK_STARTINIT = AVFilterLink._Anonymous_0.AVLINK_STARTINIT;
645 alias AVLINK_INIT = AVFilterLink._Anonymous_0.AVLINK_INIT;
646 
647 /**
648  * Link two filters together.
649  *
650  * @param src    the source filter
651  * @param srcpad index of the output pad on the source filter
652  * @param dst    the destination filter
653  * @param dstpad index of the input pad on the destination filter
654  * @return       zero on success
655  */
656 int avfilter_link (
657     AVFilterContext* src,
658     uint srcpad,
659     AVFilterContext* dst,
660     uint dstpad);
661 
662 /**
663  * Free the link in *link, and set its pointer to NULL.
664  */
665 void avfilter_link_free (AVFilterLink** link);
666 
667 /**
668  * Get the number of channels of a link.
669  * @deprecated Use av_buffersink_get_channels()
670  */
671 int avfilter_link_get_channels (AVFilterLink* link);
672 
673 /**
674  * Set the closed field of a link.
675  * @deprecated applications are not supposed to mess with links, they should
676  * close the sinks.
677  */
678 void avfilter_link_set_closed (AVFilterLink* link, int closed);
679 
680 /**
681  * Negotiate the media format, dimensions, etc of all inputs to a filter.
682  *
683  * @param filter the filter to negotiate the properties for its inputs
684  * @return       zero on successful negotiation
685  */
686 int avfilter_config_links (AVFilterContext* filter);
687 
688 enum AVFILTER_CMD_FLAG_ONE = 1; ///< Stop once a filter understood the command (for target=all for example), fast filters are favored automatically
689 enum AVFILTER_CMD_FLAG_FAST = 2; ///< Only execute command when its fast (like a video out that supports contrast adjustment in hw)
690 
691 /**
692  * Make the filter instance process a command.
693  * It is recommended to use avfilter_graph_send_command().
694  */
695 int avfilter_process_command (AVFilterContext* filter, const(char)* cmd, const(char)* arg, char* res, int res_len, int flags);
696 
697 /**
698  * Iterate over all registered filters.
699  *
700  * @param opaque a pointer where libavfilter will store the iteration state. Must
701  *               point to NULL to start the iteration.
702  *
703  * @return the next registered filter or NULL when the iteration is
704  *         finished
705  */
706 const(AVFilter)* av_filter_iterate (void** opaque);
707 
708 /** Initialize the filter system. Register all builtin filters. */
709 void avfilter_register_all ();
710 
711 /**
712  * Register a filter. This is only needed if you plan to use
713  * avfilter_get_by_name later to lookup the AVFilter structure by name. A
714  * filter can still by instantiated with avfilter_graph_alloc_filter even if it
715  * is not registered.
716  *
717  * @param filter the filter to register
718  * @return 0 if the registration was successful, a negative value
719  * otherwise
720  */
721 int avfilter_register (AVFilter* filter);
722 
723 /**
724  * Iterate over all registered filters.
725  * @return If prev is non-NULL, next registered filter after prev or NULL if
726  * prev is the last filter. If prev is NULL, return the first registered filter.
727  */
728 const(AVFilter)* avfilter_next (const(AVFilter)* prev);
729 
730 /**
731  * Get a filter definition matching the given name.
732  *
733  * @param name the filter name to find
734  * @return     the filter definition, if any matching one is registered.
735  *             NULL if none found.
736  */
737 const(AVFilter)* avfilter_get_by_name (const(char)* name);
738 
739 /**
740  * Initialize a filter with the supplied parameters.
741  *
742  * @param ctx  uninitialized filter context to initialize
743  * @param args Options to initialize the filter with. This must be a
744  *             ':'-separated list of options in the 'key=value' form.
745  *             May be NULL if the options have been set directly using the
746  *             AVOptions API or there are no options that need to be set.
747  * @return 0 on success, a negative AVERROR on failure
748  */
749 int avfilter_init_str (AVFilterContext* ctx, const(char)* args);
750 
751 /**
752  * Initialize a filter with the supplied dictionary of options.
753  *
754  * @param ctx     uninitialized filter context to initialize
755  * @param options An AVDictionary filled with options for this filter. On
756  *                return this parameter will be destroyed and replaced with
757  *                a dict containing options that were not found. This dictionary
758  *                must be freed by the caller.
759  *                May be NULL, then this function is equivalent to
760  *                avfilter_init_str() with the second parameter set to NULL.
761  * @return 0 on success, a negative AVERROR on failure
762  *
763  * @note This function and avfilter_init_str() do essentially the same thing,
764  * the difference is in manner in which the options are passed. It is up to the
765  * calling code to choose whichever is more preferable. The two functions also
766  * behave differently when some of the provided options are not declared as
767  * supported by the filter. In such a case, avfilter_init_str() will fail, but
768  * this function will leave those extra options in the options AVDictionary and
769  * continue as usual.
770  */
771 int avfilter_init_dict (AVFilterContext* ctx, AVDictionary** options);
772 
773 /**
774  * Free a filter context. This will also remove the filter from its
775  * filtergraph's list of filters.
776  *
777  * @param filter the filter to free
778  */
779 void avfilter_free (AVFilterContext* filter);
780 
781 /**
782  * Insert a filter in the middle of an existing link.
783  *
784  * @param link the link into which the filter should be inserted
785  * @param filt the filter to be inserted
786  * @param filt_srcpad_idx the input pad on the filter to connect
787  * @param filt_dstpad_idx the output pad on the filter to connect
788  * @return     zero on success
789  */
790 int avfilter_insert_filter (
791     AVFilterLink* link,
792     AVFilterContext* filt,
793     uint filt_srcpad_idx,
794     uint filt_dstpad_idx);
795 
796 /**
797  * @return AVClass for AVFilterContext.
798  *
799  * @see av_opt_find().
800  */
801 const(AVClass)* avfilter_get_class ();
802 
803 struct AVFilterGraphInternal;
804 
805 /**
806  * A function pointer passed to the @ref AVFilterGraph.execute callback to be
807  * executed multiple times, possibly in parallel.
808  *
809  * @param ctx the filter context the job belongs to
810  * @param arg an opaque parameter passed through from @ref
811  *            AVFilterGraph.execute
812  * @param jobnr the index of the job being executed
813  * @param nb_jobs the total number of jobs
814  *
815  * @return 0 on success, a negative AVERROR on error
816  */
817 alias avfilter_action_func = int function (AVFilterContext* ctx, void* arg, int jobnr, int nb_jobs);
818 
819 /**
820  * A function executing multiple jobs, possibly in parallel.
821  *
822  * @param ctx the filter context to which the jobs belong
823  * @param func the function to be called multiple times
824  * @param arg the argument to be passed to func
825  * @param ret a nb_jobs-sized array to be filled with return values from each
826  *            invocation of func
827  * @param nb_jobs the number of jobs to execute
828  *
829  * @return 0 on success, a negative AVERROR on error
830  */
831 alias avfilter_execute_func = int function (
832     AVFilterContext* ctx,
833     int function () func,
834     void* arg,
835     int* ret,
836     int nb_jobs);
837 
838 struct AVFilterGraph
839 {
840     const(AVClass)* av_class;
841     AVFilterContext** filters;
842     uint nb_filters;
843 
844     char* scale_sws_opts; ///< sws options to use for the auto-inserted scale filters
845 
846     char* resample_lavr_opts; ///< libavresample options to use for the auto-inserted resample filters
847 
848     /**
849      * Type of multithreading allowed for filters in this graph. A combination
850      * of AVFILTER_THREAD_* flags.
851      *
852      * May be set by the caller at any point, the setting will apply to all
853      * filters initialized after that. The default is allowing everything.
854      *
855      * When a filter in this graph is initialized, this field is combined using
856      * bit AND with AVFilterContext.thread_type to get the final mask used for
857      * determining allowed threading types. I.e. a threading type needs to be
858      * set in both to be allowed.
859      */
860     int thread_type;
861 
862     /**
863      * Maximum number of threads used by filters in this graph. May be set by
864      * the caller before adding any filters to the filtergraph. Zero (the
865      * default) means that the number of threads is determined automatically.
866      */
867     int nb_threads;
868 
869     /**
870      * Opaque object for libavfilter internal use.
871      */
872     AVFilterGraphInternal* internal;
873 
874     /**
875      * Opaque user data. May be set by the caller to an arbitrary value, e.g. to
876      * be used from callbacks like @ref AVFilterGraph.execute.
877      * Libavfilter will not touch this field in any way.
878      */
879     void* opaque;
880 
881     /**
882      * This callback may be set by the caller immediately after allocating the
883      * graph and before adding any filters to it, to provide a custom
884      * multithreading implementation.
885      *
886      * If set, filters with slice threading capability will call this callback
887      * to execute multiple jobs in parallel.
888      *
889      * If this field is left unset, libavfilter will use its internal
890      * implementation, which may or may not be multithreaded depending on the
891      * platform and build options.
892      */
893     int function () execute;
894 
895     char* aresample_swr_opts; ///< swr options to use for the auto-inserted aresample filters, Access ONLY through AVOptions
896 
897     /**
898      * Private fields
899      *
900      * The following fields are for internal use only.
901      * Their type, offset, number and semantic can change without notice.
902      */
903 
904     AVFilterLink** sink_links;
905     int sink_links_count;
906 
907     uint disable_auto_convert;
908 }
909 
910 /**
911  * Allocate a filter graph.
912  *
913  * @return the allocated filter graph on success or NULL.
914  */
915 AVFilterGraph* avfilter_graph_alloc ();
916 
917 /**
918  * Create a new filter instance in a filter graph.
919  *
920  * @param graph graph in which the new filter will be used
921  * @param filter the filter to create an instance of
922  * @param name Name to give to the new instance (will be copied to
923  *             AVFilterContext.name). This may be used by the caller to identify
924  *             different filters, libavfilter itself assigns no semantics to
925  *             this parameter. May be NULL.
926  *
927  * @return the context of the newly created filter instance (note that it is
928  *         also retrievable directly through AVFilterGraph.filters or with
929  *         avfilter_graph_get_filter()) on success or NULL on failure.
930  */
931 AVFilterContext* avfilter_graph_alloc_filter (
932     AVFilterGraph* graph,
933     const(AVFilter)* filter,
934     const(char)* name);
935 
936 /**
937  * Get a filter instance identified by instance name from graph.
938  *
939  * @param graph filter graph to search through.
940  * @param name filter instance name (should be unique in the graph).
941  * @return the pointer to the found filter instance or NULL if it
942  * cannot be found.
943  */
944 AVFilterContext* avfilter_graph_get_filter (AVFilterGraph* graph, const(char)* name);
945 
946 /**
947  * Create and add a filter instance into an existing graph.
948  * The filter instance is created from the filter filt and inited
949  * with the parameter args. opaque is currently ignored.
950  *
951  * In case of success put in *filt_ctx the pointer to the created
952  * filter instance, otherwise set *filt_ctx to NULL.
953  *
954  * @param name the instance name to give to the created filter instance
955  * @param graph_ctx the filter graph
956  * @return a negative AVERROR error code in case of failure, a non
957  * negative value otherwise
958  */
959 int avfilter_graph_create_filter (
960     AVFilterContext** filt_ctx,
961     const(AVFilter)* filt,
962     const(char)* name,
963     const(char)* args,
964     void* opaque,
965     AVFilterGraph* graph_ctx);
966 
967 /**
968  * Enable or disable automatic format conversion inside the graph.
969  *
970  * Note that format conversion can still happen inside explicitly inserted
971  * scale and aresample filters.
972  *
973  * @param flags  any of the AVFILTER_AUTO_CONVERT_* constants
974  */
975 void avfilter_graph_set_auto_convert (AVFilterGraph* graph, uint flags);
976 
977 enum
978 {
979     AVFILTER_AUTO_CONVERT_ALL = 0, /**< all automatic conversions enabled */
980     AVFILTER_AUTO_CONVERT_NONE = -1 /**< all automatic conversions disabled */
981 }
982 
983 /**
984  * Check validity and configure all the links and formats in the graph.
985  *
986  * @param graphctx the filter graph
987  * @param log_ctx context used for logging
988  * @return >= 0 in case of success, a negative AVERROR code otherwise
989  */
990 int avfilter_graph_config (AVFilterGraph* graphctx, void* log_ctx);
991 
992 /**
993  * Free a graph, destroy its links, and set *graph to NULL.
994  * If *graph is NULL, do nothing.
995  */
996 void avfilter_graph_free (AVFilterGraph** graph);
997 
998 /**
999  * A linked-list of the inputs/outputs of the filter chain.
1000  *
1001  * This is mainly useful for avfilter_graph_parse() / avfilter_graph_parse2(),
1002  * where it is used to communicate open (unlinked) inputs and outputs from and
1003  * to the caller.
1004  * This struct specifies, per each not connected pad contained in the graph, the
1005  * filter context and the pad index required for establishing a link.
1006  */
1007 struct AVFilterInOut
1008 {
1009     /** unique name for this input/output in the list */
1010     char* name;
1011 
1012     /** filter context associated to this input/output */
1013     AVFilterContext* filter_ctx;
1014 
1015     /** index of the filt_ctx pad to use for linking */
1016     int pad_idx;
1017 
1018     /** next input/input in the list, NULL if this is the last */
1019     AVFilterInOut* next;
1020 }
1021 
1022 /**
1023  * Allocate a single AVFilterInOut entry.
1024  * Must be freed with avfilter_inout_free().
1025  * @return allocated AVFilterInOut on success, NULL on failure.
1026  */
1027 AVFilterInOut* avfilter_inout_alloc ();
1028 
1029 /**
1030  * Free the supplied list of AVFilterInOut and set *inout to NULL.
1031  * If *inout is NULL, do nothing.
1032  */
1033 void avfilter_inout_free (AVFilterInOut** inout_);
1034 
1035 /**
1036  * Add a graph described by a string to a graph.
1037  *
1038  * @note The caller must provide the lists of inputs and outputs,
1039  * which therefore must be known before calling the function.
1040  *
1041  * @note The inputs parameter describes inputs of the already existing
1042  * part of the graph; i.e. from the point of view of the newly created
1043  * part, they are outputs. Similarly the outputs parameter describes
1044  * outputs of the already existing filters, which are provided as
1045  * inputs to the parsed filters.
1046  *
1047  * @param graph   the filter graph where to link the parsed graph context
1048  * @param filters string to be parsed
1049  * @param inputs  linked list to the inputs of the graph
1050  * @param outputs linked list to the outputs of the graph
1051  * @return zero on success, a negative AVERROR code on error
1052  */
1053 int avfilter_graph_parse (
1054     AVFilterGraph* graph,
1055     const(char)* filters,
1056     AVFilterInOut* inputs,
1057     AVFilterInOut* outputs,
1058     void* log_ctx);
1059 
1060 /**
1061  * Add a graph described by a string to a graph.
1062  *
1063  * In the graph filters description, if the input label of the first
1064  * filter is not specified, "in" is assumed; if the output label of
1065  * the last filter is not specified, "out" is assumed.
1066  *
1067  * @param graph   the filter graph where to link the parsed graph context
1068  * @param filters string to be parsed
1069  * @param inputs  pointer to a linked list to the inputs of the graph, may be NULL.
1070  *                If non-NULL, *inputs is updated to contain the list of open inputs
1071  *                after the parsing, should be freed with avfilter_inout_free().
1072  * @param outputs pointer to a linked list to the outputs of the graph, may be NULL.
1073  *                If non-NULL, *outputs is updated to contain the list of open outputs
1074  *                after the parsing, should be freed with avfilter_inout_free().
1075  * @return non negative on success, a negative AVERROR code on error
1076  */
1077 int avfilter_graph_parse_ptr (
1078     AVFilterGraph* graph,
1079     const(char)* filters,
1080     AVFilterInOut** inputs,
1081     AVFilterInOut** outputs,
1082     void* log_ctx);
1083 
1084 /**
1085  * Add a graph described by a string to a graph.
1086  *
1087  * @param[in]  graph   the filter graph where to link the parsed graph context
1088  * @param[in]  filters string to be parsed
1089  * @param[out] inputs  a linked list of all free (unlinked) inputs of the
1090  *                     parsed graph will be returned here. It is to be freed
1091  *                     by the caller using avfilter_inout_free().
1092  * @param[out] outputs a linked list of all free (unlinked) outputs of the
1093  *                     parsed graph will be returned here. It is to be freed by the
1094  *                     caller using avfilter_inout_free().
1095  * @return zero on success, a negative AVERROR code on error
1096  *
1097  * @note This function returns the inputs and outputs that are left
1098  * unlinked after parsing the graph and the caller then deals with
1099  * them.
1100  * @note This function makes no reference whatsoever to already
1101  * existing parts of the graph and the inputs parameter will on return
1102  * contain inputs of the newly parsed part of the graph.  Analogously
1103  * the outputs parameter will contain outputs of the newly created
1104  * filters.
1105  */
1106 int avfilter_graph_parse2 (
1107     AVFilterGraph* graph,
1108     const(char)* filters,
1109     AVFilterInOut** inputs,
1110     AVFilterInOut** outputs);
1111 
1112 /**
1113  * Send a command to one or more filter instances.
1114  *
1115  * @param graph  the filter graph
1116  * @param target the filter(s) to which the command should be sent
1117  *               "all" sends to all filters
1118  *               otherwise it can be a filter or filter instance name
1119  *               which will send the command to all matching filters.
1120  * @param cmd    the command to send, for handling simplicity all commands must be alphanumeric only
1121  * @param arg    the argument for the command
1122  * @param res    a buffer with size res_size where the filter(s) can return a response.
1123  *
1124  * @returns >=0 on success otherwise an error code.
1125  *              AVERROR(ENOSYS) on unsupported commands
1126  */
1127 int avfilter_graph_send_command (AVFilterGraph* graph, const(char)* target, const(char)* cmd, const(char)* arg, char* res, int res_len, int flags);
1128 
1129 /**
1130  * Queue a command for one or more filter instances.
1131  *
1132  * @param graph  the filter graph
1133  * @param target the filter(s) to which the command should be sent
1134  *               "all" sends to all filters
1135  *               otherwise it can be a filter or filter instance name
1136  *               which will send the command to all matching filters.
1137  * @param cmd    the command to sent, for handling simplicity all commands must be alphanumeric only
1138  * @param arg    the argument for the command
1139  * @param ts     time at which the command should be sent to the filter
1140  *
1141  * @note As this executes commands after this function returns, no return code
1142  *       from the filter is provided, also AVFILTER_CMD_FLAG_ONE is not supported.
1143  */
1144 int avfilter_graph_queue_command (AVFilterGraph* graph, const(char)* target, const(char)* cmd, const(char)* arg, int flags, double ts);
1145 
1146 /**
1147  * Dump a graph into a human-readable string representation.
1148  *
1149  * @param graph    the graph to dump
1150  * @param options  formatting options; currently ignored
1151  * @return  a string, or NULL in case of memory allocation failure;
1152  *          the string must be freed using av_free
1153  */
1154 char* avfilter_graph_dump (AVFilterGraph* graph, const(char)* options);
1155 
1156 /**
1157  * Request a frame on the oldest sink link.
1158  *
1159  * If the request returns AVERROR_EOF, try the next.
1160  *
1161  * Note that this function is not meant to be the sole scheduling mechanism
1162  * of a filtergraph, only a convenience function to help drain a filtergraph
1163  * in a balanced way under normal circumstances.
1164  *
1165  * Also note that AVERROR_EOF does not mean that frames did not arrive on
1166  * some of the sinks during the process.
1167  * When there are multiple sink links, in case the requested link
1168  * returns an EOF, this may cause a filter to flush pending frames
1169  * which are sent to another sink link, although unrequested.
1170  *
1171  * @return  the return value of ff_request_frame(),
1172  *          or AVERROR_EOF if all links returned AVERROR_EOF
1173  */
1174 int avfilter_graph_request_oldest (AVFilterGraph* graph);
1175 
1176 /**
1177  * @}
1178  */
1179 
1180 /* AVFILTER_AVFILTER_H */