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