FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
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/internal.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "libavcodec/avcodec.h"
#include "avfilter.h"
#include "formats.h"
#include "internal.h"
#include "thread.h"

Go to the source code of this file.

Macros

#define OFFSET(x)   offsetof(AVFilterGraph, x)
 
#define FLAGS   AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
 
#define MERGE_DISPATCH(field, statement)
 
#define REDUCE_FORMATS(fmt_type, list_type, list, var, nb, add_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.
 
void ff_filter_graph_remove_filter (AVFilterGraph *graph, AVFilterContext *filter)
 Remove a filter from a graph;.
 
void avfilter_graph_free (AVFilterGraph **graph)
 Free a graph, destroy its links, and set *graph to NULL.
 
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.
 
void avfilter_graph_set_auto_convert (AVFilterGraph *graph, unsigned flags)
 Enable or disable automatic format conversion inside the graph.
 
AVFilterContextavfilter_graph_alloc_filter (AVFilterGraph *graph, const AVFilter *filter, const char *name)
 Create a new filter instance in a filter graph.
 
static int graph_check_validity (AVFilterGraph *graph, AVClass *log_ctx)
 Check for the validity of graph.
 
static int graph_config_links (AVFilterGraph *graph, AVClass *log_ctx)
 Configure all the links of graphctx.
 
AVFilterContextavfilter_graph_get_filter (AVFilterGraph *graph, char *name)
 Get a filter instance with name name from graph.
 
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.
 
static int pick_format (AVFilterLink *link, AVFilterLink *ref)
 
static int reduce_formats_on_filter (AVFilterContext *filter)
 
static void 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.
 
static int ff_avfilter_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.
 
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.
 
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.
 
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.
 
int avfilter_graph_request_oldest (AVFilterGraph *graph)
 Request a frame on the oldest sink link.
 

Variables

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

Macro Definition Documentation

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

Definition at line 41 of file avfiltergraph.c.

Definition at line 42 of file avfiltergraph.c.

#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().

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

Definition at line 681 of file avfiltergraph.c.

Referenced by reduce_formats_on_filter().

Definition at line 825 of file avfiltergraph.c.

#define CH_FRONT_PAIR   (AV_CH_FRONT_LEFT | AV_CH_FRONT_RIGHT)

Definition at line 826 of file avfiltergraph.c.

#define CH_STEREO_PAIR   (AV_CH_STEREO_LEFT | AV_CH_STEREO_RIGHT)

Definition at line 827 of file avfiltergraph.c.

#define CH_WIDE_PAIR   (AV_CH_WIDE_LEFT | AV_CH_WIDE_RIGHT)

Definition at line 828 of file avfiltergraph.c.

#define CH_SIDE_PAIR   (AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT)

Definition at line 829 of file avfiltergraph.c.

Definition at line 830 of file avfiltergraph.c.

#define CH_BACK_PAIR   (AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT)

Definition at line 831 of file avfiltergraph.c.

Function Documentation

void ff_graph_thread_free ( AVFilterGraph graph)

Definition at line 65 of file avfiltergraph.c.

Referenced by avfilter_graph_free().

int ff_graph_thread_init ( AVFilterGraph graph)

Definition at line 69 of file avfiltergraph.c.

Referenced by avfilter_graph_alloc_filter().

void ff_filter_graph_remove_filter ( AVFilterGraph graph,
AVFilterContext filter 
)

Remove a filter from a graph;.

Definition at line 95 of file avfiltergraph.c.

Referenced by avfilter_free().

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 229 of file avfiltergraph.c.

Referenced by avfilter_graph_config().

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 267 of file avfiltergraph.c.

Referenced by avfilter_graph_config().

static void sanitize_channel_layouts ( void log,
AVFilterChannelLayouts l 
)
static

Definition at line 295 of file avfiltergraph.c.

Referenced by filter_query_formats().

static int filter_query_formats ( AVFilterContext ctx)
static

Definition at line 310 of file avfiltergraph.c.

Referenced by query_formats().

static int formats_declared ( AVFilterContext f)
static

Definition at line 349 of file avfiltergraph.c.

Referenced by query_formats().

static AVFilterFormats* clone_filter_formats ( AVFilterFormats arg)
static

Definition at line 372 of file avfiltergraph.c.

Referenced by 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 385 of file avfiltergraph.c.

Referenced by 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 437 of file avfiltergraph.c.

Referenced by graph_config_formats().

static int pick_format ( AVFilterLink link,
AVFilterLink ref 
)
static

Definition at line 619 of file avfiltergraph.c.

Referenced by pick_formats().

static int reduce_formats_on_filter ( AVFilterContext filter)
static

Definition at line 717 of file avfiltergraph.c.

Referenced by reduce_formats().

static void reduce_formats ( AVFilterGraph graph)
static

Definition at line 766 of file avfiltergraph.c.

Referenced by graph_config_formats().

static void swap_samplerates_on_filter ( AVFilterContext filter)
static

Definition at line 778 of file avfiltergraph.c.

Referenced by swap_samplerates().

static void swap_samplerates ( AVFilterGraph graph)
static

Definition at line 817 of file avfiltergraph.c.

Referenced by graph_config_formats().

static void swap_channel_layouts_on_filter ( AVFilterContext filter)
static

Definition at line 859 of file avfiltergraph.c.

Referenced by swap_channel_layouts().

static void swap_channel_layouts ( AVFilterGraph graph)
static

Definition at line 948 of file avfiltergraph.c.

Referenced by graph_config_formats().

static void swap_sample_fmts_on_filter ( AVFilterContext filter)
static

Definition at line 956 of file avfiltergraph.c.

Referenced by swap_sample_fmts().

static void swap_sample_fmts ( AVFilterGraph graph)
static

Definition at line 1016 of file avfiltergraph.c.

Referenced by graph_config_formats().

static int pick_formats ( AVFilterGraph graph)
static

Definition at line 1025 of file avfiltergraph.c.

Referenced by 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 1080 of file avfiltergraph.c.

Referenced by avfilter_graph_config().

static int ff_avfilter_graph_config_pointers ( AVFilterGraph graph,
AVClass log_ctx 
)
static

Definition at line 1107 of file avfiltergraph.c.

Referenced by avfilter_graph_config().

static int graph_insert_fifos ( AVFilterGraph graph,
AVClass log_ctx 
)
static

Definition at line 1149 of file avfiltergraph.c.

Referenced by avfilter_graph_config().

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

Definition at line 1263 of file avfiltergraph.c.

Referenced by ff_avfilter_graph_update_heap().

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

Update the position of a link in the age heap.

Definition at line 1302 of file avfiltergraph.c.

Referenced by ff_update_link_current_pts().

Variable Documentation

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, FLAGS, "thread_type" },
{ "slice", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AVFILTER_THREAD_SLICE }, .flags = FLAGS, .unit = "thread_type" },
{ "threads", "Maximum number of threads", OFFSET(nb_threads),
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FLAGS },
{"scale_sws_opts" , "default scale filter options" , OFFSET(scale_sws_opts) ,
AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, FLAGS },
{"aresample_swr_opts" , "default aresample filter options" , OFFSET(aresample_swr_opts) ,
AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, FLAGS },
{ NULL },
}

Definition at line 43 of file avfiltergraph.c.

const AVClass filtergraph_class
static
Initial value:
= {
.class_name = "AVFilterGraph",
.item_name = av_default_item_name,
}

Definition at line 56 of file avfiltergraph.c.

Referenced by avfilter_graph_alloc().

const uint64_t ch_subst[][2]
static