Stefan Schuermans commited on 2016-12-18 13:33:31
Showing 1 changed files, with 38 additions and 7 deletions.
| ... | ... |
@@ -22,7 +22,8 @@ static void gen_test_movie(stBlinkenMovie **ppMovie, const char *str_format, |
| 22 | 22 |
{
|
| 23 | 23 |
unsigned int height, width, channels, colors; |
| 24 | 24 |
enum {
|
| 25 |
- ModeNone, ModeBlack, ModeWhite, ModeDots, ModeLines, ModeTrans |
|
| 25 |
+ ModeNone, ModeBlack, ModeWhite, ModeGradient, |
|
| 26 |
+ ModeDots, ModeLines, ModeTrans |
|
| 26 | 27 |
} mode = ModeNone; |
| 27 | 28 |
int fmt_ok, append, duration; |
| 28 | 29 |
|
| ... | ... |
@@ -48,13 +49,15 @@ static void gen_test_movie(stBlinkenMovie **ppMovie, const char *str_format, |
| 48 | 49 |
//mode |
| 49 | 50 |
if (strcmp(str_mode, "black") == 0) |
| 50 | 51 |
mode = ModeBlack; |
| 51 |
- if (strcmp(str_mode, "white") == 0) |
|
| 52 |
+ else if (strcmp(str_mode, "white") == 0) |
|
| 52 | 53 |
mode = ModeWhite; |
| 53 |
- if (strcmp(str_mode, "dots") == 0) |
|
| 54 |
+ else if (strcmp(str_mode, "gradient") == 0) |
|
| 55 |
+ mode = ModeGradient; |
|
| 56 |
+ else if (strcmp(str_mode, "dots") == 0) |
|
| 54 | 57 |
mode = ModeDots; |
| 55 |
- if (strcmp(str_mode, "lines") == 0) |
|
| 58 |
+ else if (strcmp(str_mode, "lines") == 0) |
|
| 56 | 59 |
mode = ModeLines; |
| 57 |
- if (strcmp(str_mode, "trans") == 0) |
|
| 60 |
+ else if (strcmp(str_mode, "trans") == 0) |
|
| 58 | 61 |
mode = ModeTrans; |
| 59 | 62 |
//check |
| 60 | 63 |
if (! fmt_ok) |
| ... | ... |
@@ -77,7 +80,8 @@ static void gen_test_movie(stBlinkenMovie **ppMovie, const char *str_format, |
| 77 | 80 |
|
| 78 | 81 |
if (*ppMovie != NULL) {
|
| 79 | 82 |
|
| 80 |
- unsigned int y, x, c, c2, c3, o, b, yy, xx, cc, oo; |
|
| 83 |
+ unsigned int y, x, c, c2, c3, o, b, yy, xx, cc, ccc, oo; |
|
| 84 |
+ float fx, fy, fc; |
|
| 81 | 85 |
stBlinkenFrame *pFrame; |
| 82 | 86 |
height = BlinkenMovieGetHeight(*ppMovie); |
| 83 | 87 |
width = BlinkenMovieGetWidth(*ppMovie); |
| ... | ... |
@@ -110,6 +114,29 @@ static void gen_test_movie(stBlinkenMovie **ppMovie, const char *str_format, |
| 110 | 114 |
BlinkenMovieAppendFrame(*ppMovie, pFrame); |
| 111 | 115 |
break; |
| 112 | 116 |
|
| 117 |
+ case ModeGradient: |
|
| 118 |
+ pFrame = |
|
| 119 |
+ BlinkenFrameNew(height, width, channels, colors - 1, |
|
| 120 |
+ duration); |
|
| 121 |
+ for (yy = 0; yy < height; yy++) {
|
|
| 122 |
+ fy = (float)yy / (float)(height - 1); |
|
| 123 |
+ for (xx = 0; xx < width; xx++) {
|
|
| 124 |
+ fx = (float)xx / (float)(width - 1); |
|
| 125 |
+ for (cc = 0, ccc = 0; cc < channels; cc++) {
|
|
| 126 |
+ switch (ccc) {
|
|
| 127 |
+ case 0: fc = fx; ccc = 1; break; |
|
| 128 |
+ case 1: fc = fy; ccc = 2; break; |
|
| 129 |
+ case 2: fc = 1.0f - 0.5f * (fx + fy); ccc = 0; break; |
|
| 130 |
+ default: fc = 0.0f; ccc = 0; break; |
|
| 131 |
+ } |
|
| 132 |
+ BlinkenFrameSetPixel(pFrame, yy, xx, cc, |
|
| 133 |
+ (int)(fc * (float)(colors - 1) + .5f)); |
|
| 134 |
+ } |
|
| 135 |
+ } |
|
| 136 |
+ } |
|
| 137 |
+ BlinkenMovieAppendFrame(*ppMovie, pFrame); |
|
| 138 |
+ break; |
|
| 139 |
+ |
|
| 113 | 140 |
case ModeDots: |
| 114 | 141 |
for (c = 0; c < channels; c++) |
| 115 | 142 |
for (y = 0; y < height; y++) |
| ... | ... |
@@ -319,6 +346,10 @@ static stBlinkenMovie * scroll(stBlinkenMovie *pMovie, |
| 319 | 346 |
// free scrolled frame |
| 320 | 347 |
BlinkenFrameFree(pScroll); |
| 321 | 348 |
|
| 349 |
+ printf("scrolled %ux%u-%u/%u frame to %ux%u-%u/%u movie (direction %s)\n",
|
|
| 350 |
+ width, height, channels, maxval + 1, |
|
| 351 |
+ new_width, new_height, channels, maxval + 1, str_direction); |
|
| 352 |
+ |
|
| 322 | 353 |
return pMovie; |
| 323 | 354 |
} |
| 324 | 355 |
|
| ... | ... |
@@ -399,7 +430,7 @@ int main(int argCnt, char **args) |
| 399 | 430 |
" mirror movie diagonally (/)\n" |
| 400 | 431 |
" -o <file>\n" |
| 401 | 432 |
" write movie to file (*.blm, *.bmm, *.bml, *.bbm)\n\n" |
| 402 |
- "test_modes: black, white, dots, lines, trans\n\n" |
|
| 433 |
+ "test_modes: black, white, gradient, dots, lines, trans\n\n" |
|
| 403 | 434 |
"old syntax: %s <input-file> [<output-file>]\n\n", |
| 404 | 435 |
args[0], args[0]); |
| 405 | 436 |
return 0; |
| 406 | 437 |