v4l2-ctl: add support for the new alpha-aware pixelformats.
authorHans Verkuil <hans.verkuil@cisco.com>
Thu, 17 Jul 2014 22:25:00 +0000 (00:25 +0200)
committerHans Verkuil <hans.verkuil@cisco.com>
Thu, 17 Jul 2014 22:25:00 +0000 (00:25 +0200)
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
utils/v4l2-ctl/v4l2-ctl-overlay.cpp
utils/v4l2-ctl/vivi-tpg.c

index 1b9a5ad..2c10d7e 100644 (file)
@@ -184,6 +184,8 @@ struct bitfield2fmt {
 
 static const struct bitfield2fmt fb_formats[] = {
        { 10, 5,  5, 5,  0, 5, 15, 1, V4L2_PIX_FMT_RGB555 },
+       { 10, 5,  5, 5,  0, 5, 15, 1, V4L2_PIX_FMT_XRGB555 },
+       { 10, 5,  5, 5,  0, 5, 15, 1, V4L2_PIX_FMT_ARGB555 },
        { 11, 5,  5, 6,  0, 5,  0, 0, V4L2_PIX_FMT_RGB565 },
        {  1, 5,  6, 5, 11, 5,  0, 1, V4L2_PIX_FMT_RGB555X },
        {  0, 5,  5, 6, 11, 5,  0, 0, V4L2_PIX_FMT_RGB565X },
@@ -191,6 +193,10 @@ static const struct bitfield2fmt fb_formats[] = {
        {  0, 8,  8, 8, 16, 8,  0, 0, V4L2_PIX_FMT_RGB24 },
        { 16, 8,  8, 8,  0, 8, 24, 8, V4L2_PIX_FMT_BGR32 },
        {  8, 8, 16, 8, 24, 8,  0, 8, V4L2_PIX_FMT_RGB32 },
+       { 16, 8,  8, 8,  0, 8, 24, 8, V4L2_PIX_FMT_XBGR32 },
+       {  8, 8, 16, 8, 24, 8,  0, 8, V4L2_PIX_FMT_XRGB32 },
+       { 16, 8,  8, 8,  0, 8, 24, 8, V4L2_PIX_FMT_ABGR32 },
+       {  8, 8, 16, 8, 24, 8,  0, 8, V4L2_PIX_FMT_ARGB32 },
        { }
 };
 
index 5ff153a..fbf0eb9 100644 (file)
@@ -170,11 +170,17 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
        case V4L2_PIX_FMT_RGB565:
        case V4L2_PIX_FMT_RGB565X:
        case V4L2_PIX_FMT_RGB555:
+       case V4L2_PIX_FMT_XRGB555:
+       case V4L2_PIX_FMT_ARGB555:
        case V4L2_PIX_FMT_RGB555X:
        case V4L2_PIX_FMT_RGB24:
        case V4L2_PIX_FMT_BGR24:
        case V4L2_PIX_FMT_RGB32:
        case V4L2_PIX_FMT_BGR32:
+       case V4L2_PIX_FMT_XRGB32:
+       case V4L2_PIX_FMT_XBGR32:
+       case V4L2_PIX_FMT_ARGB32:
+       case V4L2_PIX_FMT_ABGR32:
                tpg->is_yuv = 0;
                break;
        case V4L2_PIX_FMT_NV16M:
@@ -195,6 +201,8 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
        case V4L2_PIX_FMT_RGB565:
        case V4L2_PIX_FMT_RGB565X:
        case V4L2_PIX_FMT_RGB555:
+       case V4L2_PIX_FMT_XRGB555:
+       case V4L2_PIX_FMT_ARGB555:
        case V4L2_PIX_FMT_RGB555X:
        case V4L2_PIX_FMT_YUYV:
        case V4L2_PIX_FMT_UYVY:
@@ -208,6 +216,10 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
                break;
        case V4L2_PIX_FMT_RGB32:
        case V4L2_PIX_FMT_BGR32:
+       case V4L2_PIX_FMT_XRGB32:
+       case V4L2_PIX_FMT_XBGR32:
+       case V4L2_PIX_FMT_ARGB32:
+       case V4L2_PIX_FMT_ABGR32:
                tpg->twopixelsize[0] = 2 * 4;
                break;
        case V4L2_PIX_FMT_NV16M:
@@ -604,10 +616,15 @@ 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_RGB555:
+       case V4L2_PIX_FMT_ARGB555:
                buf[0][offset] = (g_u << 5) | b_v;
                buf[0][offset + 1] = (alpha & 0x80) | (r_y << 2) | (g_u >> 3);
                break;
+       case V4L2_PIX_FMT_RGB555:
+       case V4L2_PIX_FMT_XRGB555:
+               buf[0][offset] = (g_u << 5) | b_v;
+               buf[0][offset + 1] = (r_y << 2) | (g_u >> 3);
+               break;
        case V4L2_PIX_FMT_RGB555X:
                buf[0][offset] = (alpha & 0x80) | (r_y << 2) | (g_u >> 3);
                buf[0][offset + 1] = (g_u << 5) | b_v;
@@ -622,18 +639,32 @@ static void gen_twopix(struct tpg_data *tpg,
                buf[0][offset + 1] = g_u;
                buf[0][offset + 2] = r_y;
                break;
-       case V4L2_PIX_FMT_RGB32:
+       case V4L2_PIX_FMT_ARGB32:
                buf[0][offset] = alpha;
                buf[0][offset + 1] = r_y;
                buf[0][offset + 2] = g_u;
                buf[0][offset + 3] = b_v;
                break;
-       case V4L2_PIX_FMT_BGR32:
+       case V4L2_PIX_FMT_RGB32:
+       case V4L2_PIX_FMT_XRGB32:
+               buf[0][offset] = 0;
+               buf[0][offset + 1] = r_y;
+               buf[0][offset + 2] = g_u;
+               buf[0][offset + 3] = b_v;
+               break;
+       case V4L2_PIX_FMT_ABGR32:
                buf[0][offset] = b_v;
                buf[0][offset + 1] = g_u;
                buf[0][offset + 2] = r_y;
                buf[0][offset + 3] = alpha;
                break;
+       case V4L2_PIX_FMT_BGR32:
+       case V4L2_PIX_FMT_XBGR32:
+               buf[0][offset] = b_v;
+               buf[0][offset + 1] = g_u;
+               buf[0][offset + 2] = r_y;
+               buf[0][offset + 3] = 0;
+               break;
        }
 }