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 */