[media] vivid: support new multiplanar YUV formats
[deliverable/linux.git] / drivers / media / platform / vivid / vivid-tpg.c
index 14256141f905dfcce58fb64f46e53a0f7566d6ec..da862bb2e5f86141a7ec15016928f322a5c04e1d 100644 (file)
@@ -251,6 +251,10 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
                tpg->planes = 3;
                tpg->is_yuv = true;
                break;
+       case V4L2_PIX_FMT_YUV422M:
+       case V4L2_PIX_FMT_YVU422M:
+               tpg->buffers = 3;
+               /* fall through */
        case V4L2_PIX_FMT_YUV422P:
                tpg->vdownsampling[1] = 1;
                tpg->vdownsampling[2] = 1;
@@ -283,6 +287,16 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
                tpg->planes = 2;
                tpg->is_yuv = true;
                break;
+       case V4L2_PIX_FMT_YUV444M:
+       case V4L2_PIX_FMT_YVU444M:
+               tpg->buffers = 3;
+               tpg->planes = 3;
+               tpg->vdownsampling[1] = 1;
+               tpg->vdownsampling[2] = 1;
+               tpg->hdownsampling[1] = 1;
+               tpg->hdownsampling[2] = 1;
+               tpg->is_yuv = true;
+               break;
        case V4L2_PIX_FMT_NV24:
        case V4L2_PIX_FMT_NV42:
                tpg->vdownsampling[1] = 1;
@@ -368,6 +382,10 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
                tpg->twopixelsize[0] = 4;
                tpg->twopixelsize[1] = 4;
                break;
+       case V4L2_PIX_FMT_YUV444M:
+       case V4L2_PIX_FMT_YVU444M:
+       case V4L2_PIX_FMT_YUV422M:
+       case V4L2_PIX_FMT_YVU422M:
        case V4L2_PIX_FMT_YUV422P:
        case V4L2_PIX_FMT_YUV420:
        case V4L2_PIX_FMT_YVU420:
@@ -933,6 +951,7 @@ static void gen_twopix(struct tpg_data *tpg,
                buf[0][offset] = r_y;
                buf[0][offset+1] = r_y == 0xff ? r_y : 0;
                break;
+       case V4L2_PIX_FMT_YUV422M:
        case V4L2_PIX_FMT_YUV422P:
        case V4L2_PIX_FMT_YUV420:
        case V4L2_PIX_FMT_YUV420M:
@@ -947,6 +966,7 @@ static void gen_twopix(struct tpg_data *tpg,
                buf[1][0] = g_u;
                buf[2][0] = b_v;
                break;
+       case V4L2_PIX_FMT_YVU422M:
        case V4L2_PIX_FMT_YVU420:
        case V4L2_PIX_FMT_YVU420M:
                buf[0][offset] = r_y;
@@ -988,6 +1008,18 @@ static void gen_twopix(struct tpg_data *tpg,
                buf[1][1] = g_u;
                break;
 
+       case V4L2_PIX_FMT_YUV444M:
+               buf[0][offset] = r_y;
+               buf[1][offset] = g_u;
+               buf[2][offset] = b_v;
+               break;
+
+       case V4L2_PIX_FMT_YVU444M:
+               buf[0][offset] = r_y;
+               buf[1][offset] = b_v;
+               buf[2][offset] = g_u;
+               break;
+
        case V4L2_PIX_FMT_NV24:
                buf[0][offset] = r_y;
                buf[1][2 * offset] = g_u;
This page took 0.0401 seconds and 5 git commands to generate.