media: mfc: DRV4.0: use the crop information for QoS
authorAyoung Sim <a.sim@samsung.com>
Tue, 17 Apr 2018 10:22:54 +0000 (19:22 +0900)
committerSunyoung Kang <sy0816.kang@samsung.com>
Tue, 29 May 2018 06:59:18 +0000 (15:59 +0900)
When driver calculates the size for QoS control,
there is a difference between decoder and encoder.
- encoder: cropped width, cropped height
- decoder: full image width, full image height

So in case of decoder, crop_width and img_width have same value.

Change-Id: I92acf2448b8541999889fbfb4bd1cacf261272d4
Signed-off-by: Ayoung Sim <a.sim@samsung.com>
drivers/media/platform/exynos/mfc/s5p_mfc_common.h
drivers/media/platform/exynos/mfc/s5p_mfc_irq.c
drivers/media/platform/exynos/mfc/s5p_mfc_qos.c

index 81bf93214183ab18dbd016c4b45dfc89e2703050..750a9144a428f08b5c4f4044b6a068eee46b4e1e 100644 (file)
 
 /* UHD resoluition */
 #define MFC_UHD_RES            (3840 * 2160)
-#define IS_UHD_RES(ctx)                (((ctx)->img_width * (ctx)->img_height) == MFC_UHD_RES)
-#define OVER_UHD_ENC60(ctx)    ((((ctx)->img_width * (ctx)->img_height) == MFC_UHD_RES) && \
+#define IS_UHD_RES(ctx)                (((ctx)->crop_width * (ctx)->crop_height) == MFC_UHD_RES)
+#define OVER_UHD_ENC60(ctx)    ((((ctx)->crop_width * (ctx)->crop_height) == MFC_UHD_RES) && \
                                ((ctx)->type == MFCINST_ENCODER) &&     \
                                ((ctx)->framerate / 1000) >= 60)
 
index 4dcc963d6636c91de6b7bb258f8d88335e13579d..c986b6dcb8380d1fbda5c78f3ad5d06a485bfa0e 100644 (file)
@@ -1134,6 +1134,8 @@ static int mfc_handle_seq_dec(struct s5p_mfc_ctx *ctx)
        if (ctx->src_fmt->fourcc != V4L2_PIX_FMT_FIMV1) {
                ctx->img_width = s5p_mfc_get_img_width();
                ctx->img_height = s5p_mfc_get_img_height();
+               ctx->crop_width = ctx->img_width;
+               ctx->crop_height = ctx->img_height;
                mfc_info_ctx("width: %d, height: %d\n", ctx->img_width, ctx->img_height);
        }
 
index 07fb2ef2858617d2206b9812752cb2d11661e2b7..9afcecd6858f83b7c356eea0845971e4830b89b2 100644 (file)
@@ -275,14 +275,14 @@ static inline unsigned long mfc_qos_get_mb_per_second(struct s5p_mfc_ctx *ctx)
 {
        unsigned long mb_width, mb_height, fps, mb;
 
-       mb_width = (ctx->img_width + 15) / 16;
-       mb_height = (ctx->img_height + 15) / 16;
+       mb_width = (ctx->crop_width + 15) / 16;
+       mb_height = (ctx->crop_height + 15) / 16;
        fps = ctx->framerate / 1000;
 
        mb = mb_width * mb_height * fps;
        mfc_debug(4, "QoS ctx[%d:%s] %d x %d @ %ld fps (mb: %ld)\n",
                        ctx->num, ctx->type == MFCINST_ENCODER ? "ENC" : "DEC",
-                       ctx->img_width, ctx->img_height, fps, mb);
+                       ctx->crop_width, ctx->crop_height, fps, mb);
 
        return mfc_qos_get_weighted_mb(ctx, mb);
 }
@@ -314,8 +314,8 @@ static void mfc_qos_get_bw_per_second(struct s5p_mfc_ctx *ctx, struct bts_bw *mf
        unsigned long mb_count_per_uhd_frame = MB_COUNT_PER_UHD_FRAME;
        unsigned long max_fps_per_uhd_frame = MAX_FPS_PER_UHD_FRAME;
 
-       mb_width = (ctx->img_width + 15) / 16;
-       mb_height = (ctx->img_height + 15) / 16;
+       mb_width = (ctx->crop_width + 15) / 16;
+       mb_height = (ctx->crop_height + 15) / 16;
        fps = ctx->framerate / 1000;
 
        mb = mb_width * mb_height * fps;