| 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 |