diff --git a/decoder/ih264d_parse_bslice.c b/decoder/ih264d_parse_bslice.c index 8b50372..936963a 100644 --- a/decoder/ih264d_parse_bslice.c +++ b/decoder/ih264d_parse_bslice.c @@ -1197,8 +1197,8 @@ void ih264d_get_implicit_weights(dec_struct_t *ps_dec) UWORD8 i, j; struct pic_buffer_t *ps_pic_buff0, *ps_pic_buff1; WORD16 i2_dist_scale_factor; - WORD16 i16_tb, i16_td, i16_tx; - WORD32 i4_tb, i4_td; + WORD16 i2_tb, i2_td, i2_tx; + WORD64 i8_tb, i8_td; WORD32 i4_poc0, i4_poc1; UWORD32 ui_temp0, ui_temp1; UWORD8 uc_num_ref_idx_l0_active, uc_num_ref_idx_l1_active; @@ -1220,13 +1220,13 @@ void ih264d_get_implicit_weights(dec_struct_t *ps_dec) if(i4_poc1 != i4_poc0) { - i4_tb = ps_dec->ps_cur_pic->i4_poc - i4_poc0; - i16_tb = CLIP_S8(i4_tb); - i4_td = i4_poc1 - i4_poc0; - i16_td = CLIP_S8(i4_td); - i16_tx = (16384 + ABS(SIGN_POW2_DIV(i16_td, 1))) / i16_td; + i8_tb = (WORD64)ps_dec->ps_cur_pic->i4_poc - i4_poc0; + i2_tb = CLIP_S8(i8_tb); + i8_td = (WORD64)i4_poc1 - i4_poc0; + i2_td = CLIP_S8(i8_td); + i2_tx = (16384 + ABS(SIGN_POW2_DIV(i2_td, 1))) / i2_td; i2_dist_scale_factor = CLIP_S11( - (((i16_tb * i16_tx) + 32) >> 6)); + (((i2_tb * i2_tx) + 32) >> 6)); if(/*((u4_poc1 - u4_poc0) == 0) ||*/ (!(ps_pic_buff1->u1_is_short && ps_pic_buff0->u1_is_short)) @@ -1290,14 +1290,14 @@ void ih264d_get_implicit_weights(dec_struct_t *ps_dec) i4_poc1 = ps_pic_buff1->i4_poc; if(i4_poc1 != i4_poc0) { - i4_tb = i4_cur_poc - i4_poc0; - i16_tb = CLIP_S8(i4_tb); - i4_td = i4_poc1 - i4_poc0; - i16_td = CLIP_S8(i4_td); - i16_tx = (16384 + ABS(SIGN_POW2_DIV(i16_td, 1))) - / i16_td; + i8_tb = (WORD64)i4_cur_poc - i4_poc0; + i2_tb = CLIP_S8(i8_tb); + i8_td = (WORD64)i4_poc1 - i4_poc0; + i2_td = CLIP_S8(i8_td); + i2_tx = (16384 + ABS(SIGN_POW2_DIV(i2_td, 1))) + / i2_td; i2_dist_scale_factor = CLIP_S11( - (((i16_tb * i16_tx) + 32) >> 6)); + (((i2_tb * i2_tx) + 32) >> 6)); if(/*((u4_poc1 - u4_poc0) == 0) ||*/ (!(ps_pic_buff1->u1_is_short && ps_pic_buff0->u1_is_short)) diff --git a/decoder/ih264d_process_bslice.c b/decoder/ih264d_process_bslice.c index 5dfba33..fffa586 100644 --- a/decoder/ih264d_process_bslice.c +++ b/decoder/ih264d_process_bslice.c @@ -756,7 +756,7 @@ WORD32 ih264d_decode_temporal_direct(dec_struct_t * ps_dec, } { WORD16 i16_td; - WORD32 diff; + WORD64 diff; if(c_refFrm0 >= 0) { i2_mv_x0 = ps_mv->i2_mv[0]; @@ -782,7 +782,7 @@ WORD32 ih264d_decode_temporal_direct(dec_struct_t * ps_dec, i2_mv_y0 *= 2; } - diff = pic1_poc - pic0_poc; + diff = (WORD64)pic1_poc - pic0_poc; i16_td = CLIP_S8(diff); if((ps_pic_buff0->u1_is_short == 0) || (i16_td == 0)) { @@ -791,21 +791,21 @@ WORD32 ih264d_decode_temporal_direct(dec_struct_t * ps_dec, } else { - WORD16 i16_tb, i16_tx, i2_dist_scale_factor, i16_temp; + WORD16 i2_tb, i2_tx, i2_dist_scale_factor, i2_temp; - diff = cur_poc - pic0_poc; - i16_tb = CLIP_S8(diff); + diff = (WORD64)cur_poc - pic0_poc; + i2_tb = CLIP_S8(diff); - i16_tx = (16384 + ABS(SIGN_POW2_DIV(i16_td, 1))) / i16_td; + i2_tx = (16384 + ABS(SIGN_POW2_DIV(i16_td, 1))) / i16_td; i2_dist_scale_factor = CLIP_S11( - (((i16_tb * i16_tx) + 32) >> 6)); - i16_temp = (i2_mv_x0 * i2_dist_scale_factor + 128) >> 8; - i2_mv_x1 = i16_temp - i2_mv_x0; - i2_mv_x0 = i16_temp; + (((i2_tb * i2_tx) + 32) >> 6)); + i2_temp = (i2_mv_x0 * i2_dist_scale_factor + 128) >> 8; + i2_mv_x1 = i2_temp - i2_mv_x0; + i2_mv_x0 = i2_temp; - i16_temp = (i2_mv_y0 * i2_dist_scale_factor + 128) >> 8; - i2_mv_y1 = i16_temp - i2_mv_y0; - i2_mv_y0 = i16_temp; + i2_temp = (i2_mv_y0 * i2_dist_scale_factor + 128) >> 8; + i2_mv_y1 = i2_temp - i2_mv_y0; + i2_mv_y0 = i2_temp; } { mv_pred_t *ps_mv; @@ -2304,8 +2304,9 @@ void ih264d_fld_to_mbaff(dec_struct_t *ps_dec, { if(ABS(ps_col_pic->i4_top_field_order_cnt - - ps_dec->ps_cur_pic->i4_poc) >= - ABS(ps_dec->ps_cur_pic->i4_poc - ps_col_pic->i4_bottom_field_order_cnt)) + - (WORD64)ps_dec->ps_cur_pic->i4_poc) >= + ABS((WORD64)ps_dec->ps_cur_pic->i4_poc + - ps_col_pic->i4_bottom_field_order_cnt)) { ps_col_pic = ps_dec->ps_ref_pic_buf_lx[1][MAX_REF_BUFS]; } @@ -2336,8 +2337,9 @@ void ih264d_fld_to_mbaff(dec_struct_t *ps_dec, if(u1_is_cur_mb_fld == 0) { if(ABS(ps_col_pic->i4_top_field_order_cnt - - ps_dec->ps_cur_pic->i4_poc) >= - ABS(ps_dec->ps_cur_pic->i4_poc - ps_col_pic->i4_bottom_field_order_cnt)) + - (WORD64)ps_dec->ps_cur_pic->i4_poc) >= + ABS((WORD64)ps_dec->ps_cur_pic->i4_poc + - ps_col_pic->i4_bottom_field_order_cnt)) { u2_sub_mb_ofst += 0x10; }