[media] vivid: add RGB444 support
authorHans Verkuil <hans.verkuil@cisco.com>
Wed, 11 Mar 2015 11:14:34 +0000 (08:14 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Fri, 3 Apr 2015 00:02:45 +0000 (21:02 -0300)
Add support for (A/X)RGB444 formats.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/platform/vivid/vivid-tpg.c
drivers/media/platform/vivid/vivid-vid-common.c

index 3f0ec9ab70305d156ec23114f7b41dc100b8a705..fe546e976b7f68e6d918554f2808717ccd5ced05 100644 (file)
@@ -190,6 +190,9 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
        switch (fourcc) {
        case V4L2_PIX_FMT_RGB565:
        case V4L2_PIX_FMT_RGB565X:
+       case V4L2_PIX_FMT_RGB444:
+       case V4L2_PIX_FMT_XRGB444:
+       case V4L2_PIX_FMT_ARGB444:
        case V4L2_PIX_FMT_RGB555:
        case V4L2_PIX_FMT_XRGB555:
        case V4L2_PIX_FMT_ARGB555:
@@ -264,6 +267,9 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
        switch (fourcc) {
        case V4L2_PIX_FMT_RGB565:
        case V4L2_PIX_FMT_RGB565X:
+       case V4L2_PIX_FMT_RGB444:
+       case V4L2_PIX_FMT_XRGB444:
+       case V4L2_PIX_FMT_ARGB444:
        case V4L2_PIX_FMT_RGB555:
        case V4L2_PIX_FMT_XRGB555:
        case V4L2_PIX_FMT_ARGB555:
@@ -701,6 +707,13 @@ static void precalculate_color(struct tpg_data *tpg, int k)
                        g >>= 6;
                        b >>= 7;
                        break;
+               case V4L2_PIX_FMT_RGB444:
+               case V4L2_PIX_FMT_XRGB444:
+               case V4L2_PIX_FMT_ARGB444:
+                       r >>= 8;
+                       g >>= 8;
+                       b >>= 8;
+                       break;
                case V4L2_PIX_FMT_RGB555:
                case V4L2_PIX_FMT_XRGB555:
                case V4L2_PIX_FMT_ARGB555:
@@ -855,6 +868,14 @@ static void gen_twopix(struct tpg_data *tpg,
                buf[0][offset] = (r_y << 3) | (g_u >> 3);
                buf[0][offset + 1] = (g_u << 5) | b_v;
                break;
+       case V4L2_PIX_FMT_RGB444:
+       case V4L2_PIX_FMT_XRGB444:
+               alpha = 0;
+               /* fall through */
+       case V4L2_PIX_FMT_ARGB444:
+               buf[0][offset] = (g_u << 4) | b_v;
+               buf[0][offset + 1] = (alpha & 0xf0) | r_y;
+               break;
        case V4L2_PIX_FMT_RGB555:
        case V4L2_PIX_FMT_XRGB555:
                alpha = 0;
index 7cb4aa0ac036d669fb2e4c14181f13df96644eec..cb73c1ba82b99b239371976dc8686cd36b128477 100644 (file)
@@ -170,6 +170,31 @@ struct vivid_fmt vivid_formats[] = {
                .buffers = 1,
                .can_do_overlay = true,
        },
+       {
+               .name     = "RGB444",
+               .fourcc   = V4L2_PIX_FMT_RGB444, /* xxxxrrrr ggggbbbb */
+               .vdownsampling = { 1 },
+               .bit_depth = { 16 },
+               .planes   = 1,
+               .buffers = 1,
+       },
+       {
+               .name     = "XRGB444",
+               .fourcc   = V4L2_PIX_FMT_XRGB444, /* xxxxrrrr ggggbbbb */
+               .vdownsampling = { 1 },
+               .bit_depth = { 16 },
+               .planes   = 1,
+               .buffers = 1,
+       },
+       {
+               .name     = "ARGB444",
+               .fourcc   = V4L2_PIX_FMT_ARGB444, /* aaaarrrr ggggbbbb */
+               .vdownsampling = { 1 },
+               .bit_depth = { 16 },
+               .planes   = 1,
+               .buffers = 1,
+               .alpha_mask = 0x00f0,
+       },
        {
                .name     = "RGB555 (LE)",
                .fourcc   = V4L2_PIX_FMT_RGB555, /* gggbbbbb arrrrrgg */