30 #define WHITESPACES " \n\t" 
   44                "Cannot create the link %s:%d -> %s:%d\n",
 
   70                "Bad (empty?) label found in the following: \"%s\".\n", start);
 
   74     if (*(*buf)++ != 
']') {
 
   76                "Mismatched '[' found in the following: \"%s\".\n", start);
 
   97                          const char *filt_name, 
const char *
args, 
void *log_ctx)
 
  101     char *tmp_args = 
NULL;
 
  104     snprintf(inst_name, 
sizeof(inst_name), 
"Parsed_%s_%d", filt_name, index);
 
  110                "No such filter: '%s'\n", filt_name);
 
  117                "Error creating filter '%s'\n", filt_name);
 
  121     if (!strcmp(filt_name, 
"scale") && args && !strstr(args, 
"flags") &&
 
  133                "Error initializing filter '%s'", filt_name);
 
  162                         int index, 
void *log_ctx)
 
  173     ret = 
create_filter(filt_ctx, graph, index, name, opts, log_ctx);
 
  198     while (*links && (!(*links)->name || strcmp((*links)->name, label)))
 
  199         links = &((*links)->next);
 
  213     element->
next = *inouts;
 
  219     while (*inouts && (*inouts)->
next)
 
  220         inouts = &((*inouts)->next);
 
  225         (*inouts)->
next = *element;
 
  235     for (pad = 0; pad < filt_ctx->
nb_inputs; pad++) {
 
  239             *curr_inputs = (*curr_inputs)->
next;
 
  259                "Too many inputs specified for the \"%s\" filter.\n",
 
  283     while (**buf == 
'[') {
 
  312     *curr_inputs = parsed_inputs;
 
  323     while (**buf == 
'[') {
 
  334                    "No output pad can be associated to link label '%s'.\n", name);
 
  338         *curr_inputs = (*curr_inputs)->
next;
 
  367     char *p = strchr(*buf, 
';');
 
  369     if (strncmp(*buf, 
"sws_flags=", 10))
 
  406         if ((
ret = 
parse_inputs(&filters, &curr_inputs, &open_outputs, graph)) < 0)
 
  415         if ((
ret = 
parse_outputs(&filters, &curr_inputs, &open_inputs, &open_outputs,
 
  422         if (chr == 
';' && curr_inputs)
 
  425     } 
while (chr == 
',' || chr == 
';');
 
  429                "Unable to parse graph description substring: \"%s\"\n",
 
  438     *inputs  = open_inputs;
 
  439     *outputs = open_outputs;
 
  456 #if HAVE_INCOMPATIBLE_LIBAV_ABI || !FF_API_OLD_GRAPH_PARSE 
  468     if (inputs && !inputs->
name)
 
  470     for (cur = inputs; cur; cur = cur->
next) {
 
  473                      "Not enough inputs specified for the \"%s\" filter.\n",
 
  488     if (outputs && !outputs->name)
 
  490     for (cur = outputs; cur; cur = cur->
next) {
 
  493                    "Invalid filterchain containing an unlabelled output pad: \"%s\"\n",
 
  531     int index = 0, ret = 0;
 
  543         const char *filterchain = 
filters;
 
  546         if ((ret = 
parse_inputs(&filters, &curr_inputs, &open_outputs, log_ctx)) < 0)
 
  549         if ((ret = 
parse_filter(&filter, &filters, graph, index, log_ctx)) < 0)
 
  552         if (filter->
nb_inputs == 1 && !curr_inputs && !index) {
 
  554             const char *tmp = 
"[in]";
 
  555             if ((ret = 
parse_inputs(&tmp, &curr_inputs, &open_outputs, log_ctx)) < 0)
 
  562         if ((ret = 
parse_outputs(&filters, &curr_inputs, &open_inputs, &open_outputs,
 
  569         if (chr == 
';' && curr_inputs) {
 
  571                    "Invalid filterchain containing an unlabelled output pad: \"%s\"\n",
 
  577     } 
while (chr == 
',' || chr == 
';');
 
  581                "Unable to parse graph description substring: \"%s\"\n",
 
  589         const char *tmp = 
"[out]";
 
  590         if ((ret = 
parse_outputs(&tmp, &curr_inputs, &open_inputs, &open_outputs,
 
  597     if (open_inputs_ptr) *open_inputs_ptr = open_inputs;
 
  599     if (open_outputs_ptr) *open_outputs_ptr = open_outputs;
 
AVFilterContext ** filters
void avfilter_free(AVFilterContext *filter)
Free a filter context. 
static const AVFilterPad outputs[]
Main libavfilter public API header. 
memory handling functions 
void avfilter_inout_free(AVFilterInOut **inout)
Free the supplied list of AVFilterInOut and set *inout to NULL. 
struct AVFilterInOut * next
next input/input in the list, NULL if this is the last 
char * scale_sws_opts
sws options to use for the auto-inserted scale filters 
int avfilter_link(AVFilterContext *src, unsigned srcpad, AVFilterContext *dst, unsigned dstpad)
Link two filters together. 
static av_cold int end(AVCodecContext *avctx)
static void insert_inout(AVFilterInOut **inouts, AVFilterInOut *element)
int avfilter_graph_parse2(AVFilterGraph *graph, const char *filters, AVFilterInOut **inputs, AVFilterInOut **outputs)
Add a graph described by a string to a graph. 
static int parse_inputs(const char **buf, AVFilterInOut **curr_inputs, AVFilterInOut **open_outputs, void *log_ctx)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
static AVFilterInOut * extract_inout(const char *label, AVFilterInOut **links)
unsigned nb_outputs
number of output pads 
size_t av_strlcpy(char *dst, const char *src, size_t size)
Copy the string src to dst, but no more than size - 1 bytes, and null-terminate dst. 
char * av_get_token(const char **buf, const char *term)
Unescape the given string until a non escaped terminating char, and return the token corresponding to...
const AVFilter * avfilter_get_by_name(const char *name)
Get a filter definition matching the given name. 
char * av_asprintf(const char *fmt,...)
unsigned nb_inputs
number of input pads 
AVFilterContext * filter_ctx
filter context associated to this input/output 
int avfilter_init_str(AVFilterContext *filter, const char *args)
Initialize a filter with the supplied parameters. 
A linked-list of the inputs/outputs of the filter chain. 
char * av_strdup(const char *s)
Duplicate the string s. 
static int parse_sws_flags(const char **buf, AVFilterGraph *graph)
static void append_inout(AVFilterInOut **inouts, AVFilterInOut **element)
int avfilter_graph_parse(AVFilterGraph *graph, const char *filters, AVFilterInOut *open_inputs, AVFilterInOut *open_outputs, void *log_ctx)
Add a graph described by a string to a graph. 
static const AVFilterPad inputs[]
int pad_idx
index of the filt_ctx pad to use for linking 
const char * name
Filter name. 
static int parse_filter(AVFilterContext **filt_ctx, const char **buf, AVFilterGraph *graph, int index, void *log_ctx)
Parse a string of the form FILTER_NAME[=PARAMS], and create a corresponding filter instance which is ...
char * name
unique name for this input/output in the list 
static const int8_t filt[NUMTAPS]
static int parse_outputs(const char **buf, AVFilterInOut **curr_inputs, AVFilterInOut **open_inputs, AVFilterInOut **open_outputs, void *log_ctx)
static void filter(MpegAudioContext *s, int ch, const short *samples, int incr)
AVFilterInOut * avfilter_inout_alloc(void)
Allocate a single AVFilterInOut entry. 
static int create_filter(AVFilterContext **filt_ctx, AVFilterGraph *ctx, int index, const char *filt_name, const char *args, void *log_ctx)
Create an instance of a filter, initialize and insert it in the filtergraph in *ctx. 
static int link_filter(AVFilterContext *src, int srcpad, AVFilterContext *dst, int dstpad, void *log_ctx)
Link two filters together. 
AVFilterContext * avfilter_graph_alloc_filter(AVFilterGraph *graph, const AVFilter *filter, const char *name)
Create a new filter instance in a filter graph. 
static const struct PPFilter filters[]
static char * parse_link_name(const char **buf, void *log_ctx)
Parse the name of a link, which has the format "[linkname]". 
static int link_filter_inouts(AVFilterContext *filt_ctx, AVFilterInOut **curr_inputs, AVFilterInOut **open_inputs, void *log_ctx)
int avfilter_graph_parse_ptr(AVFilterGraph *graph, const char *filters, AVFilterInOut **open_inputs_ptr, AVFilterInOut **open_outputs_ptr, void *log_ctx)
Add a graph described by a string to a graph. 
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
const AVFilter * filter
the AVFilter of which this is an instance