FFmpeg  4.0
Macros | Functions | Variables
avfiltergraph.c File Reference
#include "config.h"
#include <string.h>
#include "libavutil/avassert.h"
#include "libavutil/avstring.h"
#include "libavutil/bprint.h"
#include "libavutil/channel_layout.h"
#include "libavutil/imgutils.h"
#include "libavutil/internal.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "framequeue.h"
#include "avfilter.h"
#include "buffersink.h"
#include "formats.h"
#include "internal.h"
#include "thread.h"

Go to the source code of this file.

Macros

#define FF_INTERNAL_FIELDS   1
 
#define OFFSET(x)   offsetof(AVFilterGraph, x)
 
#define F   AV_OPT_FLAG_FILTERING_PARAM
 
#define V   AV_OPT_FLAG_VIDEO_PARAM
 
#define A   AV_OPT_FLAG_AUDIO_PARAM
 
#define MERGE_DISPATCH(field, statement)
 
#define REDUCE_FORMATS(fmt_type, list_type, list, var, nb, add_format, unref_format)
 
#define CH_CENTER_PAIR   (AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER)
 
#define CH_FRONT_PAIR   (AV_CH_FRONT_LEFT | AV_CH_FRONT_RIGHT)
 
#define CH_STEREO_PAIR   (AV_CH_STEREO_LEFT | AV_CH_STEREO_RIGHT)
 
#define CH_WIDE_PAIR   (AV_CH_WIDE_LEFT | AV_CH_WIDE_RIGHT)
 
#define CH_SIDE_PAIR   (AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT)
 
#define CH_DIRECT_PAIR   (AV_CH_SURROUND_DIRECT_LEFT | AV_CH_SURROUND_DIRECT_RIGHT)
 
#define CH_BACK_PAIR   (AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT)
 

Functions

void ff_graph_thread_free (AVFilterGraph *graph)
 
int ff_graph_thread_init (AVFilterGraph *graph)
 
AVFilterGraphavfilter_graph_alloc (void)
 Allocate a filter graph. More...
 
void ff_filter_graph_remove_filter (AVFilterGraph *graph, AVFilterContext *filter)
 Remove a filter from a graph;. More...
 
void avfilter_graph_free (AVFilterGraph **graph)
 Free a graph, destroy its links, and set *graph to NULL. More...
 
int avfilter_graph_create_filter (AVFilterContext **filt_ctx, const AVFilter *filt, const char *name, const char *args, void *opaque, AVFilterGraph *graph_ctx)
 Create and add a filter instance into an existing graph. More...
 
void avfilter_graph_set_auto_convert (AVFilterGraph *graph, unsigned flags)
 Enable or disable automatic format conversion inside the graph. More...
 
AVFilterContextavfilter_graph_alloc_filter (AVFilterGraph *graph, const AVFilter *filter, const char *name)
 Create a new filter instance in a filter graph. More...
 
static int graph_check_validity (AVFilterGraph *graph, AVClass *log_ctx)
 Check for the validity of graph. More...
 
static int graph_config_links (AVFilterGraph *graph, AVClass *log_ctx)
 Configure all the links of graphctx. More...
 
static int graph_check_links (AVFilterGraph *graph, AVClass *log_ctx)
 
AVFilterContextavfilter_graph_get_filter (AVFilterGraph *graph, const char *name)
 Get a filter instance identified by instance name from graph. More...
 
static void sanitize_channel_layouts (void *log, AVFilterChannelLayouts *l)
 
static int filter_query_formats (AVFilterContext *ctx)
 
static int formats_declared (AVFilterContext *f)
 
static AVFilterFormatsclone_filter_formats (AVFilterFormats *arg)
 
static int can_merge_formats (AVFilterFormats *a_arg, AVFilterFormats *b_arg, enum AVMediaType type, int is_sample_rate)
 
static int query_formats (AVFilterGraph *graph, AVClass *log_ctx)
 Perform one round of query_formats() and merging formats lists on the filter graph. More...
 
static int get_fmt_score (enum AVSampleFormat dst_fmt, enum AVSampleFormat src_fmt)
 
static enum AVSampleFormat find_best_sample_fmt_of_2 (enum AVSampleFormat dst_fmt1, enum AVSampleFormat dst_fmt2, enum AVSampleFormat src_fmt)
 
static int pick_format (AVFilterLink *link, AVFilterLink *ref)
 
static int reduce_formats_on_filter (AVFilterContext *filter)
 
static int reduce_formats (AVFilterGraph *graph)
 
static void swap_samplerates_on_filter (AVFilterContext *filter)
 
static void swap_samplerates (AVFilterGraph *graph)
 
static void swap_channel_layouts_on_filter (AVFilterContext *filter)
 
static void swap_channel_layouts (AVFilterGraph *graph)
 
static void swap_sample_fmts_on_filter (AVFilterContext *filter)
 
static void swap_sample_fmts (AVFilterGraph *graph)
 
static int pick_formats (AVFilterGraph *graph)
 
static int graph_config_formats (AVFilterGraph *graph, AVClass *log_ctx)
 Configure the formats of all the links in the graph. More...
 
static int graph_config_pointers (AVFilterGraph *graph, AVClass *log_ctx)
 
static int graph_insert_fifos (AVFilterGraph *graph, AVClass *log_ctx)
 
int avfilter_graph_config (AVFilterGraph *graphctx, void *log_ctx)
 Check validity and configure all the links and formats in the graph. More...
 
int avfilter_graph_send_command (AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, char *res, int res_len, int flags)
 Send a command to one or more filter instances. More...
 
int avfilter_graph_queue_command (AVFilterGraph *graph, const char *target, const char *command, const char *arg, int flags, double ts)
 Queue a command for one or more filter instances. More...
 
static void heap_bubble_up (AVFilterGraph *graph, AVFilterLink *link, int index)
 
static void heap_bubble_down (AVFilterGraph *graph, AVFilterLink *link, int index)
 
void ff_avfilter_graph_update_heap (AVFilterGraph *graph, AVFilterLink *link)
 Update the position of a link in the age heap. More...
 
int avfilter_graph_request_oldest (AVFilterGraph *graph)
 Request a frame on the oldest sink link. More...
 
int ff_filter_graph_run_once (AVFilterGraph *graph)
 Run one round of processing on a filter graph. More...
 

Variables

static const AVOption filtergraph_options []
 
static const AVClass filtergraph_class
 
static const uint64_t ch_subst [][2]
 

Macro Definition Documentation

◆ FF_INTERNAL_FIELDS

#define FF_INTERNAL_FIELDS   1

Definition at line 36 of file avfiltergraph.c.

◆ OFFSET

#define OFFSET (   x)    offsetof(AVFilterGraph, x)

Definition at line 45 of file avfiltergraph.c.

◆ F

Definition at line 46 of file avfiltergraph.c.

◆ V

#define V   AV_OPT_FLAG_VIDEO_PARAM

Definition at line 47 of file avfiltergraph.c.

◆ A

#define A   AV_OPT_FLAG_AUDIO_PARAM

Definition at line 48 of file avfiltergraph.c.

◆ MERGE_DISPATCH

#define MERGE_DISPATCH (   field,
  statement 
)
Value:
if (!(link->in_ ## field && link->out_ ## field)) { \
count_delayed++; \
} else if (link->in_ ## field == link->out_ ## field) { \
count_already_merged++; \
} else if (!convert_needed) { \
count_merged++; \
statement \
}

Referenced by query_formats().

◆ REDUCE_FORMATS

#define REDUCE_FORMATS (   fmt_type,
  list_type,
  list,
  var,
  nb,
  add_format,
  unref_format 
)

Definition at line 750 of file avfiltergraph.c.

Referenced by reduce_formats_on_filter().

◆ CH_CENTER_PAIR

Definition at line 903 of file avfiltergraph.c.

◆ CH_FRONT_PAIR

#define CH_FRONT_PAIR   (AV_CH_FRONT_LEFT | AV_CH_FRONT_RIGHT)

Definition at line 904 of file avfiltergraph.c.

◆ CH_STEREO_PAIR

#define CH_STEREO_PAIR   (AV_CH_STEREO_LEFT | AV_CH_STEREO_RIGHT)

Definition at line 905 of file avfiltergraph.c.

◆ CH_WIDE_PAIR

#define CH_WIDE_PAIR   (AV_CH_WIDE_LEFT | AV_CH_WIDE_RIGHT)

Definition at line 906 of file avfiltergraph.c.

◆ CH_SIDE_PAIR

#define CH_SIDE_PAIR   (AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT)

Definition at line 907 of file avfiltergraph.c.

◆ CH_DIRECT_PAIR

Definition at line 908 of file avfiltergraph.c.

◆ CH_BACK_PAIR

#define CH_BACK_PAIR   (AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT)

Definition at line 909 of file avfiltergraph.c.

Function Documentation

◆ ff_graph_thread_free()

void ff_graph_thread_free ( AVFilterGraph graph)

Definition at line 71 of file avfiltergraph.c.

Referenced by avfilter_graph_free().

◆ ff_graph_thread_init()

int ff_graph_thread_init ( AVFilterGraph graph)

Definition at line 75 of file avfiltergraph.c.

Referenced by avfilter_graph_alloc_filter().

◆ ff_filter_graph_remove_filter()

void ff_filter_graph_remove_filter ( AVFilterGraph graph,
AVFilterContext filter 
)

Remove a filter from a graph;.

Definition at line 102 of file avfiltergraph.c.

Referenced by avfilter_free().

◆ graph_check_validity()

static int graph_check_validity ( AVFilterGraph graph,
AVClass log_ctx 
)
static

Check for the validity of graph.

A graph is considered valid if all its input and output pads are connected.

Returns
>= 0 in case of success, a negative value otherwise

Definition at line 214 of file avfiltergraph.c.

Referenced by avfilter_graph_config().

◆ graph_config_links()

static int graph_config_links ( AVFilterGraph graph,
AVClass log_ctx 
)
static

Configure all the links of graphctx.

Returns
>= 0 in case of success, a negative value otherwise

Definition at line 252 of file avfiltergraph.c.

Referenced by avfilter_graph_config().

◆ graph_check_links()

static int graph_check_links ( AVFilterGraph graph,
AVClass log_ctx 
)
static

Definition at line 269 of file avfiltergraph.c.

Referenced by avfilter_graph_config().

◆ sanitize_channel_layouts()

static void sanitize_channel_layouts ( void log,
AVFilterChannelLayouts l 
)
static

Definition at line 301 of file avfiltergraph.c.

Referenced by filter_query_formats().

◆ filter_query_formats()

static int filter_query_formats ( AVFilterContext ctx)
static

Definition at line 316 of file avfiltergraph.c.

Referenced by query_formats().

◆ formats_declared()

static int formats_declared ( AVFilterContext f)
static

Definition at line 352 of file avfiltergraph.c.

Referenced by query_formats().

◆ clone_filter_formats()

static AVFilterFormats* clone_filter_formats ( AVFilterFormats arg)
static

Definition at line 375 of file avfiltergraph.c.

Referenced by can_merge_formats().

◆ can_merge_formats()

static int can_merge_formats ( AVFilterFormats a_arg,
AVFilterFormats b_arg,
enum AVMediaType  type,
int  is_sample_rate 
)
static

Definition at line 388 of file avfiltergraph.c.

Referenced by query_formats().

◆ query_formats()

static int query_formats ( AVFilterGraph graph,
AVClass log_ctx 
)
static

Perform one round of query_formats() and merging formats lists on the filter graph.

Returns
>=0 if all links formats lists could be queried and merged; AVERROR(EAGAIN) some progress was made in the queries or merging and a later call may succeed; AVERROR(EIO) (may be changed) plus a log message if no progress was made and the negotiation is stuck; a negative error code if some other error happened

Definition at line 440 of file avfiltergraph.c.

Referenced by graph_config_formats().

◆ get_fmt_score()

static int get_fmt_score ( enum AVSampleFormat  dst_fmt,
enum AVSampleFormat  src_fmt 
)
static

Definition at line 641 of file avfiltergraph.c.

Referenced by find_best_sample_fmt_of_2().

◆ find_best_sample_fmt_of_2()

static enum AVSampleFormat find_best_sample_fmt_of_2 ( enum AVSampleFormat  dst_fmt1,
enum AVSampleFormat  dst_fmt2,
enum AVSampleFormat  src_fmt 
)
static

Definition at line 664 of file avfiltergraph.c.

Referenced by pick_format().

◆ pick_format()

static int pick_format ( AVFilterLink link,
AVFilterLink ref 
)
static

Definition at line 675 of file avfiltergraph.c.

Referenced by pick_formats().

◆ reduce_formats_on_filter()

static int reduce_formats_on_filter ( AVFilterContext filter)
static

Definition at line 787 of file avfiltergraph.c.

Referenced by reduce_formats().

◆ reduce_formats()

static int reduce_formats ( AVFilterGraph graph)
static

Definition at line 837 of file avfiltergraph.c.

Referenced by graph_config_formats().

◆ swap_samplerates_on_filter()

static void swap_samplerates_on_filter ( AVFilterContext filter)
static

Definition at line 854 of file avfiltergraph.c.

Referenced by swap_samplerates().

◆ swap_samplerates()

static void swap_samplerates ( AVFilterGraph graph)
static

Definition at line 895 of file avfiltergraph.c.

Referenced by graph_config_formats().

◆ swap_channel_layouts_on_filter()

static void swap_channel_layouts_on_filter ( AVFilterContext filter)
static

Definition at line 937 of file avfiltergraph.c.

Referenced by swap_channel_layouts().

◆ swap_channel_layouts()

static void swap_channel_layouts ( AVFilterGraph graph)
static

Definition at line 1026 of file avfiltergraph.c.

Referenced by graph_config_formats().

◆ swap_sample_fmts_on_filter()

static void swap_sample_fmts_on_filter ( AVFilterContext filter)
static

Definition at line 1034 of file avfiltergraph.c.

Referenced by swap_sample_fmts().

◆ swap_sample_fmts()

static void swap_sample_fmts ( AVFilterGraph graph)
static

Definition at line 1094 of file avfiltergraph.c.

Referenced by graph_config_formats().

◆ pick_formats()

static int pick_formats ( AVFilterGraph graph)
static

Definition at line 1103 of file avfiltergraph.c.

Referenced by graph_config_formats().

◆ graph_config_formats()

static int graph_config_formats ( AVFilterGraph graph,
AVClass log_ctx 
)
static

Configure the formats of all the links in the graph.

Definition at line 1158 of file avfiltergraph.c.

Referenced by avfilter_graph_config().

◆ graph_config_pointers()

static int graph_config_pointers ( AVFilterGraph graph,
AVClass log_ctx 
)
static

Definition at line 1186 of file avfiltergraph.c.

Referenced by avfilter_graph_config().

◆ graph_insert_fifos()

static int graph_insert_fifos ( AVFilterGraph graph,
AVClass log_ctx 
)
static

Definition at line 1228 of file avfiltergraph.c.

Referenced by avfilter_graph_config().

◆ heap_bubble_up()

static void heap_bubble_up ( AVFilterGraph graph,
AVFilterLink link,
int  index 
)
static

Definition at line 1347 of file avfiltergraph.c.

Referenced by ff_avfilter_graph_update_heap().

◆ heap_bubble_down()

static void heap_bubble_down ( AVFilterGraph graph,
AVFilterLink link,
int  index 
)
static

◆ ff_avfilter_graph_update_heap()

void ff_avfilter_graph_update_heap ( AVFilterGraph graph,
AVFilterLink link 
)

Update the position of a link in the age heap.

Definition at line 1390 of file avfiltergraph.c.

Referenced by ff_update_link_current_pts().

◆ ff_filter_graph_run_once()

int ff_filter_graph_run_once ( AVFilterGraph graph)

Run one round of processing on a filter graph.

Definition at line 1441 of file avfiltergraph.c.

Referenced by avfilter_graph_request_oldest(), get_frame_internal(), and push_frame().

Variable Documentation

◆ filtergraph_options

const AVOption filtergraph_options[]
static
Initial value:
= {
{ "thread_type", "Allowed thread types", OFFSET(thread_type), AV_OPT_TYPE_FLAGS,
{ .i64 = AVFILTER_THREAD_SLICE }, 0, INT_MAX, F|V|A, "thread_type" },
{ "slice", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AVFILTER_THREAD_SLICE }, .flags = F|V|A, .unit = "thread_type" },
{ "threads", "Maximum number of threads", OFFSET(nb_threads),
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, F|V|A },
{"scale_sws_opts" , "default scale filter options" , OFFSET(scale_sws_opts) ,
AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, F|V },
{"aresample_swr_opts" , "default aresample filter options" , OFFSET(aresample_swr_opts) ,
AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, F|A },
{ NULL },
}
#define NULL
Definition: coverity.c:32
#define AVFILTER_THREAD_SLICE
Process multiple parts of the frame concurrently.
Definition: avfilter.h:333
#define OFFSET(x)
Definition: avfiltergraph.c:45
#define V
Definition: avfiltergraph.c:47
#define F
Definition: avfiltergraph.c:46
#define A
Definition: avfiltergraph.c:48

Definition at line 49 of file avfiltergraph.c.

◆ filtergraph_class

const AVClass filtergraph_class
static
Initial value:
= {
.class_name = "AVFilterGraph",
.item_name = av_default_item_name,
}
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:191
static const AVOption filtergraph_options[]
Definition: avfiltergraph.c:49

Definition at line 62 of file avfiltergraph.c.

Referenced by avfilter_graph_alloc().

◆ ch_subst

const uint64_t ch_subst[][2]
static
Initial value:
= {
{ CH_CENTER_PAIR, CH_WIDE_PAIR },
{ CH_CENTER_PAIR, AV_CH_FRONT_CENTER },
{ CH_WIDE_PAIR, CH_FRONT_PAIR },
{ CH_WIDE_PAIR, CH_CENTER_PAIR },
{ CH_WIDE_PAIR, AV_CH_FRONT_CENTER },
{ AV_CH_FRONT_CENTER, CH_FRONT_PAIR },
{ AV_CH_FRONT_CENTER, CH_CENTER_PAIR },
{ AV_CH_FRONT_CENTER, CH_WIDE_PAIR },
{ CH_BACK_PAIR, CH_DIRECT_PAIR },
{ CH_BACK_PAIR, AV_CH_BACK_CENTER },
{ AV_CH_BACK_CENTER, CH_BACK_PAIR },
{ AV_CH_BACK_CENTER, CH_DIRECT_PAIR },
{ AV_CH_BACK_CENTER, CH_SIDE_PAIR },
}
#define CH_DIRECT_PAIR
#define CH_CENTER_PAIR
#define AV_CH_FRONT_CENTER
#define CH_BACK_PAIR
#define AV_CH_BACK_CENTER
#define CH_FRONT_PAIR
#define CH_SIDE_PAIR
#define CH_WIDE_PAIR

Definition at line 913 of file avfiltergraph.c.

Referenced by swap_channel_layouts_on_filter().