bugfix: all vpxenc arguments were not parsed under all conditions

dynamicly assign ARG_CTRL_CNT_MAX and
add check to make sure argument instance
doesnt already exist before creating a duplicate

Change-Id: I4f78a9c5346cda8e812cd89c077afe8996493508
This commit is contained in:
James Berry 2011-11-28 14:09:35 -05:00
Родитель 34d7c8b3d4
Коммит 16e101ba54
1 изменённых файлов: 18 добавлений и 5 удалений

Просмотреть файл

@ -1442,7 +1442,8 @@ static void show_rate_histogram(struct rate_hist *hist,
show_histogram(hist->bucket, buckets, hist->total, scale);
}
#define ARG_CTRL_CNT_MAX 10
#define NELEMENTS(x) (sizeof(x)/sizeof(x[0]))
#define ARG_CTRL_CNT_MAX NELEMENTS(vp8_arg_ctrl_map)
int main(int argc, const char **argv_)
{
@ -1721,14 +1722,26 @@ int main(int argc, const char **argv_)
{
if (arg_match(&arg, ctrl_args[i], argi))
{
int j;
match = 1;
if (arg_ctrl_cnt < ARG_CTRL_CNT_MAX)
/* Point either to the next free element or the first
* instance of this control.
*/
for(j=0; j<arg_ctrl_cnt; j++)
if(arg_ctrls[j][0] == ctrl_args_map[i])
break;
/* Update/insert */
assert(j < ARG_CTRL_CNT_MAX);
if (j < ARG_CTRL_CNT_MAX)
{
arg_ctrls[arg_ctrl_cnt][0] = ctrl_args_map[i];
arg_ctrls[arg_ctrl_cnt][1] = arg_parse_enum_or_int(&arg);
arg_ctrl_cnt++;
arg_ctrls[j][0] = ctrl_args_map[i];
arg_ctrls[j][1] = arg_parse_enum_or_int(&arg);
if(j == arg_ctrl_cnt)
arg_ctrl_cnt++;
}
}
}