V4L/DVB (12139): em28xx: add other video formats
authorMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 30 Jun 2009 11:36:17 +0000 (08:36 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sun, 5 Jul 2009 17:30:05 +0000 (14:30 -0300)
Add suppport for the teste RGB565 format (16 bits/pixel).
Currently, webcam support works only at RGB565, at 640x480.

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/em28xx/em28xx-video.c

index 8fe1beecfffac0919d40a31e713510bad33d2559..b96a138d9d03bd9e93edc0b6895fd440056f9adf 100644 (file)
@@ -94,6 +94,11 @@ static struct em28xx_fmt format[] = {
                .fourcc   = V4L2_PIX_FMT_YUYV,
                .depth    = 16,
                .reg      = EM28XX_OUTFMT_YUV422_Y0UY1V,
+       }, {
+               .name     = "16 bpp RGB, le",
+               .fourcc   = V4L2_PIX_FMT_RGB565,
+               .depth    = 16,
+               .reg      = EM28XX_OUTFMT_YUV211,
        },
 };
 
@@ -694,6 +699,10 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
        unsigned int          hscale, vscale;
        struct em28xx_fmt     *fmt;
 
+       /* FIXME: This is the only supported fmt */
+       if (dev->board.is_27xx)
+               f->fmt.pix.pixelformat = V4L2_PIX_FMT_RGB565;
+
        fmt = format_by_fourcc(f->fmt.pix.pixelformat);
        if (!fmt) {
                em28xx_videodbg("Fourcc format (%08x) invalid.\n",
@@ -701,7 +710,11 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
                return -EINVAL;
        }
 
-       if (dev->board.is_em2800) {
+       if (dev->board.is_27xx) {
+               /* FIXME: This is the only supported fmt */
+               width  = 640;
+               height = 480;
+       } else if (dev->board.is_em2800) {
                /* the em2800 can only scale down to 50% */
                height = height > (3 * maxh / 4) ? maxh : maxh / 2;
                width = width > (3 * maxw / 4) ? maxw : maxw / 2;
@@ -747,6 +760,10 @@ static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
 
        mutex_lock(&dev->lock);
 
+       /* FIXME: This is the only supported fmt */
+       if (dev->board.is_27xx)
+               f->fmt.pix.pixelformat = V4L2_PIX_FMT_RGB565;
+
        vidioc_try_fmt_vid_cap(file, priv, f);
 
        fmt = format_by_fourcc(f->fmt.pix.pixelformat);