diff options
author | Hans Verkuil <hans.verkuil@cisco.com> | 2012-08-06 09:36:18 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-08-11 14:50:35 -0400 |
commit | 0a3a8a36d9aae7ce08d5bd437ab670a78b327e5d (patch) | |
tree | 9c566736140b6c8980a4958a4c398015cb899863 | |
parent | 77fc286328e6fd9a80ef8ce6963db7fbf4e07a1a (diff) |
[media] vivi: fix colorspace setup
Two of the four possible YUV formats got the wrong colorspace.
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r-- | drivers/media/video/vivi.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/drivers/media/video/vivi.c b/drivers/media/video/vivi.c index a05494b71b20..463564f0e3c2 100644 --- a/drivers/media/video/vivi.c +++ b/drivers/media/video/vivi.c | |||
@@ -80,7 +80,8 @@ static const u8 *font8x16; | |||
80 | struct vivi_fmt { | 80 | struct vivi_fmt { |
81 | char *name; | 81 | char *name; |
82 | u32 fourcc; /* v4l2 format id */ | 82 | u32 fourcc; /* v4l2 format id */ |
83 | int depth; | 83 | u8 depth; |
84 | bool is_yuv; | ||
84 | }; | 85 | }; |
85 | 86 | ||
86 | static struct vivi_fmt formats[] = { | 87 | static struct vivi_fmt formats[] = { |
@@ -88,21 +89,25 @@ static struct vivi_fmt formats[] = { | |||
88 | .name = "4:2:2, packed, YUYV", | 89 | .name = "4:2:2, packed, YUYV", |
89 | .fourcc = V4L2_PIX_FMT_YUYV, | 90 | .fourcc = V4L2_PIX_FMT_YUYV, |
90 | .depth = 16, | 91 | .depth = 16, |
92 | .is_yuv = true, | ||
91 | }, | 93 | }, |
92 | { | 94 | { |
93 | .name = "4:2:2, packed, UYVY", | 95 | .name = "4:2:2, packed, UYVY", |
94 | .fourcc = V4L2_PIX_FMT_UYVY, | 96 | .fourcc = V4L2_PIX_FMT_UYVY, |
95 | .depth = 16, | 97 | .depth = 16, |
98 | .is_yuv = true, | ||
96 | }, | 99 | }, |
97 | { | 100 | { |
98 | .name = "4:2:2, packed, YVYU", | 101 | .name = "4:2:2, packed, YVYU", |
99 | .fourcc = V4L2_PIX_FMT_YVYU, | 102 | .fourcc = V4L2_PIX_FMT_YVYU, |
100 | .depth = 16, | 103 | .depth = 16, |
104 | .is_yuv = true, | ||
101 | }, | 105 | }, |
102 | { | 106 | { |
103 | .name = "4:2:2, packed, VYUY", | 107 | .name = "4:2:2, packed, VYUY", |
104 | .fourcc = V4L2_PIX_FMT_VYUY, | 108 | .fourcc = V4L2_PIX_FMT_VYUY, |
105 | .depth = 16, | 109 | .depth = 16, |
110 | .is_yuv = true, | ||
106 | }, | 111 | }, |
107 | { | 112 | { |
108 | .name = "RGB565 (LE)", | 113 | .name = "RGB565 (LE)", |
@@ -309,15 +314,9 @@ static void precalculate_bars(struct vivi_dev *dev) | |||
309 | r = bars[dev->input].bar[k][0]; | 314 | r = bars[dev->input].bar[k][0]; |
310 | g = bars[dev->input].bar[k][1]; | 315 | g = bars[dev->input].bar[k][1]; |
311 | b = bars[dev->input].bar[k][2]; | 316 | b = bars[dev->input].bar[k][2]; |
312 | is_yuv = 0; | 317 | is_yuv = dev->fmt->is_yuv; |
313 | 318 | ||
314 | switch (dev->fmt->fourcc) { | 319 | switch (dev->fmt->fourcc) { |
315 | case V4L2_PIX_FMT_YUYV: | ||
316 | case V4L2_PIX_FMT_UYVY: | ||
317 | case V4L2_PIX_FMT_YVYU: | ||
318 | case V4L2_PIX_FMT_VYUY: | ||
319 | is_yuv = 1; | ||
320 | break; | ||
321 | case V4L2_PIX_FMT_RGB565: | 320 | case V4L2_PIX_FMT_RGB565: |
322 | case V4L2_PIX_FMT_RGB565X: | 321 | case V4L2_PIX_FMT_RGB565X: |
323 | r >>= 3; | 322 | r >>= 3; |
@@ -330,6 +329,10 @@ static void precalculate_bars(struct vivi_dev *dev) | |||
330 | g >>= 3; | 329 | g >>= 3; |
331 | b >>= 3; | 330 | b >>= 3; |
332 | break; | 331 | break; |
332 | case V4L2_PIX_FMT_YUYV: | ||
333 | case V4L2_PIX_FMT_UYVY: | ||
334 | case V4L2_PIX_FMT_YVYU: | ||
335 | case V4L2_PIX_FMT_VYUY: | ||
333 | case V4L2_PIX_FMT_RGB24: | 336 | case V4L2_PIX_FMT_RGB24: |
334 | case V4L2_PIX_FMT_BGR24: | 337 | case V4L2_PIX_FMT_BGR24: |
335 | case V4L2_PIX_FMT_RGB32: | 338 | case V4L2_PIX_FMT_RGB32: |
@@ -930,8 +933,7 @@ static int vidioc_g_fmt_vid_cap(struct file *file, void *priv, | |||
930 | (f->fmt.pix.width * dev->fmt->depth) >> 3; | 933 | (f->fmt.pix.width * dev->fmt->depth) >> 3; |
931 | f->fmt.pix.sizeimage = | 934 | f->fmt.pix.sizeimage = |
932 | f->fmt.pix.height * f->fmt.pix.bytesperline; | 935 | f->fmt.pix.height * f->fmt.pix.bytesperline; |
933 | if (dev->fmt->fourcc == V4L2_PIX_FMT_YUYV || | 936 | if (dev->fmt->is_yuv) |
934 | dev->fmt->fourcc == V4L2_PIX_FMT_UYVY) | ||
935 | f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M; | 937 | f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M; |
936 | else | 938 | else |
937 | f->fmt.pix.colorspace = V4L2_COLORSPACE_SRGB; | 939 | f->fmt.pix.colorspace = V4L2_COLORSPACE_SRGB; |
@@ -959,8 +961,7 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void *priv, | |||
959 | (f->fmt.pix.width * fmt->depth) >> 3; | 961 | (f->fmt.pix.width * fmt->depth) >> 3; |
960 | f->fmt.pix.sizeimage = | 962 | f->fmt.pix.sizeimage = |
961 | f->fmt.pix.height * f->fmt.pix.bytesperline; | 963 | f->fmt.pix.height * f->fmt.pix.bytesperline; |
962 | if (fmt->fourcc == V4L2_PIX_FMT_YUYV || | 964 | if (fmt->is_yuv) |
963 | fmt->fourcc == V4L2_PIX_FMT_UYVY) | ||
964 | f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M; | 965 | f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M; |
965 | else | 966 | else |
966 | f->fmt.pix.colorspace = V4L2_COLORSPACE_SRGB; | 967 | f->fmt.pix.colorspace = V4L2_COLORSPACE_SRGB; |