blind

suckless command-line video editing utility
git clone git://git.suckless.org/blind
Log | Files | Refs | README | LICENSE

commit 9783831e37ca5718e20259be70c23e229d3583c4
parent e52ea779e7bc3e342b22c1e577651f9efe83fea1
Author: Mattias Andrée <maandree@kth.se>
Date:   Sat, 14 Jan 2017 10:05:50 +0100

Fix offset bug in blind-reverse and add example

Signed-off-by: Mattias Andrée <maandree@kth.se>

Diffstat:
MTODO | 1-
Aexamples/reverse/Makefile | 32++++++++++++++++++++++++++++++++
Mexamples/split/Makefile | 2+-
Msrc/blind-reverse.c | 4+++-
4 files changed, 36 insertions(+), 3 deletions(-)

diff --git a/TODO b/TODO @@ -19,7 +19,6 @@ UNTESTED: blind-from-text blind-gauss-blur blind-invert-luma - blind-reverse blind-rewrite-head blind-set-alpha blind-set-luma diff --git a/examples/reverse/Makefile b/examples/reverse/Makefile @@ -0,0 +1,32 @@ +INPUT_VIDEO = <please select a video file as INPUT_VIDEO> +TEMPFILE = tmp.uivf + +DRAFT = -d +# Useful for better performance when not working +# with colours or not caring about colours. + +FFMPEG_ARGS = -c:v libx264 -preset veryslow -crf 0 -pix_fmt yuv444p +# ↑~~~~~~~~~~~ ↑~~~~~~~~~~~~~~~ ↑~~~~~~~~~~~~~~~~~~~~~~ +# │ │ │ +# │ │ └──── Lossless +# │ │ +# │ └──── High compression +# │ +# └──── H.264, a lossless-capable codec + +START = 20 +END = 40 + +reversed.mkv: $(TEMPFILE) + framerate=$$(ffprobe -v quiet -show_streams -select_streams v - < "$(INPUT_VIDEO)" | \ + grep '^r_frame_rate=' | cut -d = -f 2) && \ + ../../blind-reverse $(TEMPFILE) | ../../blind-to-video $(DRAFT) $${framerate} $(FFMPEG_ARGS) reversed.mkv + +$(TEMPFILE): $(INPUT_VIDEO) + ../../blind-from-video -L $(DRAFT) "$(INPUT_VIDEO)" - | \ + ../../blind-split -L /dev/null $(START) $(TEMPFILE) $(END) + +clean: + -rm reversed.mkv $(TEMPFILE) + +.PHONY: clean diff --git a/examples/split/Makefile b/examples/split/Makefile @@ -1,4 +1,4 @@ -INPUT_VIDEO = <please select a video file as INPUT_VIDEO> +INPUT_VIDEO = <please select a video file as INPUT_VIDEO> SHELL = bash # We need Bash's process substitution operator >() diff --git a/src/blind-reverse.c b/src/blind-reverse.c @@ -26,12 +26,14 @@ main(int argc, char *argv[]) frame_size = stream.width * stream.height * stream.pixel_size; if (stream.frames > SSIZE_MAX / frame_size) eprintf("%s: video is too large\n", stream.file); + if (stream.frames * frame_size > SSIZE_MAX - stream.headlen) + eprintf("%s: video is too large\n", stream.file); #if defined(POSIX_FADV_RANDOM) posix_fadvise(stream.fd, 0, 0, POSIX_FADV_RANDOM); #endif while (stream.frames--) { - ptr = stream.frames * frame_size; + ptr = stream.frames * frame_size + stream.headlen; end = ptr + frame_size; while (ptr < end) { r = pread(stream.fd, buf, sizeof(buf), ptr);