implemented appending test movie
Stefan Schuermans

Stefan Schuermans commited on 2014-05-10 12:27:33
Showing 2 changed files, with 63 additions and 10 deletions.

... ...
@@ -1,4 +1,5 @@
1 1
 *.o
2
+.*.swp
2 3
 BlinkenConv
3 4
 BlinkenOutput
4 5
 BlinkenRecv
... ...
@@ -9,6 +9,14 @@
9 9
 
10 10
 #include <BlinkenLib/BlinkenLib.h>
11 11
 
12
+/**
13
+ * @brief generate test movie
14
+ * @param[in,out] *pMovie pointer to old/new/changed movie
15
+ * @param[in] str_format format of new video to generate,
16
+ *                       may be NULL for appending to video
17
+ * @param[in] str_mode test movie mode: black, white, dots, lines, trans
18
+ * @param[in] str_duration duration of each frame in ms (as string)
19
+ */
12 20
 static void gen_test_movie(stBlinkenMovie **ppMovie, const char *str_format,
13 21
                            const char *str_mode, const char *str_duration)
14 22
 {
... ...
@@ -16,8 +24,28 @@ static void gen_test_movie(stBlinkenMovie **ppMovie, const char *str_format,
16 24
   enum {
17 25
     ModeNone, ModeBlack, ModeWhite, ModeDots, ModeLines, ModeTrans
18 26
   } mode = ModeNone;
19
-  int duration;
27
+  int fmt_ok, append, duration;
20 28
 
29
+  //format
30
+  if (str_format == NULL) {
31
+    if (*ppMovie == NULL) {
32
+      str_format = "<none>";
33
+      fmt_ok = 0;
34
+      append = 0;
35
+    } else {
36
+      height = BlinkenMovieGetHeight(*ppMovie);
37
+      width = BlinkenMovieGetWidth(*ppMovie);
38
+      channels = BlinkenMovieGetChannels(*ppMovie);
39
+      colors = BlinkenMovieGetMaxval(*ppMovie) + 1;
40
+      fmt_ok = 1;
41
+      append = 1;
42
+    }
43
+  } else {
44
+    fmt_ok = sscanf(str_format, "%ux%u-%u/%u",
45
+                    &width, &height, &channels, &colors) == 4;
46
+    append = 0;
47
+  }
48
+  //mode
21 49
   if (strcmp(str_mode, "black") == 0)
22 50
     mode = ModeBlack;
23 51
   if (strcmp(str_mode, "white") == 0)
... ...
@@ -28,22 +56,26 @@ static void gen_test_movie(stBlinkenMovie **ppMovie, const char *str_format,
28 56
     mode = ModeLines;
29 57
   if (strcmp(str_mode, "trans") == 0)
30 58
     mode = ModeTrans;
31
-  if (sscanf(str_format, "%ux%u-%u/%u", &width, &height, &channels, &colors)
32
-      != 4)
33
-    printf("invalid movie format \"%s\" for \"-t\"\n", str_format);
59
+  //check
60
+  if (! fmt_ok)
61
+    printf("invalid movie format \"%s\" for \"-t\" or \"-ta\"\n", str_format);
34 62
   else if (mode == ModeNone)
35
-    printf("invalid test mode \"%s\" for \"-t\"\n", str_mode);
63
+    printf("invalid test mode \"%s\" for \"-t\" or \"-ta\"\n", str_mode);
36 64
   else if (sscanf(str_duration, "%u", &duration) != 1)
37
-    printf("invalid duration \"%s\" for \"-t\"\n", str_duration);
65
+    printf("invalid duration \"%s\" for \"-t\" or \"-ta\"\n", str_duration);
38 66
   else {
39 67
 
68
+    if (! append) {
40 69
       if (*ppMovie != NULL)
41 70
         BlinkenMovieFree(*ppMovie);
42 71
       *ppMovie = BlinkenMovieNew(height, width, channels, colors - 1);
43 72
       if (*ppMovie == NULL)
44
-      printf("could not create movie with format \"%ux%u-%x/%u\" for \"-t\"\n",
73
+        printf("could not create movie with format \"%ux%u-%x/%u\""
74
+               " for \"-t\" or \"-ta\"\n",
45 75
                width, height, channels, colors);
46
-    else {
76
+    }
77
+
78
+    if (*ppMovie != NULL) {
47 79
 
48 80
       unsigned int y, x, c, c2, c3, o, b, yy, xx, cc, oo;
49 81
       stBlinkenFrame *pFrame;
... ...
@@ -229,9 +261,10 @@ int main(int argCnt, char **args)
229 261
            "     reverse movie\n"
230 262
            "  -d <first> <count>\n"
231 263
            "     delete frames\n"
232
-           "  -t <width>x<height>-<channels>/<colors>\n"
233
-           "     [black|white|dots|lines|trans] <duration>\n"
264
+           "  -t <width>x<height>-<channels>/<colors> <test_mode> <duration>\n"
234 265
            "     generate a test movie\n"
266
+           "  -ta <test_mode> <duration>\n"
267
+           "     generate a test movie and append it to current video\n"
235 268
            "  -C <file> <src-x>,<src-y> <width>x<height> <dest-x>,<dest-y>\n"
236 269
            "     copy rectangular section of other movie\n"
237 270
            "  -Rcw\n"
... ...
@@ -250,6 +283,7 @@ int main(int argCnt, char **args)
250 283
            "     mirror movie diagonally (/)\n"
251 284
            "  -o <file>\n"
252 285
            "     write movie to file (*.blm, *.bmm, *.bml, *.bbm)\n\n"
286
+           "test_modes: black, white, dots, lines, trans\n\n"
253 287
            "old syntax: %s <input-file> [<output-file>]\n\n",
254 288
            args[0], args[0]);
255 289
     return 0;
... ...
@@ -487,6 +521,24 @@ int main(int argCnt, char **args)
487 521
       } else
488 522
         printf("missing format for \"-t\"\n");
489 523
     }
524
+    // generate test movie and append it to current video
525
+    else if (strcmp(args[i], "-ta") == 0) {
526
+      if (i + 2 < argCnt) {
527
+        const char *str_mode, *str_duration;
528
+        i++;
529
+        str_mode = args[i];
530
+        i++;
531
+        str_duration = args[i];
532
+        if (pMovie == NULL)
533
+          printf("no movie loaded to append to\n");
534
+        else
535
+          gen_test_movie(&pMovie, NULL /* append */, str_mode, str_duration);
536
+      } else if (i + 1 < argCnt) {
537
+        printf("missing duration for \"-ta\"\n");
538
+        i += 1;
539
+      } else if (i < argCnt)
540
+        printf("missing test mode for \"-ta\"\n");
541
+    }
490 542
     // copy rectangular section of other movie
491 543
     else if (strcmp(args[i], "-C") == 0) {
492 544
       if (i + 4 < argCnt) {
493 545