login

<     >

2015-03-19 15:06:39 (UTC-03:00)

Marcel Rodrigues <marcelgmr@gmail.com>

Add scale command.

diff --git a/srtsync.c b/srtsync.c
index 431a39c..e3e7f91 100644
--- a/srtsync.c
+++ b/srtsync.c
@@ -159,6 +159,17 @@ shift(Subtitles *subs, int sign, uint32_t ms)
     }
 }
 
+void
+scale(Subtitles *subs, double factor)
+{
+    int i;
+
+    for (i = 0; i < subs->count; i++) {
+        subs->lines[i].on *= factor;
+        subs->lines[i].off *= factor;
+    }
+}
+
 int
 closest(Subtitles *subs, uint32_t ms)
 {
@@ -219,6 +230,7 @@ usage(FILE *fp)
         "  srtsync (-h|--help|help) -- print this help message\n"
         "  srtsync search TIME [WORD [WORD [...]]] -- search around TIME\n"
         "  srtsync shift (-TIME|+TIME) -- shift all subtitles by TIME\n"
+        "  srtsync scale FACTOR -- multiply all time stamps by FACTOR\n"
         "\n"
     );
 }
@@ -247,8 +259,7 @@ main(int argc, char *argv[])
             fprintf(stderr, "Not found.\n");
             return 1;
         }
-    }
-    if (!strcmp(argv[1], "shift") && argc == 3) {
+    } else if (!strcmp(argv[1], "shift") && argc == 3) {
         int sign;
         uint32_t ms;
         char *hms = argv[2];
@@ -264,6 +275,12 @@ main(int argc, char *argv[])
         }
         ms = hms2ms(hms);
         shift(subs, sign, ms);
+    } else if (!strcmp(argv[1], "scale") && argc == 3) {
+        double factor = atof(argv[2]);
+        scale(subs, factor);
+    } else {
+        usage(stderr);
+        return 1;
     }
     save_subs(stdout, subs);
     free_subs(&subs);