commit 38e538e53941c94e4acdfccc2aa933e5f936cce1
Author:     Mattias Andrée <maand...@kth.se>
AuthorDate: Sun Aug 6 12:46:50 2017 +0200
Commit:     Mattias Andrée <maand...@kth.se>
CommitDate: Sun Aug 6 12:46:50 2017 +0200

    Fix bugs in blind-from-video
    
    Signed-off-by: Mattias Andrée <maand...@kth.se>

diff --git a/src/blind-from-video.c b/src/blind-from-video.c
index 8f53af2..09e91a6 100644
--- a/src/blind-from-video.c
+++ b/src/blind-from-video.c
@@ -186,7 +186,7 @@ main(int argc, char *argv[])
        char *data;
        const char *pixfmt = "xyza";
        ssize_t headlen;
-       size_t length, frame_size;
+       size_t length, frame_size, pixel_size;
        int outfd, skip_length = 0;
        struct stat st;
 
@@ -220,23 +220,27 @@ main(int argc, char *argv[])
        outfile = argv[1] ? argv[1] : "-";
 
        pixfmt = get_pixel_format(pixfmt, "xyza");
-       if (!strcmp(pixfmt, "xyza"))
+       if (!strcmp(pixfmt, "xyza")) {
                convert_segment = convert_segment_xyza;
-       else if (!strcmp(pixfmt, "xyza f"))
+               pixel_size = 4 * sizeof(double);
+       } else if (!strcmp(pixfmt, "xyza f")) {
                convert_segment = convert_segment_xyzaf;
-       else if (!strcmp(pixfmt, "raw0"))
+               pixel_size = 4 * sizeof(float);
+       } else if (!strcmp(pixfmt, "raw0")) {
                convert_segment = NULL;
-       else
+               pixel_size = 4 * sizeof(uint16_t);
+       } else {
                eprintf("pixel format %s is not supported, try xyza or raw0 and 
blind-convert\n", pixfmt);
+       }
 
        if (!width)
                get_metadata(infile, &width, &height);
        if (width > SIZE_MAX / height)
                eprintf("video frame too large\n");
        frame_size = width * height;
-       if (4 * sizeof(double) > SIZE_MAX / frame_size)
+       if (pixel_size > SIZE_MAX / frame_size)
                eprintf("video frame too large\n");
-       frame_size *= 4 * sizeof(double);
+       frame_size *= pixel_size;
 
        if (!strcmp(outfile, "-")) {
                outfile = "<stdout>";
@@ -254,12 +258,17 @@ main(int argc, char *argv[])
 
        convert(infile, outfd, outfile, width, height, frame_rate);
 
+       if (outfd == STDOUT_FILENO)
+               return 0;
+
        if (fstat(outfd, &st))
                eprintf("fstat %s:", outfile);
        length = (size_t)(st.st_size);
 
+       if (skip_length)
+               length -= (size_t)headlen;
        if (length % frame_size)
-               eprintf("<subprocess>: incomplete frame");
+               eprintf("<subprocess>: incomplete frame\n");
        frames = length / frame_size;
 
        if (!skip_length) {

Reply via email to