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
parent 34d7c8b3d4
commit 16e101ba54

View File

@ -1442,7 +1442,8 @@ static void show_rate_histogram(struct rate_hist *hist,
show_histogram(hist->bucket, buckets, hist->total, scale); 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_) 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)) if (arg_match(&arg, ctrl_args[i], argi))
{ {
int j;
match = 1; 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[j][0] = ctrl_args_map[i];
arg_ctrls[arg_ctrl_cnt][1] = arg_parse_enum_or_int(&arg); arg_ctrls[j][1] = arg_parse_enum_or_int(&arg);
arg_ctrl_cnt++; if(j == arg_ctrl_cnt)
arg_ctrl_cnt++;
} }
} }
} }