aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRam Mohan <ram.mohan@ittiam.com>2023-09-29 01:02:22 +0530
committerram-mohan <ram-mohan@users.noreply.github.com>2023-09-29 01:34:57 +0530
commitd9ef5790efa895abdfadb5aca29b79633a98c3f6 (patch)
tree16d2faa8aa67a81ea70ba52721a3b227e1a11761
parentfef966515c1e8a4f18a9fea436707699a6b50c55 (diff)
downloadlibavc-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.c8
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;
}