blind-extract-alpha.c - blind - suckless command-line video editing utility | |
git clone git://git.suckless.org/blind | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
blind-extract-alpha.c (1400B) | |
--- | |
1 /* See LICENSE file for copyright and license details. */ | |
2 #ifndef TYPE | |
3 #include "common.h" | |
4 | |
5 USAGE("colour-file") | |
6 | |
7 #define FILE "blind-extract-alpha.c" | |
8 #include "define-functions.h" | |
9 | |
10 int | |
11 main(int argc, char *argv[]) | |
12 { | |
13 struct stream stream; | |
14 int fd; | |
15 void (*process)(struct stream *stream, int fd, const char *fname… | |
16 | |
17 UNOFLAGS(argc != 1); | |
18 | |
19 eopen_stream(&stream, NULL); | |
20 fd = eopen(argv[0], O_WRONLY | O_CREAT | O_TRUNC, 0666); | |
21 | |
22 SELECT_PROCESS_FUNCTION(&stream); | |
23 CHECK_CHANS(&stream, != -1, == stream.luma_chan); | |
24 | |
25 fprint_stream_head(stdout, &stream); | |
26 efflush(stdout, "<stdout>"); | |
27 if (dprint_stream_head(fd, &stream) < 0) | |
28 eprintf("dprintf %s:", argv[0]); | |
29 process(&stream, fd, argv[0]); | |
30 return 0; | |
31 } | |
32 | |
33 #else | |
34 | |
35 static void | |
36 PROCESS(struct stream *stream, int fd, const char *fname) | |
37 { | |
38 char buf[sizeof(stream->buf)]; | |
39 size_t i, j, n; | |
40 TYPE a, *p, *b; | |
41 do { | |
42 n = stream->ptr / stream->pixel_size; | |
43 p = (TYPE *)(stream->buf) + stream->luma_chan; | |
44 b = (TYPE *)buf; | |
45 for (i = 0; i < n; i++, p += stream->n_chan) { | |
46 a = *p, *p = 1; | |
47 for (j = stream->n_chan - 1; j--;) | |
48 *b++ = a; | |
49 *b++ = 1; | |
50 } | |
51 n *= stream->pixel_size; | |
52 ewriteall(fd, stream->buf, n, fname); | |
53 ewriteall(STDOUT_FILENO, buf, n, "<stdout>"); | |
54 memmove(stream->buf, stream->buf + n, stream->ptr -= n); | |
55 } while (eread_stream(stream, SIZE_MAX)); | |
56 if (stream->ptr) | |
57 eprintf("%s: incomplete frame\n", stream->file); | |
58 } | |
59 | |
60 #endif |