Merge "bugfix: all vpxenc arguments were not parsed under all conditions"
diff --git a/vpxenc.c b/vpxenc.c
index e8bd86d..2e14f24 100644
--- a/vpxenc.c
+++ b/vpxenc.c
@@ -1442,7 +1442,8 @@
     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 @@
         {
             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++;
                 }
+
             }
         }