Introduction
Introduction Statistics Contact Development Disclaimer Help
Add blind-get-colours - blind - suckless command-line video editing utility
git clone git://git.suckless.org/blind
Log
Files
Refs
README
LICENSE
---
commit 975a02fba76fce7526278ea09a27cc0aae608d30
parent 6f4d55793f88540d1b1abd7410e43da83993ad6a
Author: Mattias Andrée <[email protected]>
Date: Wed, 12 Jul 2017 02:09:03 +0200
Add blind-get-colours
Signed-off-by: Mattias Andrée <[email protected]>
Diffstat:
M Makefile | 1 +
M README | 3 +++
A man/blind-get-colours.1 | 15 +++++++++++++++
M man/blind-repeat-tessellation.1 | 3 ++-
M man/blind.7 | 3 +++
A src/blind-get-colours.c | 88 +++++++++++++++++++++++++++++…
6 files changed, 112 insertions(+), 1 deletion(-)
---
diff --git a/Makefile b/Makefile
@@ -33,6 +33,7 @@ BIN =\
blind-from-text\
blind-from-video\
blind-gauss-blur\
+ blind-get-colours\
blind-interleave\
blind-invert-luma\
blind-linear-gradient\
diff --git a/README b/README
@@ -99,6 +99,9 @@ UTILITIES
blind-gauss-blur(1)
Apply Gaussian blur to a video
+ blind-get-colours(1)
+ Get a frame with all colours from a video
+
blind-interleave(1)
Framewise interleave videos
diff --git a/man/blind-get-colours.1 b/man/blind-get-colours.1
@@ -0,0 +1,15 @@
+.TH BLIND-GET-COLOURS 1 blind
+.SH NAME
+blind-get-colours - Get a frame with all colours from a video
+.SH SYNOPSIS
+.B blind-get-colours
+.SH DESCRIPTION
+.B blind-get-colours
+reads a video from stdin and prints a single-frame
+video to stdout contain all colours from the video.
+.SH SEE ALSO
+.BR blind (7),
+.BR blind-repeat-tessellation (1)
+.SH AUTHORS
+Mattias Andrée
+.RI < [email protected] >
diff --git a/man/blind-repeat-tessellation.1 b/man/blind-repeat-tessellation.1
@@ -28,7 +28,8 @@ requires enough free memory to load one full frame of
the video from stdin into memory. A frame requires 32
bytes per pixel it contains.
.SH SEE ALSO
-.BR blind (7)
+.BR blind (7),
+.BR blind-get-colours (1)
.SH AUTHORS
Mattias Andrée
.RI < [email protected] >
diff --git a/man/blind.7 b/man/blind.7
@@ -115,6 +115,9 @@ Converts a regular, cooked video to a blind video
.BR blind-gauss-blur (1)
Apply Gaussian blur to a video
.TP
+.BR blind-get-colours (1)
+Get a frame with all colours from a video
+.TP
.BR blind-interleave (1)
Framewise interleave videos
.TP
diff --git a/src/blind-get-colours.c b/src/blind-get-colours.c
@@ -0,0 +1,88 @@
+/* See LICENSE file for copyright and license details. */
+#include "common.h"
+
+USAGE("")
+
+
+static size_t width;
+
+
+static int
+pixcmp(const void *a, const void *b)
+{
+ return memcmp(a, b, width);
+}
+
+
+static size_t
+unique(char *base, size_t n)
+{
+ size_t i, r = 1;
+ for (i = 1; i < n; i++)
+ if (pixcmp(base + (r - 1) * width, base + i * width) && r++ !=…
+ memcpy(base + (r - 1) * width, base + i * width, width…
+ return r;
+}
+
+
+static size_t
+merge(char **sink, size_t n, char *new, size_t m, size_t *siz)
+{
+ size_t i, j;
+ int c;
+ for (i = j = 0; i < n && j < m; i++) {
+ c = pixcmp(*sink + i * width, new + j * width);
+ if (c > 0) {
+ if (n == *siz) {
+ *siz = n ? n * 2 : 8;
+ *sink = erealloc2(*sink, *siz, width);
+ }
+ n += 1;
+ memmove(*sink + (i + 1) * width, *sink + i * width, (n…
+ memcpy(*sink + i * width, new + j * width, width);
+ }
+ j += c >= 0;
+ }
+ m -= j;
+ if (n + m > *siz) {
+ *siz = n + m;
+ *sink = erealloc2(*sink, *siz, width);
+ }
+ memcpy(*sink + n * width, new + j * width, m * width);
+ return n + m;
+}
+
+
+int
+main(int argc, char *argv[])
+{
+ struct stream stream;
+ char *colours = NULL;
+ size_t ptr = 0, siz = 0;
+ size_t n, m;
+
+ UNOFLAGS(argc);
+
+ eopen_stream(&stream, NULL);
+ width = stream.pixel_size;
+
+ do {
+ n = stream.ptr / width;
+
+ qsort(stream.buf, n, width, pixcmp);
+ m = unique(stream.buf, n);
+ ptr = merge(&colours, ptr, stream.buf, m, &siz);
+
+ n *= width;
+ memmove(stream.buf, stream.buf + n, stream.ptr -= n);
+ } while (eread_stream(&stream, SIZE_MAX));
+
+ stream.frames = 1;
+ stream.width = ptr;
+ stream.height = 1;
+ fprint_stream_head(stdout, &stream);
+ efflush(stdout, "<stdout>");
+ ewriteall(STDOUT_FILENO, colours, ptr * width, "<stdout>");
+
+ return 0;
+}
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.