This is an automatic generated email to let you know that the following patch 
were queued at the 
http://git.linuxtv.org/cgit.cgi/media_tree.git tree:

Subject: [media] v4l2_plane_pix_format: use __u32 bytesperline instead of __u16
Author:  Hans Verkuil <[email protected]>
Date:    Sun Mar 15 14:30:25 2015 -0300

While running v4l2-compliance tests on vivid I suddenly got errors due to
a call to vmalloc_user with size 0 from vb2.

Digging deeper into the cause I discovered that this was due to the fact that
struct v4l2_plane_pix_format defines bytesperline as a __u16 instead of a __u32.

The test I was running selected a format of 4 * 4096 by 4 * 2048 with a 32
bit pixelformat.

So bytesperline was 4 * 4 * 4096 = 65536, which becomes 0 in a __u16. And
bytesperline * height is suddenly 0 as well. While the vivid driver may be
a virtual driver, it is to be expected that this limit will be hit for real
hardware as well in the near future: 8k deep-color video will already reach
it.

The solution is to change the type to __u32. The only drivers besides vivid
that use the multiplanar API are little-endian ARM and SH platforms (exynos,
ti-vpe, vsp1), so this is safe.

Signed-off-by: Hans Verkuil <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>

 Documentation/DocBook/media/v4l/pixfmt.xml  |    4 ++--
 drivers/media/platform/s5p-tv/mixer_video.c |    2 +-
 include/uapi/linux/videodev2.h              |    4 ++--
 3 files changed, 5 insertions(+), 5 deletions(-)

---

http://git.linuxtv.org/cgit.cgi/media_tree.git/commit/?id=cc7d2dfb75b3ac0f248801ceed65f69465eb0389

diff --git a/Documentation/DocBook/media/v4l/pixfmt.xml 
b/Documentation/DocBook/media/v4l/pixfmt.xml
index 0a1528f..fcde4e2 100644
--- a/Documentation/DocBook/media/v4l/pixfmt.xml
+++ b/Documentation/DocBook/media/v4l/pixfmt.xml
@@ -182,14 +182,14 @@ see <xref linkend="colorspaces" />.</entry>
           </entry>
         </row>
         <row>
-          <entry>__u16</entry>
+          <entry>__u32</entry>
           <entry><structfield>bytesperline</structfield></entry>
           <entry>Distance in bytes between the leftmost pixels in two adjacent
             lines. See &v4l2-pix-format;.</entry>
         </row>
         <row>
           <entry>__u16</entry>
-          <entry><structfield>reserved[7]</structfield></entry>
+          <entry><structfield>reserved[6]</structfield></entry>
           <entry>Reserved for future extensions. Should be zeroed by the
            application.</entry>
         </row>
diff --git a/drivers/media/platform/s5p-tv/mixer_video.c 
b/drivers/media/platform/s5p-tv/mixer_video.c
index 72d4f2e..751f3b6 100644
--- a/drivers/media/platform/s5p-tv/mixer_video.c
+++ b/drivers/media/platform/s5p-tv/mixer_video.c
@@ -287,7 +287,7 @@ static void mxr_mplane_fill(struct v4l2_plane_pix_format 
*planes,
                u32 bl_width = divup(width, blk->width);
                u32 bl_height = divup(height, blk->height);
                u32 sizeimage = bl_width * bl_height * blk->size;
-               u16 bytesperline = bl_width * blk->size / blk->height;
+               u32 bytesperline = bl_width * blk->size / blk->height;
 
                plane->sizeimage += sizeimage;
                plane->bytesperline = max(plane->bytesperline, bytesperline);
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 15b21e4..47df18f 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -1842,8 +1842,8 @@ struct v4l2_mpeg_vbi_fmt_ivtv {
  */
 struct v4l2_plane_pix_format {
        __u32           sizeimage;
-       __u16           bytesperline;
-       __u16           reserved[7];
+       __u32           bytesperline;
+       __u16           reserved[6];
 } __attribute__ ((packed));
 
 /**

_______________________________________________
linuxtv-commits mailing list
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to