@@ -14,7 +14,7 @@ uint32_t total = 0;
1414int fail = 0 ;
1515
1616void show_progress (const char * item) {
17- puts ( item);
17+ printf ( " %7d/%d %.2lf%% %s \r " , progress, total, progress * 100.0 / total, item);
1818}
1919
2020void load_gop_file (const char * gop_filename) {
@@ -26,10 +26,14 @@ void load_gop_file(const char * gop_filename) {
2626 auto len = strlen (buffer);
2727 if (buffer[len-1 ] == ' \n ' ) buffer[len-1 ] = 0 ;
2828 if (buffer[0 ] == 0 ) continue ;
29- if (strncmp (buffer, " #options" , 8 ) == 0 )
30- sprintf (opt_filename, " %s%s" , dir_prefix, buffer + 9 );
31- else if (strncmp (buffer, " #headers" , 8 ) == 0 )
32- sprintf (hdr_filename, " %s%s" , dir_prefix, buffer + 9 );
29+ if (strncmp (buffer, " #options" , 8 ) == 0 ) {
30+ if (!opt_filename[0 ])
31+ sprintf (opt_filename, " %s%s" , dir_prefix, buffer + 9 );
32+ }
33+ else if (strncmp (buffer, " #headers" , 8 ) == 0 ) {
34+ if (!hdr_filename[0 ])
35+ sprintf (hdr_filename, " %s%s" , dir_prefix, buffer + 9 );
36+ }
3337 else {
3438 auto data_filename = new char [strlen (dir_prefix) + strlen (buffer) + 1 ];
3539 sprintf (data_filename, " %s%s" , dir_prefix, buffer);
@@ -43,7 +47,7 @@ void load_gop_file(const char * gop_filename) {
4347 summary = (lsmash_video_summary_t *)lsmash_create_summary (LSMASH_SUMMARY_TYPE_VIDEO);
4448 summary->sample_type = ISOM_CODEC_TYPE_HVC1_VIDEO;
4549
46- show_progress ( gop_filename);
50+ printf ( " %s loaded. \n " , gop_filename);
4751}
4852
4953void load_options_file (const char * opt_filename) {
@@ -345,63 +349,66 @@ void clean_up() {
345349}
346350
347351void help (const char * argv[]) {
348- printf (" %s <file .gop>\n " , argv[0 ]);
352+ printf (" %s <file1 .gop> [<file2.gop> ... <fileN.gop>] \n " , argv[0 ]);
349353 puts (" " );
350- puts (" Mux given file with its segments into an mp4 file." );
354+ puts (" Mux given files with its segments into an mp4 file." );
351355 puts (" " );
352- puts (" CAUTION! 'file .mp4' will be overwritten without confirmation!" );
356+ puts (" CAUTION! 'fileN .mp4' will be overwritten without confirmation!" );
353357 puts (" " );
354358}
355359
356360int main (int argc, const char * argv[]) {
357- if (argc != 2 ) {
361+ if (argc < 2 ) {
358362 help (argv);
359363 return -1 ;
360364 }
361- const char * gop_filename = argv[1 ];
362- const char * extension = gop_filename + strlen (gop_filename) - 4 ;
363- if (strcmp (extension, " .gop" ) != 0 ) {
364- printf (" Only .gop file is accepted, %s given.\n " , gop_filename);
365- return -2 ;
366- }
367365
368- const char * slash = strrchr (gop_filename, ' /' );
369- if (slash == NULL ) slash = strrchr (gop_filename, ' \\ ' );
370- if (slash == NULL ) {
371- dir_prefix = " " ;
372- slash = gop_filename;
373- }
374- else {
375- int dir_len = slash - gop_filename + 2 ;
376- char * tmp_dir_prefix = new char [dir_len];
377- strncpy (tmp_dir_prefix, gop_filename, dir_len - 1 );
378- tmp_dir_prefix[dir_len - 1 ] = 0 ;
379- dir_prefix = tmp_dir_prefix;
380- slash++;
381- }
382- int len = strlen (slash) - 3 ;
383- name_prefix = new char [len];
384- strncpy (name_prefix, slash, len - 1 );
385- name_prefix[len - 1 ] = 0 ;
366+ for (int i = 1 ; i < argc; i++) {
367+ const char * gop_filename = argv[i];
368+ const char * extension = gop_filename + strlen (gop_filename) - 4 ;
369+ if (strcmp (extension, " .gop" ) != 0 ) {
370+ printf (" Only .gop file is accepted, %s given.\n " , gop_filename);
371+ return -2 ;
372+ }
386373
387- sprintf (out_filename, " %s%s.mp4" , dir_prefix, name_prefix);
374+ const char * slash = strrchr (gop_filename, ' /' );
375+ if (slash == NULL ) slash = strrchr (gop_filename, ' \\ ' );
376+ if (slash == NULL ) {
377+ dir_prefix = " " ;
378+ slash = gop_filename;
379+ }
380+ else {
381+ int dir_len = slash - gop_filename + 2 ;
382+ char * tmp_dir_prefix = new char [dir_len];
383+ strncpy (tmp_dir_prefix, gop_filename, dir_len - 1 );
384+ tmp_dir_prefix[dir_len - 1 ] = 0 ;
385+ dir_prefix = tmp_dir_prefix;
386+ slash++;
387+ }
388+ int len = strlen (slash) - 3 ;
389+ name_prefix = new char [len];
390+ strncpy (name_prefix, slash, len - 1 );
391+ name_prefix[len - 1 ] = 0 ;
388392
389- printf ( " Dir: %s \n File: %s \n " , dir_prefix, name_prefix);
393+ sprintf (out_filename, " %s%s.mp4 " , dir_prefix, name_prefix);
390394
391- load_gop_file (gop_filename);
395+ printf (" Dir: %-20s File: %-20s\n " , dir_prefix, name_prefix);
396+
397+ load_gop_file (argv[i]);
398+ }
392399
393400 if (opt_filename[0 ] == 0 ) { puts (" Options file missing." ); return -3 ; }
394401 if (hdr_filename[0 ] == 0 ) { puts (" Headers file missing." ); return -3 ; }
395402 if (data_list.size () == 0 ) { puts (" Data files missing." ); return -3 ; }
396403
397- total = data_list.size () + 2 ;
398- show_progress ( " " );
404+ total = data_list.size ();
405+ printf ( " Saving to %s \n " , out_filename );
399406
400407 load_options_file (opt_filename);
401-
402408 load_headers_file (hdr_filename);
403409
404410 for (auto data_filename : data_list) {
411+ progress++;
405412 load_data_file (data_filename);
406413 }
407414
0 commit comments