3333
3434int main (int argc , char * argv []) {
3535
36- int i ;
36+ int i , size ;
37+ bool codec_valid = false;
38+ char * codec_names [] = { "mpeg4" , "libvpx" };
39+ char * codec_suffixes [] = { "m4v" , "avi" };
3740
3841 /* Load defaults */
3942 bool force = false;
4043 int width = GUACENC_DEFAULT_WIDTH ;
4144 int height = GUACENC_DEFAULT_HEIGHT ;
4245 int bitrate = GUACENC_DEFAULT_BITRATE ;
46+ int codec_suffix = 0 ;
47+ char * codec_name = codec_names [codec_suffix ];
4348
4449 /* Parse arguments */
4550 int opt ;
46- while ((opt = getopt (argc , argv , "s:r:f" )) != -1 ) {
51+ while ((opt = getopt (argc , argv , "s:r:f:c: " )) != -1 ) {
4752
4853 /* -s: Dimensions (WIDTHxHEIGHT) */
4954 if (opt == 's' ) {
@@ -65,6 +70,25 @@ int main(int argc, char* argv[]) {
6570 else if (opt == 'f' )
6671 force = true;
6772
73+ /* -c: Codec */
74+ else if (opt == 'c' ) {
75+ codec_name = optarg ;
76+
77+ size = sizeof (codec_names ) / sizeof (codec_names [0 ]);
78+ for (i = 0 ; i < size ; i ++ ) {
79+ if (strcmp (codec_name , codec_names [i ]) == 0 ) {
80+ codec_valid = true;
81+ codec_suffix = i ;
82+ break ;
83+ }
84+ }
85+
86+ if (codec_valid != true) {
87+ guacenc_log (GUAC_LOG_ERROR , "Invalid codec." );
88+ goto invalid_codecs ;
89+ }
90+ }
91+
6892 /* Invalid option */
6993 else {
7094 goto invalid_options ;
@@ -108,7 +132,8 @@ int main(int argc, char* argv[]) {
108132
109133 /* Generate output filename */
110134 char out_path [4096 ];
111- int len = snprintf (out_path , sizeof (out_path ), "%s.m4v" , path );
135+ int len = snprintf (out_path , sizeof (out_path ), "%s.%s" , path ,
136+ codec_suffixes [codec_suffix ]);
112137
113138 /* Do not write if filename exceeds maximum length */
114139 if (len >= sizeof (out_path )) {
@@ -118,7 +143,7 @@ int main(int argc, char* argv[]) {
118143 }
119144
120145 /* Attempt encoding, log granular success/failure at debug level */
121- if (guacenc_encode (path , out_path , "mpeg4" ,
146+ if (guacenc_encode (path , out_path , codec_name ,
122147 width , height , bitrate , force )) {
123148 failures ++ ;
124149 guacenc_log (GUAC_LOG_DEBUG ,
@@ -148,9 +173,23 @@ int main(int argc, char* argv[]) {
148173 " [-s WIDTHxHEIGHT]"
149174 " [-r BITRATE]"
150175 " [-f]"
176+ " [-c CODEC]"
151177 " [FILE]...\n" , argv [0 ]);
152178
153179 return 1 ;
154180
181+ invalid_codecs :
182+
183+ fprintf (stderr , "ERROR: Unsupported codec! Supported codecs are: " );
184+
185+ size = sizeof (codec_names ) / sizeof (codec_names [0 ]);
186+ for (i = 0 ; i < size ; i ++ ) {
187+ fprintf (stderr , "%s " , codec_names [i ]);
188+ }
189+
190+ fprintf (stderr , "\n" );
191+
192+ return 1 ;
193+
155194}
156195
0 commit comments