Move code from handle_link() to the only place the function is called

Commited in SoC by Vitor Sessak on 2008-04-18 18:18:35

Originally committed as revision 13319 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Vitor Sessak 2008-05-24 20:40:30 +00:00
parent 5cb9c725f2
commit cf4f7d38d0
1 changed files with 32 additions and 46 deletions

View File

@ -198,50 +198,6 @@ static void free_inout(AVFilterInOut *head)
}
}
/**
* Process a link. This funcion looks for a matching label in the *inout
* linked list. If none is found, it adds this link to the list.
*/
static int handle_link(char *name, AVFilterInOut **inout, int pad,
enum LinkType type, AVFilterContext *filter,
AVClass *log_ctx)
{
AVFilterInOut *p = *inout;
for (; p && strcmp(p->name, name); p = p->next);
if(!p) {
// First label apearence, add it to the linked list
AVFilterInOut *inoutn = av_malloc(sizeof(AVFilterInOut));
inoutn->name = name;
inoutn->type = type;
inoutn->filter = filter;
inoutn->pad_idx = pad;
inoutn->next = *inout;
*inout = inoutn;
return 0;
}
if(p->type == LinkTypeIn && type == LinkTypeOut) {
if(link_filter(filter, pad, p->filter, p->pad_idx, log_ctx) < 0)
return -1;
} else if(p->type == LinkTypeOut && type == LinkTypeIn) {
if(link_filter(p->filter, p->pad_idx, filter, pad, log_ctx) < 0)
return -1;
} else {
av_log(log_ctx, AV_LOG_ERROR,
"Two links named '%s' are either both input or both output\n",
name);
return -1;
}
p->filter = NULL;
return 0;
}
/**
* Parse "[a1][link2] ... [etc]"
*/
@ -251,17 +207,47 @@ static int parse_inouts(const char **buf, AVFilterInOut **inout, int pad,
{
while (**buf == '[') {
char *name;
AVFilterInOut *p = *inout;
parse_link_name(buf, &name, log_ctx);
if(!name)
return -1;
if(handle_link(name, inout, pad++, type, filter, log_ctx) < 0)
return -1;
for (; p && strcmp(p->name, name); p = p->next);
if(!p) {
// First label apearence, add it to the linked list
AVFilterInOut *inoutn = av_malloc(sizeof(AVFilterInOut));
inoutn->name = name;
inoutn->type = type;
inoutn->filter = filter;
inoutn->pad_idx = pad;
inoutn->next = *inout;
*inout = inoutn;
} else {
if(p->type == LinkTypeIn && type == LinkTypeOut) {
if(link_filter(filter, pad, p->filter, p->pad_idx, log_ctx) < 0)
return -1;
} else if(p->type == LinkTypeOut && type == LinkTypeIn) {
if(link_filter(p->filter, p->pad_idx, filter, pad, log_ctx) < 0)
return -1;
} else {
av_log(log_ctx, AV_LOG_ERROR,
"Two links named '%s' are either both input or both output\n",
name);
return -1;
}
p->filter = NULL;
}
pad++;
consume_whitespace(buf);
}
return pad;
}