From: Hans Verkuil Date: Thu, 30 Jan 2014 09:39:24 +0000 (+0100) Subject: v4l2-ctl: errors during streaming setup were ignored X-Git-Tag: v4l-utils-1.2.0~229 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c0cd56208fd5b2244842ed31c36b7797ef912f7b;p=platform%2Fupstream%2Fv4l-utils.git v4l2-ctl: errors during streaming setup were ignored If an ioctl like VIDIOC_QBUF returned an error during the setup of the streaming, then that was ignored which caused the streaming loop to just wait for a buffer to arrive. Report the error correctly and bail out if an error occurs. Signed-off-by: Hans Verkuil --- diff --git a/utils/v4l2-ctl/v4l2-ctl-streaming.cpp b/utils/v4l2-ctl/v4l2-ctl-streaming.cpp index 13ee8ec..4cb05a0 100644 --- a/utils/v4l2-ctl/v4l2-ctl-streaming.cpp +++ b/utils/v4l2-ctl/v4l2-ctl-streaming.cpp @@ -294,7 +294,7 @@ static bool fill_buffer_from_file(buffers &b, unsigned idx, FILE *fin) return true; } -static void do_setup_cap_buffers(int fd, buffers &b) +static int do_setup_cap_buffers(int fd, buffers &b) { for (unsigned i = 0; i < b.bcount; i++) { struct v4l2_plane planes[VIDEO_MAX_PLANES]; @@ -310,7 +310,7 @@ static void do_setup_cap_buffers(int fd, buffers &b) buf.length = VIDEO_MAX_PLANES; } if (doioctl(fd, VIDIOC_QUERYBUF, &buf)) - return; + return -1; if (b.is_mplane) { b.num_planes = buf.length; @@ -325,7 +325,7 @@ static void do_setup_cap_buffers(int fd, buffers &b) if (b.bufs[i][j] == MAP_FAILED) { fprintf(stderr, "mmap failed\n"); - return; + return -1; } } else { @@ -345,7 +345,7 @@ static void do_setup_cap_buffers(int fd, buffers &b) if (b.bufs[i][0] == MAP_FAILED) { fprintf(stderr, "mmap failed\n"); - return; + return -1; } } else { @@ -354,11 +354,12 @@ static void do_setup_cap_buffers(int fd, buffers &b) } } if (doioctl(fd, VIDIOC_QBUF, &buf)) - return; + return -1; } + return 0; } -static void do_setup_out_buffers(int fd, buffers &b, FILE *fin) +static int do_setup_out_buffers(int fd, buffers &b, FILE *fin) { struct v4l2_format fmt; memset(&fmt, 0, sizeof(fmt)); @@ -367,7 +368,7 @@ static void do_setup_out_buffers(int fd, buffers &b, FILE *fin) if (!precalculate_bars(fmt.fmt.pix.pixelformat, stream_pat)) { fprintf(stderr, "unsupported pixelformat\n"); - return; + return -1; } for (unsigned i = 0; i < b.bcount; i++) { @@ -384,7 +385,7 @@ static void do_setup_out_buffers(int fd, buffers &b, FILE *fin) buf.length = VIDEO_MAX_PLANES; } if (doioctl(fd, VIDIOC_QUERYBUF, &buf)) - return; + return -1; if (b.is_mplane) { b.num_planes = buf.length; @@ -400,7 +401,7 @@ static void do_setup_out_buffers(int fd, buffers &b, FILE *fin) if (b.bufs[i][j] == MAP_FAILED) { fprintf(stderr, "mmap failed\n"); - return; + return -1; } } else { @@ -422,7 +423,7 @@ static void do_setup_out_buffers(int fd, buffers &b, FILE *fin) if (b.bufs[i][0] == MAP_FAILED) { fprintf(stderr, "mmap failed\n"); - return; + return -1; } } else { @@ -433,8 +434,9 @@ static void do_setup_out_buffers(int fd, buffers &b, FILE *fin) fill_buffer(b.bufs[i][0], &fmt.fmt.pix); } if (doioctl(fd, VIDIOC_QBUF, &buf)) - return; + return -1; } + return 0; } static void do_release_buffers(buffers &b) @@ -642,7 +644,8 @@ static void streaming_set_cap(int fd) if (b.reqbufs(fd, reqbufs_count_cap)) goto done; - do_setup_cap_buffers(fd, b); + if (do_setup_cap_buffers(fd, b)) + goto done; if (doioctl(fd, VIDIOC_STREAMON, &b.type)) goto done; @@ -729,7 +732,8 @@ static void streaming_set_out(int fd) if (b.reqbufs(fd, reqbufs_count_out)) goto done; - do_setup_out_buffers(fd, b, fin); + if (do_setup_out_buffers(fd, b, fin)) + goto done; if (doioctl(fd, VIDIOC_STREAMON, &b.type)) goto done; @@ -838,8 +842,9 @@ static void streaming_set_m2m(int fd) out.reqbufs(fd, reqbufs_count_out)) goto done; - do_setup_cap_buffers(fd, in); - do_setup_out_buffers(fd, out, file[OUT]); + if (do_setup_cap_buffers(fd, in) || + do_setup_out_buffers(fd, out, file[OUT])) + goto done; if (doioctl(fd, VIDIOC_STREAMON, &in.type) || doioctl(fd, VIDIOC_STREAMON, &out.type))