v4l2-ctl: support data_offset when streaming multiplanar formats.
authorHans Verkuil <hans.verkuil@cisco.com>
Mon, 4 Mar 2013 15:01:09 +0000 (16:01 +0100)
committerHans Verkuil <hans.verkuil@cisco.com>
Mon, 4 Mar 2013 15:01:09 +0000 (16:01 +0100)
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
utils/v4l2-ctl/v4l2-ctl-streaming.cpp

index e23e317..015ec84 100644 (file)
@@ -675,7 +675,17 @@ void streaming_set(int fd)
                                for (unsigned j = 0; j < num_planes; j++) {
                                        unsigned p = buf.index * num_planes + j;
                                        unsigned used = is_mplane ? planes[j].bytesused : buf.bytesused;
-                                       unsigned sz = fwrite(buffers[p], 1, used, fout);
+                                       unsigned offset = is_mplane ? planes[j].data_offset : 0;
+                                       unsigned sz;
+                                       
+                                       if (offset > used) {
+                                               // Should never happen
+                                               fprintf(stderr, "offset %d > used %d!\n",
+                                                               offset, used);
+                                               offset = 0;
+                                       }
+                                       used -= offset;
+                                       sz = fwrite((char *)buffers[p] + offset, 1, used, fout);
 
                                        if (sz != used)
                                                fprintf(stderr, "%u != %u\n", sz, used);