blind-time-blur.c - blind - suckless command-line video editing utility | |
git clone git://git.suckless.org/blind | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
blind-time-blur.c (1617B) | |
--- | |
1 /* See LICENSE file for copyright and license details. */ | |
2 #ifndef TYPE | |
3 #include "common.h" | |
4 | |
5 USAGE("alpha-stream") | |
6 | |
7 static int first = 1; | |
8 | |
9 #define FILE "blind-time-blur.c" | |
10 #include "define-functions.h" | |
11 | |
12 int | |
13 main(int argc, char *argv[]) | |
14 { | |
15 struct stream colour, alpha; | |
16 void (*process)(char *restrict output, char *restrict cbuf, char… | |
17 struct stream *colour, struct stream *alpha); | |
18 | |
19 ARGBEGIN { | |
20 default: | |
21 usage(); | |
22 } ARGEND; | |
23 | |
24 if (argc != 1) | |
25 usage(); | |
26 | |
27 eopen_stream(&colour, NULL); | |
28 eopen_stream(&alpha, argv[0]); | |
29 | |
30 SELECT_PROCESS_FUNCTION(&colour); | |
31 CHECK_CHANS(&colour, == 3, == 1); | |
32 CHECK_N_CHAN(&colour, 4, 4); | |
33 | |
34 echeck_compat(&colour, &alpha); | |
35 fprint_stream_head(stdout, &colour); | |
36 efflush(stdout, "<stdout>"); | |
37 process_each_frame_two_streams(&colour, &alpha, STDOUT_FILENO, "… | |
38 return 0; | |
39 } | |
40 | |
41 #else | |
42 | |
43 static void | |
44 PROCESS(char *output, char *restrict cbuf, char *restrict abuf, | |
45 struct stream *colour, struct stream *alpha) | |
46 { | |
47 typedef TYPE pixel_t[4]; | |
48 pixel_t *restrict clr = (pixel_t *)cbuf; | |
49 pixel_t *restrict alf = (pixel_t *)abuf; | |
50 pixel_t *img = (pixel_t *)output; | |
51 size_t i, n = colour->width * colour->height; | |
52 TYPE a1, a2; | |
53 | |
54 if (first) { | |
55 memcpy(output, cbuf, colour->frame_size); | |
56 first = 0; | |
57 return; | |
58 } | |
59 | |
60 for (i = 0; i < n; i++, clr++, alf++, img++) { | |
61 a1 = (*img)[3]; | |
62 a2 = (*clr)[3] * (*alf)[1] * (*alf)[3]; | |
63 a1 *= (1 - a2); | |
64 (*img)[0] = (*img)[0] * a1 + (*clr)[0] * a2; | |
65 (*img)[1] = (*img)[1] * a1 + (*clr)[1] * a2; | |
66 (*img)[2] = (*img)[2] * a1 + (*clr)[2] * a2; | |
67 (*img)[3] = a1 + a2; | |
68 } | |
69 | |
70 (void) colour; | |
71 (void) alpha; | |
72 | |
73 } | |
74 | |
75 #endif |