blind-round-wave.c - blind - suckless command-line video editing utility
(HTM) git clone git://git.suckless.org/blind
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
blind-round-wave.c (1450B)
---
1 /* See LICENSE file for copyright and license details. */
2 #ifndef TYPE
3 #include "common.h"
4
5 USAGE("[-e]")
6
7 static int equal = 0;
8
9 #define FILE "blind-round-wave.c"
10 #include "define-functions.h"
11
12 int
13 main(int argc, char *argv[])
14 {
15 struct stream stream;
16 void (*process)(struct stream *stream);
17
18 ARGBEGIN {
19 case 'e':
20 equal = 1;
21 break;
22 default:
23 usage();
24 } ARGEND;
25
26 if (argc)
27 usage();
28
29 eopen_stream(&stream, NULL);
30
31 SELECT_PROCESS_FUNCTION(&stream);
32 fprint_stream_head(stdout, &stream);
33 efflush(stdout, "<stdout>");
34 process(&stream);
35 return 0;
36 }
37
38 #else
39
40 static void
41 PROCESS(struct stream *stream)
42 {
43 size_t i, j, n;
44 TYPE v, *p;
45 do {
46 if (equal) {
47 n = stream->ptr / stream->pixel_size;
48 for (i = 0; i < n; i++) {
49 p = (TYPE *)(stream->buf) + i * stream->n_chan;
50 v = posmod(*p + 1, (TYPE)4) - 1;
51 v = v < 1 ? 1 - v * v / 2 : (v - 2) * (v - 2) / 2;
52 for (j = 0; j < stream->n_chan; j++)
53 p[j] = v;
54 }
55 n *= stream->pixel_size;
56 } else {
57 n = stream->ptr / stream->chan_size;
58 for (i = 0; i < n; i++) {
59 p = (TYPE *)(stream->buf) + i;
60 v = posmod(*p + 1, (TYPE)4) - 1;
61 *p = v < 1 ? 1 - v * v / 2 : (v - 2) * (v - 2) / 2;
62 }
63 n *= stream->chan_size;
64 }
65 ewriteall(STDOUT_FILENO, stream->buf, n, "<stdout>");
66 memmove(stream->buf, stream->buf + n, stream->ptr -= n);
67 } while (eread_stream(stream, SIZE_MAX));
68 if (stream->ptr)
69 eprintf("%s: incomplete frame\n", stream->file);
70 }
71
72 #endif