ref: 4bc33cf6957e672678a4f231d800e0e73bebf846
parent: 32181b097cbc1c45394f28ff0e0bc4b5d680edea
	author: Gregory Maxwell <greg@xiph.org>
	date: Tue Jan 15 11:53:43 EST 2013
	
Save (some) commandline arguments into a comment in opusenc. Also, fix the serial option which had gone AWOL.
--- a/src/opusenc.c
+++ b/src/opusenc.c
@@ -193,6 +193,7 @@
     {"downmix-stereo",no_argument,NULL, 0},     {"no-downmix",no_argument,NULL, 0},     {"max-delay", required_argument, NULL, 0},+    {"serial", required_argument, NULL, 0},     {"save-range", required_argument, NULL, 0},     {"set-ctl-int", required_argument, NULL, 0},     {"uncoupled", no_argument, NULL, 0},@@ -213,6 +214,7 @@
     {0, 0, 0, 0}};
int i, ret;
+ int cline_size;
OpusMSEncoder *st;
const char *opus_version;
unsigned char *packet;
@@ -236,7 +238,7 @@
int last_segments=0;
int eos=0;
OpusHeader header;
- char ENCODER_string[64];
+ char ENCODER_string[1024];
/*Counters*/
opus_int64 nb_encoded=0;
opus_int64 bytes_written=0;
@@ -317,8 +319,10 @@
comment_add(&inopt.comments, &inopt.comments_length, "ENCODER", ENCODER_string);
/*Process command-line options*/
+ cline_size=0;
   while(1){int c;
+ int save_cmd=1;
c=getopt_long(argc_utf8, argv_utf8, "hV",
long_options, &option_index);
if(c==-1)
@@ -352,9 +356,11 @@
inopt.ignorelength=1;
         }else if(strcmp(long_options[option_index].name,"raw")==0){inopt.rawmode=1;
+ save_cmd=0;
         }else if(strcmp(long_options[option_index].name,"raw-bits")==0){inopt.rawmode=1;
inopt.samplesize=atoi(optarg);
+ save_cmd=0;
           if(inopt.samplesize!=8&&inopt.samplesize!=16&&inopt.samplesize!=24){fprintf(stderr,"Invalid bit-depth: %s\n",optarg);
fprintf(stderr,"--raw-bits must be one of 8,16, or 24\n");
@@ -363,12 +369,15 @@
         }else if(strcmp(long_options[option_index].name,"raw-rate")==0){inopt.rawmode=1;
inopt.rate=atoi(optarg);
+ save_cmd=0;
         }else if(strcmp(long_options[option_index].name,"raw-chan")==0){inopt.rawmode=1;
inopt.channels=atoi(optarg);
+ save_cmd=0;
         }else if(strcmp(long_options[option_index].name,"raw-endianness")==0){inopt.rawmode=1;
inopt.endianness=atoi(optarg);
+ save_cmd=0;
         }else if(strcmp(long_options[option_index].name,"downmix-mono")==0){downmix=1;
         }else if(strcmp(long_options[option_index].name,"downmix-stereo")==0){@@ -439,6 +448,7 @@
opt_ctls++;
         }else if(strcmp(long_options[option_index].name,"save-range")==0){frange=fopen_utf8(optarg,"w");
+ save_cmd=0;
           if(frange==NULL){perror(optarg);
fprintf(stderr,"Could not open save-range file: %s\n",optarg);
@@ -449,6 +459,7 @@
         }else if(strcmp(long_options[option_index].name,"uncoupled")==0){uncoupled=1;
         }else if(strcmp(long_options[option_index].name,"comment")==0){+ save_cmd=0;
           if(!strchr(optarg,'=')){fprintf(stderr, "Invalid comment: %s\n", optarg);
fprintf(stderr, "Comments must be of the form name=value\n");
@@ -456,8 +467,10 @@
}
comment_add(&inopt.comments, &inopt.comments_length, NULL, optarg);
         }else if(strcmp(long_options[option_index].name,"artist")==0){+ save_cmd=0;
comment_add(&inopt.comments, &inopt.comments_length, "artist", optarg);
         } else if(strcmp(long_options[option_index].name,"title")==0){+ save_cmd=0;
comment_add(&inopt.comments, &inopt.comments_length, "title", optarg);
         } else if(strcmp(long_options[option_index].name,"discard-comments")==0){inopt.copy_comments=0;
@@ -476,6 +489,22 @@
exit(1);
break;
}
+    if(save_cmd && cline_size<(int)sizeof(ENCODER_string)){+ ret=snprintf(&ENCODER_string[cline_size], sizeof(ENCODER_string)-cline_size, "%s--%s",cline_size==0?"":" ",long_options[option_index].name);
+      if(ret<0||ret>=((int)sizeof(ENCODER_string)-cline_size)){+ cline_size=sizeof(ENCODER_string);
+      } else {+ cline_size+=ret;
+        if(optarg){+ ret=snprintf(&ENCODER_string[cline_size], sizeof(ENCODER_string)-cline_size, " %s",optarg);
+          if(ret<0||ret>=((int)sizeof(ENCODER_string)-cline_size)){+ cline_size=sizeof(ENCODER_string);
+          } else {+ cline_size+=ret;
+ }
+ }
+ }
+ }
}
   if(argc_utf8-optind!=2){usage();
@@ -483,6 +512,8 @@
}
inFile=argv_utf8[optind];
outFile=argv_utf8[optind+1];
+
+ if(cline_size>0)comment_add(&inopt.comments, &inopt.comments_length, "ENCODER_OPTIONS", ENCODER_string);
   if(strcmp(inFile, "-")==0){#if defined WIN32 || defined _WIN32
--
⑨