implement rainbow test mode
Stefan Schuermans

Stefan Schuermans commited on 2016-12-30 14:08:32
Showing 1 changed files, with 44 additions and 3 deletions.

... ...
@@ -14,7 +14,8 @@
14 14
  * @param[in,out] *pMovie pointer to old/new/changed movie
15 15
  * @param[in] str_format format of new video to generate,
16 16
  *                       may be NULL for appending to video
17
- * @param[in] str_mode test movie mode: black, white, dots, lines, trans
17
+ * @param[in] str_mode test movie mode: black, white, dots, lines, trans,
18
+ *                                      rainbow
18 19
  * @param[in] str_duration duration of each frame in ms (as string)
19 20
  */
20 21
 static void gen_test_movie(stBlinkenMovie **ppMovie, const char *str_format,
... ...
@@ -23,7 +24,7 @@ static void gen_test_movie(stBlinkenMovie **ppMovie, const char *str_format,
23 24
   unsigned int height, width, channels, colors;
24 25
   enum {
25 26
     ModeNone, ModeBlack, ModeWhite, ModeGradient,
26
-    ModeDots, ModeLines, ModeTrans
27
+    ModeDots, ModeLines, ModeTrans, ModeRainbow,
27 28
   } mode = ModeNone;
28 29
   int fmt_ok, append, duration;
29 30
 
... ...
@@ -59,6 +60,8 @@ static void gen_test_movie(stBlinkenMovie **ppMovie, const char *str_format,
59 60
     mode = ModeLines;
60 61
   else if (strcmp(str_mode, "trans") == 0)
61 62
     mode = ModeTrans;
63
+  else if (strcmp(str_mode, "rainbow") == 0)
64
+    mode = ModeRainbow;
62 65
   //check
63 66
   if (! fmt_ok)
64 67
     printf("invalid movie format \"%s\" for \"-t\" or \"-ta\"\n", str_format);
... ...
@@ -202,6 +205,44 @@ static void gen_test_movie(stBlinkenMovie **ppMovie, const char *str_format,
202 205
               }
203 206
         break;
204 207
 
208
+      case ModeRainbow:
209
+        for (b = 0; b < width * height; b++) {
210
+          pFrame = BlinkenFrameNew(height, width, channels,
211
+                                   colors - 1, duration);
212
+          for (yy = 0; yy < height; yy++) {
213
+            for (xx = 0; xx < width; xx++) {
214
+              for (cc = 0; cc < channels; cc++) {
215
+                y = b + yy + xx + cc * 8;
216
+                switch (y % 24) {
217
+                  case  0: oo = 0; break;
218
+                  case  1: oo = 1; break;
219
+                  case  2: oo = 2; break;
220
+                  case  3: oo = 3; break;
221
+                  case  4: oo = 4; break;
222
+                  case  5: oo = 4; break;
223
+                  case  6: oo = 4; break;
224
+                  case  7: oo = 4; break;
225
+                  case  8: oo = 4; break;
226
+                  case  9: oo = 4; break;
227
+                  case 10: oo = 4; break;
228
+                  case 11: oo = 4; break;
229
+                  case 12: oo = 4; break;
230
+                  case 13: oo = 3; break;
231
+                  case 14: oo = 2; break;
232
+                  case 15: oo = 1; break;
233
+                  default: oo = 0; break;
234
+                }
235
+                oo = oo * colors / 4;
236
+                if (oo > colors - 1)
237
+                  oo = colors - 1;
238
+                BlinkenFrameSetPixel(pFrame, yy, xx, cc, oo);
239
+              }
240
+            }
241
+          }
242
+          BlinkenMovieAppendFrame(*ppMovie, pFrame);
243
+        }
244
+        break;
245
+
205 246
       } // switch( mode )
206 247
 
207 248
       printf("test movie generated, using format %ux%u-%u/%u and mode %s\n",
... ...
@@ -435,7 +476,7 @@ int main(int argCnt, char **args)
435 476
            "     mirror movie diagonally (/)\n"
436 477
            "  -o <file>\n"
437 478
            "     write movie to file (*.blm, *.bmm, *.bml, *.bbm" MNGEXT GIFEXT ")\n\n"
438
-           "test_modes: black, white, gradient, dots, lines, trans\n\n"
479
+           "test_modes: black, white, gradient, dots, lines, trans, rainbow\n\n"
439 480
            "old syntax: %s <input-file> [<output-file>]\n\n",
440 481
            args[0], args[0]);
441 482
     return 0;
442 483