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:
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);