media: vicodec: prepare support for various number of planes
authorDafna Hirschfeld <dafna3@gmail.com>
Thu, 15 Nov 2018 11:23:30 +0000 (06:23 -0500)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Fri, 23 Nov 2018 09:34:27 +0000 (04:34 -0500)
Add fields to the structs `fwht_raw_frame`, `v4l2_fwht_pixfmts`
to support various number of planes - formats
with alpha channel that have 4 planes and greyscale formats
that have 1 plane.

Signed-off-by: Dafna Hirschfeld <dafna3@gmail.com>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/platform/vicodec/codec-fwht.c
drivers/media/platform/vicodec/codec-fwht.h
drivers/media/platform/vicodec/codec-v4l2-fwht.c
drivers/media/platform/vicodec/codec-v4l2-fwht.h
drivers/media/platform/vicodec/vicodec-core.c

index 36656031b2956f2a0ab568648b9e3e0fbf065cbb..4ee6d7e0fbe2e3068e7fa8f8c5f86bd219707350 100644 (file)
@@ -760,7 +760,7 @@ u32 fwht_encode_frame(struct fwht_raw_frame *frm,
        rlco_max = rlco + size / 2 - 256;
        encoding = encode_plane(frm->luma, ref_frm->luma, &rlco, rlco_max, cf,
                                frm->height, frm->width,
-                               frm->luma_step, is_intra, next_is_intra);
+                               frm->luma_alpha_step, is_intra, next_is_intra);
        if (encoding & FWHT_FRAME_UNENCODED)
                encoding |= FWHT_LUMA_UNENCODED;
        encoding &= ~FWHT_FRAME_UNENCODED;
index 3e9391fec5fe6713b66c59727fa2c686eca426b8..743d78e112f886e007e7d06d4d835eb83a4edbb1 100644 (file)
@@ -104,9 +104,10 @@ struct fwht_raw_frame {
        unsigned int width, height;
        unsigned int width_div;
        unsigned int height_div;
-       unsigned int luma_step;
+       unsigned int luma_alpha_step;
        unsigned int chroma_step;
-       u8 *luma, *cb, *cr;
+       unsigned int components_num;
+       u8 *luma, *cb, *cr, *alpha;
 };
 
 #define FWHT_FRAME_PCODED      BIT(0)
index e5b68fb38aacdc9c286552d4a0a371960fdc6b80..b842636e71a919fd7f2c7307bb14e701ef46c2b4 100644 (file)
 #include "codec-v4l2-fwht.h"
 
 static const struct v4l2_fwht_pixfmt_info v4l2_fwht_pixfmts[] = {
-       { V4L2_PIX_FMT_YUV420,  1, 3, 2, 1, 1, 2, 2 },
-       { V4L2_PIX_FMT_YVU420,  1, 3, 2, 1, 1, 2, 2 },
-       { V4L2_PIX_FMT_YUV422P, 1, 2, 1, 1, 1, 2, 1 },
-       { V4L2_PIX_FMT_NV12,    1, 3, 2, 1, 2, 2, 2 },
-       { V4L2_PIX_FMT_NV21,    1, 3, 2, 1, 2, 2, 2 },
-       { V4L2_PIX_FMT_NV16,    1, 2, 1, 1, 2, 2, 1 },
-       { V4L2_PIX_FMT_NV61,    1, 2, 1, 1, 2, 2, 1 },
-       { V4L2_PIX_FMT_NV24,    1, 3, 1, 1, 2, 1, 1 },
-       { V4L2_PIX_FMT_NV42,    1, 3, 1, 1, 2, 1, 1 },
-       { V4L2_PIX_FMT_YUYV,    2, 2, 1, 2, 4, 2, 1 },
-       { V4L2_PIX_FMT_YVYU,    2, 2, 1, 2, 4, 2, 1 },
-       { V4L2_PIX_FMT_UYVY,    2, 2, 1, 2, 4, 2, 1 },
-       { V4L2_PIX_FMT_VYUY,    2, 2, 1, 2, 4, 2, 1 },
-       { V4L2_PIX_FMT_BGR24,   3, 3, 1, 3, 3, 1, 1 },
-       { V4L2_PIX_FMT_RGB24,   3, 3, 1, 3, 3, 1, 1 },
-       { V4L2_PIX_FMT_HSV24,   3, 3, 1, 3, 3, 1, 1 },
-       { V4L2_PIX_FMT_BGR32,   4, 4, 1, 4, 4, 1, 1 },
-       { V4L2_PIX_FMT_XBGR32,  4, 4, 1, 4, 4, 1, 1 },
-       { V4L2_PIX_FMT_RGB32,   4, 4, 1, 4, 4, 1, 1 },
-       { V4L2_PIX_FMT_XRGB32,  4, 4, 1, 4, 4, 1, 1 },
-       { V4L2_PIX_FMT_HSV32,   4, 4, 1, 4, 4, 1, 1 },
+       { V4L2_PIX_FMT_YUV420,  1, 3, 2, 1, 1, 2, 2, 3},
+       { V4L2_PIX_FMT_YVU420,  1, 3, 2, 1, 1, 2, 2, 3},
+       { V4L2_PIX_FMT_YUV422P, 1, 2, 1, 1, 1, 2, 1, 3},
+       { V4L2_PIX_FMT_NV12,    1, 3, 2, 1, 2, 2, 2, 3},
+       { V4L2_PIX_FMT_NV21,    1, 3, 2, 1, 2, 2, 2, 3},
+       { V4L2_PIX_FMT_NV16,    1, 2, 1, 1, 2, 2, 1, 3},
+       { V4L2_PIX_FMT_NV61,    1, 2, 1, 1, 2, 2, 1, 3},
+       { V4L2_PIX_FMT_NV24,    1, 3, 1, 1, 2, 1, 1, 3},
+       { V4L2_PIX_FMT_NV42,    1, 3, 1, 1, 2, 1, 1, 3},
+       { V4L2_PIX_FMT_YUYV,    2, 2, 1, 2, 4, 2, 1, 3},
+       { V4L2_PIX_FMT_YVYU,    2, 2, 1, 2, 4, 2, 1, 3},
+       { V4L2_PIX_FMT_UYVY,    2, 2, 1, 2, 4, 2, 1, 3},
+       { V4L2_PIX_FMT_VYUY,    2, 2, 1, 2, 4, 2, 1, 3},
+       { V4L2_PIX_FMT_BGR24,   3, 3, 1, 3, 3, 1, 1, 3},
+       { V4L2_PIX_FMT_RGB24,   3, 3, 1, 3, 3, 1, 1, 3},
+       { V4L2_PIX_FMT_HSV24,   3, 3, 1, 3, 3, 1, 1, 3},
+       { V4L2_PIX_FMT_BGR32,   4, 4, 1, 4, 4, 1, 1, 3},
+       { V4L2_PIX_FMT_XBGR32,  4, 4, 1, 4, 4, 1, 1, 3},
+       { V4L2_PIX_FMT_RGB32,   4, 4, 1, 4, 4, 1, 1, 3},
+       { V4L2_PIX_FMT_XRGB32,  4, 4, 1, 4, 4, 1, 1, 3},
+       { V4L2_PIX_FMT_HSV32,   4, 4, 1, 4, 4, 1, 1, 3},
+
 };
 
 const struct v4l2_fwht_pixfmt_info *v4l2_fwht_find_pixfmt(u32 pixelformat)
@@ -68,8 +69,10 @@ int v4l2_fwht_encode(struct v4l2_fwht_state *state, u8 *p_in, u8 *p_out)
        rf.luma = p_in;
        rf.width_div = info->width_div;
        rf.height_div = info->height_div;
-       rf.luma_step = info->luma_step;
+       rf.luma_alpha_step = info->luma_alpha_step;
        rf.chroma_step = info->chroma_step;
+       rf.alpha = NULL;
+       rf.components_num = info->components_num;
 
        switch (info->id) {
        case V4L2_PIX_FMT_YUV420:
index 162465b78067e5adcfa914aecf680959f66ab233..ed53e28d4f9c10c3429fd1bd68f49562dd028f2b 100644 (file)
@@ -13,11 +13,12 @@ struct v4l2_fwht_pixfmt_info {
        unsigned int bytesperline_mult;
        unsigned int sizeimage_mult;
        unsigned int sizeimage_div;
-       unsigned int luma_step;
+       unsigned int luma_alpha_step;
        unsigned int chroma_step;
        /* Chroma plane subsampling */
        unsigned int width_div;
        unsigned int height_div;
+       unsigned int components_num;
 };
 
 struct v4l2_fwht_state {
index 9b6416ba59011889f7b5f54fec9abca603f573d6..b26ca043e8c31cb6becf0638b79971468e59d7cf 100644 (file)
@@ -61,7 +61,7 @@ struct pixfmt_info {
 };
 
 static const struct v4l2_fwht_pixfmt_info pixfmt_fwht = {
-       V4L2_PIX_FMT_FWHT, 0, 3, 1, 1, 1, 1, 1
+       V4L2_PIX_FMT_FWHT, 0, 3, 1, 1, 1, 1, 1, 0
 };
 
 static void vicodec_dev_release(struct device *dev)