Commit 0a3a8a36 authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

[media] vivi: fix colorspace setup

Two of the four possible YUV formats got the wrong colorspace.
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 77fc2863
...@@ -80,7 +80,8 @@ static const u8 *font8x16; ...@@ -80,7 +80,8 @@ static const u8 *font8x16;
struct vivi_fmt { struct vivi_fmt {
char *name; char *name;
u32 fourcc; /* v4l2 format id */ u32 fourcc; /* v4l2 format id */
int depth; u8 depth;
bool is_yuv;
}; };
static struct vivi_fmt formats[] = { static struct vivi_fmt formats[] = {
...@@ -88,21 +89,25 @@ static struct vivi_fmt formats[] = { ...@@ -88,21 +89,25 @@ static struct vivi_fmt formats[] = {
.name = "4:2:2, packed, YUYV", .name = "4:2:2, packed, YUYV",
.fourcc = V4L2_PIX_FMT_YUYV, .fourcc = V4L2_PIX_FMT_YUYV,
.depth = 16, .depth = 16,
.is_yuv = true,
}, },
{ {
.name = "4:2:2, packed, UYVY", .name = "4:2:2, packed, UYVY",
.fourcc = V4L2_PIX_FMT_UYVY, .fourcc = V4L2_PIX_FMT_UYVY,
.depth = 16, .depth = 16,
.is_yuv = true,
}, },
{ {
.name = "4:2:2, packed, YVYU", .name = "4:2:2, packed, YVYU",
.fourcc = V4L2_PIX_FMT_YVYU, .fourcc = V4L2_PIX_FMT_YVYU,
.depth = 16, .depth = 16,
.is_yuv = true,
}, },
{ {
.name = "4:2:2, packed, VYUY", .name = "4:2:2, packed, VYUY",
.fourcc = V4L2_PIX_FMT_VYUY, .fourcc = V4L2_PIX_FMT_VYUY,
.depth = 16, .depth = 16,
.is_yuv = true,
}, },
{ {
.name = "RGB565 (LE)", .name = "RGB565 (LE)",
...@@ -309,15 +314,9 @@ static void precalculate_bars(struct vivi_dev *dev) ...@@ -309,15 +314,9 @@ static void precalculate_bars(struct vivi_dev *dev)
r = bars[dev->input].bar[k][0]; r = bars[dev->input].bar[k][0];
g = bars[dev->input].bar[k][1]; g = bars[dev->input].bar[k][1];
b = bars[dev->input].bar[k][2]; b = bars[dev->input].bar[k][2];
is_yuv = 0; is_yuv = dev->fmt->is_yuv;
switch (dev->fmt->fourcc) { switch (dev->fmt->fourcc) {
case V4L2_PIX_FMT_YUYV:
case V4L2_PIX_FMT_UYVY:
case V4L2_PIX_FMT_YVYU:
case V4L2_PIX_FMT_VYUY:
is_yuv = 1;
break;
case V4L2_PIX_FMT_RGB565: case V4L2_PIX_FMT_RGB565:
case V4L2_PIX_FMT_RGB565X: case V4L2_PIX_FMT_RGB565X:
r >>= 3; r >>= 3;
...@@ -330,6 +329,10 @@ static void precalculate_bars(struct vivi_dev *dev) ...@@ -330,6 +329,10 @@ static void precalculate_bars(struct vivi_dev *dev)
g >>= 3; g >>= 3;
b >>= 3; b >>= 3;
break; break;
case V4L2_PIX_FMT_YUYV:
case V4L2_PIX_FMT_UYVY:
case V4L2_PIX_FMT_YVYU:
case V4L2_PIX_FMT_VYUY:
case V4L2_PIX_FMT_RGB24: case V4L2_PIX_FMT_RGB24:
case V4L2_PIX_FMT_BGR24: case V4L2_PIX_FMT_BGR24:
case V4L2_PIX_FMT_RGB32: case V4L2_PIX_FMT_RGB32:
...@@ -930,8 +933,7 @@ static int vidioc_g_fmt_vid_cap(struct file *file, void *priv, ...@@ -930,8 +933,7 @@ static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
(f->fmt.pix.width * dev->fmt->depth) >> 3; (f->fmt.pix.width * dev->fmt->depth) >> 3;
f->fmt.pix.sizeimage = f->fmt.pix.sizeimage =
f->fmt.pix.height * f->fmt.pix.bytesperline; f->fmt.pix.height * f->fmt.pix.bytesperline;
if (dev->fmt->fourcc == V4L2_PIX_FMT_YUYV || if (dev->fmt->is_yuv)
dev->fmt->fourcc == V4L2_PIX_FMT_UYVY)
f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M; f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
else else
f->fmt.pix.colorspace = V4L2_COLORSPACE_SRGB; f->fmt.pix.colorspace = V4L2_COLORSPACE_SRGB;
...@@ -959,8 +961,7 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void *priv, ...@@ -959,8 +961,7 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
(f->fmt.pix.width * fmt->depth) >> 3; (f->fmt.pix.width * fmt->depth) >> 3;
f->fmt.pix.sizeimage = f->fmt.pix.sizeimage =
f->fmt.pix.height * f->fmt.pix.bytesperline; f->fmt.pix.height * f->fmt.pix.bytesperline;
if (fmt->fourcc == V4L2_PIX_FMT_YUYV || if (fmt->is_yuv)
fmt->fourcc == V4L2_PIX_FMT_UYVY)
f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M; f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
else else
f->fmt.pix.colorspace = V4L2_COLORSPACE_SRGB; f->fmt.pix.colorspace = V4L2_COLORSPACE_SRGB;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment