diff options
author | Ram Mohan <ram.mohan@ittiam.com> | 2023-09-29 01:02:22 +0530 |
---|---|---|
committer | ram-mohan <ram-mohan@users.noreply.github.com> | 2023-09-29 01:34:57 +0530 |
commit | d9ef5790efa895abdfadb5aca29b79633a98c3f6 (patch) | |
tree | 16d2faa8aa67a81ea70ba52721a3b227e1a11761 | |
parent | fef966515c1e8a4f18a9fea436707699a6b50c55 (diff) | |
download | libavc-d9ef5790efa895abdfadb5aca29b79633a98c3f6.tar.gz |
libavcenc: fix computations that are resulting in overflow
Intermediate precision for few computations are exceeding int max.
This is addressed
-rw-r--r-- | encoder/irc_rate_control_api.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/encoder/irc_rate_control_api.c b/encoder/irc_rate_control_api.c index 4a64645..b641aa1 100644 --- a/encoder/irc_rate_control_api.c +++ b/encoder/irc_rate_control_api.c @@ -163,7 +163,9 @@ void irc_initialise_rate_control(rate_control_api_t *ps_rate_control_api, UWORD32 u4_tgt_ticks) { WORD32 i; - UWORD32 u4_frms_in_delay_prd = (u4_frame_rate * u4_max_delay) / 1000000; + UWORD32 u4_frms_in_delay_prd; + + X_PROD_Y_DIV_Z(u4_frame_rate, u4_max_delay, 1000000, u4_frms_in_delay_prd); ps_rate_control_api->e_rc_type = e_rate_control_type; ps_rate_control_api->u1_is_mb_level_rc_on = u1_is_mb_level_rc_on; @@ -307,8 +309,8 @@ void irc_initialise_rate_control(rate_control_api_t *ps_rate_control_api, /* Initialize the mb level rate control module */ irc_init_mb_level_rc(ps_rate_control_api->ps_mb_rate_control); - ps_rate_control_api->i4_prev_frm_est_bits = u4_avg_bit_rate * 1000 - / u4_frame_rate; + X_PROD_Y_DIV_Z(u4_avg_bit_rate, 1000, u4_frame_rate, + ps_rate_control_api->i4_prev_frm_est_bits); ps_rate_control_api->prev_ref_pic_type = I_PIC; } |