add "-P" for "playing" movie to BlinkenConv
Stefan Schuermans

Stefan Schuermans commited on 2023-08-18 10:27:32
Showing 1 changed files, with 40 additions and 0 deletions.

... ...
@@ -8,6 +8,7 @@
8 8
 #include <string.h>
9 9
 
10 10
 #include <BlinkenLib/BlinkenLib.h>
11
+#include <BlinkenLib/BlinkenTools.h>
11 12
 
12 13
 /**
13 14
  * @brief generate test movie
... ...
@@ -438,6 +439,35 @@ static stBlinkenMovie *scroll(stBlinkenMovie *pMovie, const char *str_direction,
438 439
   return pMovie;
439 440
 }
440 441
 
442
+/**
443
+ * @brief "play" video to stdout (including delays)
444
+ *
445
+ * @param[in] pMovie movie to "play"
446
+ */
447
+void play_movie(stBlinkenMovie *pMovie) {
448
+  int frameCnt = BlinkenMovieGetFrameCnt(pMovie);
449
+  const char *sep = "";
450
+  for (int frameNo = 0; frameNo < frameCnt; frameNo++) {
451
+    stBlinkenFrame *pFrame = BlinkenMovieGetFrame(pMovie, frameNo);
452
+    if (pFrame == NULL) {
453
+      break; // something is wrong, stop "playing"
454
+    }
455
+    // print frame
456
+    char *str = BlinkenFrameToString(pFrame);
457
+    if (str == NULL) {
458
+      break; // something is wrong, stop "playing"
459
+    }
460
+    printf("%sframe %u\n%s", sep, frameNo, str);
461
+    sep = "\n\n\n";
462
+    fflush(stdout);
463
+    // delay
464
+    int duration = BlinkenFrameGetDuration(pFrame);
465
+    if (duration > 0) {
466
+      BlinkenMSleep(duration);
467
+    }
468
+  } // for frameNo
469
+}
470
+
441 471
 int main(int argCnt, char **args) {
442 472
   stBlinkenMovie *pMovie;
443 473
   int i;
... ...
@@ -482,6 +512,8 @@ int main(int argCnt, char **args) {
482 512
         "     output format, frame count and duration of movie\n"
483 513
         "  -p\n"
484 514
         "     print movie\n"
515
+        "  -P\n"
516
+        "     \"play\" movie to stdout (including delays)\n"
485 517
         "  -r <width>x<height>-<channels>/<colors>\n"
486 518
         "     resize movie\n"
487 519
         "  -cr <src-x>,<src-y> <width>x<height>\n"
... ...
@@ -636,6 +668,14 @@ int main(int argCnt, char **args) {
636 668
         }
637 669
       }
638 670
     }
671
+    // "play" movie to stdout
672
+    else if (strcmp(args[i], "-P") == 0) {
673
+      if (pMovie == NULL)
674
+        printf("no movie loaded to \"play\"\n");
675
+      else {
676
+        play_movie(pMovie);
677
+      }
678
+    }
639 679
     // resize movie
640 680
     else if (strcmp(args[i], "-r") == 0) {
641 681
       if (i + 1 < argCnt) {
642 682