media: hantro: Move H264 motion vector calculation to a helper
authorEzequiel Garcia <ezequiel@collabora.com>
Wed, 25 Mar 2020 21:34:36 +0000 (22:34 +0100)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tue, 14 Apr 2020 09:23:40 +0000 (11:23 +0200)
Move the extra bytes calculation that are needed for H264
motion vector to a helper. This is just a cosmetic cleanup.

Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/staging/media/hantro/hantro.h
drivers/staging/media/hantro/hantro_hw.h
drivers/staging/media/hantro/hantro_v4l2.c

index 327ddef..2089f88 100644 (file)
 
 #include "hantro_hw.h"
 
-#define MB_DIM                 16
-#define MB_WIDTH(w)            DIV_ROUND_UP(w, MB_DIM)
-#define MB_HEIGHT(h)           DIV_ROUND_UP(h, MB_DIM)
-
 struct hantro_ctx;
 struct hantro_codec_ops;
 
index 7dfc9ba..4053d87 100644 (file)
 
 #define DEC_8190_ALIGN_MASK    0x07U
 
+#define MB_DIM                 16
+#define MB_WIDTH(w)            DIV_ROUND_UP(w, MB_DIM)
+#define MB_HEIGHT(h)           DIV_ROUND_UP(h, MB_DIM)
+
 struct hantro_dev;
 struct hantro_ctx;
 struct hantro_buf;
@@ -176,6 +180,33 @@ void hantro_g1_h264_dec_run(struct hantro_ctx *ctx);
 int hantro_h264_dec_init(struct hantro_ctx *ctx);
 void hantro_h264_dec_exit(struct hantro_ctx *ctx);
 
+static inline size_t
+hantro_h264_mv_size(unsigned int width, unsigned int height)
+{
+       /*
+        * A decoded 8-bit 4:2:0 NV12 frame may need memory for up to
+        * 448 bytes per macroblock with additional 32 bytes on
+        * multi-core variants.
+        *
+        * The H264 decoder needs extra space on the output buffers
+        * to store motion vectors. This is needed for reference
+        * frames and only if the format is non-post-processed NV12.
+        *
+        * Memory layout is as follow:
+        *
+        * +---------------------------+
+        * | Y-plane   256 bytes x MBs |
+        * +---------------------------+
+        * | UV-plane  128 bytes x MBs |
+        * +---------------------------+
+        * | MV buffer  64 bytes x MBs |
+        * +---------------------------+
+        * | MC sync          32 bytes |
+        * +---------------------------+
+        */
+       return 64 * MB_WIDTH(width) * MB_WIDTH(height) + 32;
+}
+
 void hantro_g1_mpeg2_dec_run(struct hantro_ctx *ctx);
 void rk3399_vpu_mpeg2_dec_run(struct hantro_ctx *ctx);
 void hantro_mpeg2_dec_copy_qtable(u8 *qtable,
index 3142ab6..458b502 100644 (file)
@@ -273,32 +273,11 @@ static int vidioc_try_fmt(struct file *file, void *priv, struct v4l2_format *f,
                /* Fill remaining fields */
                v4l2_fill_pixfmt_mp(pix_mp, fmt->fourcc, pix_mp->width,
                                    pix_mp->height);
-               /*
-                * A decoded 8-bit 4:2:0 NV12 frame may need memory for up to
-                * 448 bytes per macroblock with additional 32 bytes on
-                * multi-core variants.
-                *
-                * The H264 decoder needs extra space on the output buffers
-                * to store motion vectors. This is needed for reference
-                * frames and only if the format is non-post-processed NV12.
-                *
-                * Memory layout is as follow:
-                *
-                * +---------------------------+
-                * | Y-plane   256 bytes x MBs |
-                * +---------------------------+
-                * | UV-plane  128 bytes x MBs |
-                * +---------------------------+
-                * | MV buffer  64 bytes x MBs |
-                * +---------------------------+
-                * | MC sync          32 bytes |
-                * +---------------------------+
-                */
                if (ctx->vpu_src_fmt->fourcc == V4L2_PIX_FMT_H264_SLICE &&
                    !hantro_needs_postproc(ctx, fmt))
                        pix_mp->plane_fmt[0].sizeimage +=
-                               64 * MB_WIDTH(pix_mp->width) *
-                                    MB_WIDTH(pix_mp->height) + 32;
+                               hantro_h264_mv_size(pix_mp->width,
+                                                   pix_mp->height);
        } else if (!pix_mp->plane_fmt[0].sizeimage) {
                /*
                 * For coded formats the application can specify