From fc1e2256b70ed08ec71d0d59b75b567a74fd3d3e Mon Sep 17 00:00:00 2001 From: Ding Wei Date: Thu, 30 Aug 2018 08:58:33 +0800 Subject: [PATCH] [mpeg4]: fix bug: add marco MPP_DIV for division tips: in mpeg4,the divisor named time_pp is likely to be 0. Change-Id: If9c055cb03139e819fe901009024e3ad4bbe79a5 Signed-off-by: Ding Wei --- mpp/hal/vpu/mpg4d/hal_m4vd_vdpu1.c | 6 +++--- mpp/hal/vpu/mpg4d/hal_m4vd_vdpu2.c | 6 +++--- osal/inc/mpp_common.h | 2 ++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/mpp/hal/vpu/mpg4d/hal_m4vd_vdpu1.c b/mpp/hal/vpu/mpg4d/hal_m4vd_vdpu1.c index 38cec14a..e89d9570 100644 --- a/mpp/hal/vpu/mpg4d/hal_m4vd_vdpu1.c +++ b/mpp/hal/vpu/mpg4d/hal_m4vd_vdpu1.c @@ -134,9 +134,9 @@ static void vdpu1_mpg4d_setup_regs_by_syntax(hal_mpg4_ctx *ctx, MppSyntax syntax RK_U32 time_bp = pp->time_bp; RK_U32 time_pp = pp->time_pp; - RK_U32 trb_per_trd_d0 = ((((RK_S64)(1 * time_bp + 0)) << 27) + 1 * (time_pp - 1)) / time_pp; - RK_U32 trb_per_trd_d1 = ((((RK_S64)(2 * time_bp + 1)) << 27) + 2 * (time_pp - 0)) / (2 * time_pp + 1); - RK_U32 trb_per_trd_dm1 = ((((RK_S64)(2 * time_bp - 1)) << 27) + 2 * (time_pp - 1)) / (2 * time_pp - 1); + RK_U32 trb_per_trd_d0 = MPP_DIV((((RK_S64)(1 * time_bp + 0)) << 27) + 1 * (time_pp - 1), time_pp); + RK_U32 trb_per_trd_d1 = MPP_DIV((((RK_S64)(2 * time_bp + 1)) << 27) + 2 * (time_pp - 0), 2 * time_pp + 1); + RK_U32 trb_per_trd_dm1 = MPP_DIV((((RK_S64)(2 * time_bp - 1)) << 27) + 2 * (time_pp - 1), 2 * time_pp - 1); regs->SwReg03.sw_pic_b_e = 1; regs->SwReg03.sw_pic_inter_e = 1; diff --git a/mpp/hal/vpu/mpg4d/hal_m4vd_vdpu2.c b/mpp/hal/vpu/mpg4d/hal_m4vd_vdpu2.c index ca77f984..f5c7a221 100644 --- a/mpp/hal/vpu/mpg4d/hal_m4vd_vdpu2.c +++ b/mpp/hal/vpu/mpg4d/hal_m4vd_vdpu2.c @@ -132,9 +132,9 @@ static void vdpu2_mpg4d_setup_regs_by_syntax(hal_mpg4_ctx *ctx, MppSyntax syntax RK_U32 time_bp = pp->time_bp; RK_U32 time_pp = pp->time_pp; - RK_U32 trb_per_trd_d0 = ((((RK_S64)(1 * time_bp + 0)) << 27) + 1 * (time_pp - 1)) / time_pp; - RK_U32 trb_per_trd_d1 = ((((RK_S64)(2 * time_bp + 1)) << 27) + 2 * (time_pp - 0)) / (2 * time_pp + 1); - RK_U32 trb_per_trd_dm1 = ((((RK_S64)(2 * time_bp - 1)) << 27) + 2 * (time_pp - 1)) / (2 * time_pp - 1); + RK_U32 trb_per_trd_d0 = MPP_DIV((((RK_S64)(1 * time_bp + 0)) << 27) + 1 * (time_pp - 1), time_pp); + RK_U32 trb_per_trd_d1 = MPP_DIV((((RK_S64)(2 * time_bp + 1)) << 27) + 2 * (time_pp - 0), 2 * time_pp + 1); + RK_U32 trb_per_trd_dm1 = MPP_DIV((((RK_S64)(2 * time_bp - 1)) << 27) + 2 * (time_pp - 1), 2 * time_pp - 1); regs->reg57_enable_ctrl.sw_pic_type_sel1 = 1; regs->reg57_enable_ctrl.sw_pic_type_sel0 = 1; diff --git a/osal/inc/mpp_common.h b/osal/inc/mpp_common.h index fbe116db..b970f899 100644 --- a/osal/inc/mpp_common.h +++ b/osal/inc/mpp_common.h @@ -31,6 +31,8 @@ #define MPP_MIN3(a,b,c) MPP_MIN(MPP_MIN(a,b),c) #define MPP_MIN4(a, b, c, d) MPP_MIN((a), MPP_MIN3((b), (c), (d))) +#define MPP_DIV(a, b) ((b) ? (a) / (b) : (a)) + #define MPP_SWAP(type, a, b) do {type SWAP_tmp = b; b = a; a = SWAP_tmp;} while(0) #define MPP_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0])) #define MPP_ALIGN(x, a) (((x)+(a)-1)&~((a)-1))