FFmpeg
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Macros | Functions | Variables
avfiltergraph.c File Reference
#include <ctype.h>
#include <string.h>
#include "libavutil/avassert.h"
#include "libavutil/avstring.h"
#include "libavutil/channel_layout.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "libavcodec/avcodec.h"
#include "avfilter.h"
#include "avfiltergraph.h"
#include "formats.h"
#include "internal.h"

Go to the source code of this file.

Macros

#define OFFSET(x)   offsetof(AVFilterGraph,x)
 
#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

AVFilterGraphavfilter_graph_alloc (void)
 Allocate a filter graph.
 
void avfilter_graph_free (AVFilterGraph **graph)
 Free a graph, destroy its links, and set *graph to NULL.
 
int avfilter_graph_add_filter (AVFilterGraph *graph, AVFilterContext *filter)
 Add an existing filter instance to a filter graph.
 
int avfilter_graph_create_filter (AVFilterContext **filt_ctx, 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.
 
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 int filter_query_formats (AVFilterContext *ctx)
 
static int insert_conv_filter (AVFilterGraph *graph, AVFilterLink *link, const char *filt_name, const char *filt_args)
 
static int query_formats (AVFilterGraph *graph, AVClass *log_ctx)
 
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 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 37 of file avfiltergraph.c.

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

Definition at line 495 of file avfiltergraph.c.

Referenced by reduce_formats_on_filter().

Definition at line 603 of file avfiltergraph.c.

#define CH_FRONT_PAIR   (AV_CH_FRONT_LEFT | AV_CH_FRONT_RIGHT)

Definition at line 604 of file avfiltergraph.c.

#define CH_STEREO_PAIR   (AV_CH_STEREO_LEFT | AV_CH_STEREO_RIGHT)

Definition at line 605 of file avfiltergraph.c.

#define CH_WIDE_PAIR   (AV_CH_WIDE_LEFT | AV_CH_WIDE_RIGHT)

Definition at line 606 of file avfiltergraph.c.

#define CH_SIDE_PAIR   (AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT)

Definition at line 607 of file avfiltergraph.c.

Definition at line 608 of file avfiltergraph.c.

#define CH_BACK_PAIR   (AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT)

Definition at line 609 of file avfiltergraph.c.

Function Documentation

AVFilterGraph* avfilter_graph_alloc ( void  )

Allocate a filter graph.

Examples:
doc/examples/filtering_audio.c, and doc/examples/filtering_video.c.

Definition at line 54 of file avfiltergraph.c.

Referenced by configure_filtergraph(), init_filters(), lavfi_read_header(), and video_thread().

void avfilter_graph_free ( AVFilterGraph **  graph)

Free a graph, destroy its links, and set *graph to NULL.

If *graph is NULL, do nothing.

Examples:
doc/examples/filtering_audio.c, and doc/examples/filtering_video.c.

Definition at line 63 of file avfiltergraph.c.

Referenced by configure_filtergraph(), exit_program(), lavfi_read_close(), main(), and video_thread().

int avfilter_graph_add_filter ( AVFilterGraph graphctx,
AVFilterContext filter 
)

Add an existing filter instance to a filter graph.

Parameters
graphctxthe filter graph
filterthe filter to be added

Definition at line 76 of file avfiltergraph.c.

Referenced by avfilter_graph_create_filter(), and create_filter().

int avfilter_graph_create_filter ( AVFilterContext **  filt_ctx,
AVFilter filt,
const char *  name,
const char *  args,
void opaque,
AVFilterGraph graph_ctx 
)

Create and add a filter instance into an existing graph.

The filter instance is created from the filter filt and inited with the parameters args and opaque.

In case of success put in *filt_ctx the pointer to the created filter instance, otherwise set *filt_ctx to NULL.

Parameters
namethe instance name to give to the created filter instance
graph_ctxthe filter graph
Returns
a negative AVERROR error code in case of failure, a non negative value otherwise
Examples:
doc/examples/filtering_audio.c, and doc/examples/filtering_video.c.

Definition at line 89 of file avfiltergraph.c.

Referenced by configure_input_audio_filter(), configure_input_video_filter(), configure_output_audio_filter(), configure_output_video_filter(), graph_insert_fifos(), init_filters(), insert_conv_filter(), lavfi_read_header(), and query_formats().

void avfilter_graph_set_auto_convert ( AVFilterGraph graph,
unsigned  flags 
)

Enable or disable automatic format conversion inside the graph.

Note that format conversion can still happen inside explicitly inserted scale and aconvert filters.

Parameters
flagsany of the AVFILTER_AUTO_CONVERT_* constants

Definition at line 110 of file avfiltergraph.c.

Referenced by choose_pix_fmts().

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

Referenced by avfilter_graph_config().

AVFilterContext* avfilter_graph_get_filter ( AVFilterGraph graph,
char *  name 
)

Get a filter instance with name name from graph.

Returns
the pointer to the found filter instance or NULL if it cannot be found.

Definition at line 178 of file avfiltergraph.c.

static int filter_query_formats ( AVFilterContext ctx)
static

Definition at line 189 of file avfiltergraph.c.

Referenced by insert_conv_filter(), and query_formats().

static int insert_conv_filter ( AVFilterGraph graph,
AVFilterLink link,
const char *  filt_name,
const char *  filt_args 
)
static

Definition at line 222 of file avfiltergraph.c.

Referenced by query_formats().

static int query_formats ( AVFilterGraph graph,
AVClass log_ctx 
)
static

Definition at line 275 of file avfiltergraph.c.

Referenced by graph_config_formats().

static int pick_format ( AVFilterLink link,
AVFilterLink ref 
)
static

Definition at line 440 of file avfiltergraph.c.

Referenced by pick_formats().

static int reduce_formats_on_filter ( AVFilterContext filter)
static

Definition at line 530 of file avfiltergraph.c.

Referenced by reduce_formats().

static void reduce_formats ( AVFilterGraph graph)
static

Definition at line 544 of file avfiltergraph.c.

Referenced by graph_config_formats().

static void swap_samplerates_on_filter ( AVFilterContext filter)
static

Definition at line 556 of file avfiltergraph.c.

Referenced by swap_samplerates().

static void swap_samplerates ( AVFilterGraph graph)
static

Definition at line 595 of file avfiltergraph.c.

Referenced by graph_config_formats().

static void swap_channel_layouts_on_filter ( AVFilterContext filter)
static

Definition at line 637 of file avfiltergraph.c.

Referenced by swap_channel_layouts().

static void swap_channel_layouts ( AVFilterGraph graph)
static

Definition at line 710 of file avfiltergraph.c.

Referenced by graph_config_formats().

static void swap_sample_fmts_on_filter ( AVFilterContext filter)
static

Definition at line 718 of file avfiltergraph.c.

Referenced by swap_sample_fmts().

static void swap_sample_fmts ( AVFilterGraph graph)
static

Definition at line 778 of file avfiltergraph.c.

Referenced by graph_config_formats().

static int pick_formats ( AVFilterGraph graph)
static

Definition at line 787 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 842 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 867 of file avfiltergraph.c.

Referenced by avfilter_graph_config().

static int graph_insert_fifos ( AVFilterGraph graph,
AVClass log_ctx 
)
static

Definition at line 909 of file avfiltergraph.c.

Referenced by avfilter_graph_config().

int avfilter_graph_config ( AVFilterGraph graphctx,
void log_ctx 
)

Check validity and configure all the links and formats in the graph.

Parameters
graphctxthe filter graph
log_ctxcontext used for logging
Returns
0 in case of success, a negative AVERROR code otherwise
Examples:
doc/examples/filtering_audio.c, and doc/examples/filtering_video.c.

Definition at line 947 of file avfiltergraph.c.

Referenced by configure_filtergraph(), init_filters(), lavfi_read_header(), main(), and transcode_init().

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.

Parameters
graphthe filter graph
targetthe filter(s) to which the command should be sent "all" sends to all filters otherwise it can be a filter or filter instance name which will send the command to all matching filters.
cmdthe command to sent, for handling simplicity all commands must be alphanumeric only
argthe argument for the command
resa buffer with size res_size where the filter(s) can return a response.
Returns
>=0 on success otherwise an error code. AVERROR(ENOSYS) on unsupported commands

Definition at line 965 of file avfiltergraph.c.

Referenced by avfilter_graph_send_command(), check_keyboard_interaction(), and filter_frame().

int avfilter_graph_queue_command ( AVFilterGraph graph,
const char *  target,
const char *  cmd,
const char *  arg,
int  flags,
double  ts 
)

Queue a command for one or more filter instances.

Parameters
graphthe filter graph
targetthe filter(s) to which the command should be sent "all" sends to all filters otherwise it can be a filter or filter instance name which will send the command to all matching filters.
cmdthe command to sent, for handling simplicity all commands must be alphanummeric only
argthe argument for the command
tstime at which the command should be sent to the filter
Note
As this executes commands after this function returns, no return code from the filter is provided, also AVFILTER_CMD_FLAG_ONE is not supported.

Definition at line 995 of file avfiltergraph.c.

Referenced by check_keyboard_interaction().

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

Definition at line 1023 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 1062 of file avfiltergraph.c.

Referenced by ff_update_link_current_pts().

int avfilter_graph_request_oldest ( AVFilterGraph graph)

Request a frame on the oldest sink link.

If the request returns AVERROR_EOF, try the next.

Note that this function is not meant to be the sole scheduling mechanism of a filtergraph, only a convenience function to help drain a filtergraph in a balanced way under normal circumstances.

Also note that AVERROR_EOF does not mean that frames did not arrive on some of the sinks during the process. When there are multiple sink links, in case the requested link returns an EOF, this may cause a filter to flush pending frames which are sent to another sink link, although unrequested.

Returns
the return value of ff_request_frame(), or AVERROR_EOF if all links returned AVERROR_EOF

Definition at line 1069 of file avfiltergraph.c.

Referenced by transcode_from_filter().

Variable Documentation

const AVOption options[]
static
Initial value:
={
{"scale_sws_opts" , "default scale filter options" , OFFSET(scale_sws_opts) , AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, 0 },
{"aresample_swr_opts" , "default aresample filter options" , OFFSET(aresample_swr_opts) , AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, 0 },
{0}
}

Definition at line 39 of file avfiltergraph.c.

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

Definition at line 46 of file avfiltergraph.c.

Referenced by avfilter_graph_alloc().

const uint64_t ch_subst[][2]
static