diff --git a/src/opus_encoder.c b/src/opus_encoder.c index a365e56dbe60b47397afefd8c971c0ec93b80180..036143b827a60bb9677f0452d94a9a5c940f92a0 100644 --- a/src/opus_encoder.c +++ b/src/opus_encoder.c @@ -1518,9 +1518,9 @@ opus_int32 opus_encode_native(OpusEncoder *st, const opus_val16 *pcm, int frame_ } /* Conservative rate reduction, we cut the masking in half */ masking_depth = HALF16(mask_sum / end*st->channels); - rate_offset = PSHR32(MULT16_16(srate, masking_depth), DB_SHIFT); + masking_depth += QCONST16(.4f, DB_SHIFT); + rate_offset = (opus_int32)PSHR32(MULT16_16(srate, masking_depth), DB_SHIFT); rate_offset = MAX32(rate_offset, -2*st->silk_mode.bitRate/3); - rate_offset += QCONST16(.4f, DB_SHIFT); st->silk_mode.bitRate += rate_offset; bytes_target += rate_offset * frame_size / (8 * st->Fs); } diff --git a/tests/test_opus_encode.c b/tests/test_opus_encode.c index 0e544a443b58019469dfc25def7f4462b9f26443..6c1d0238a426eb8e34a42fa5b40d390c9ef58dff 100644 --- a/tests/test_opus_encode.c +++ b/tests/test_opus_encode.c @@ -310,7 +310,7 @@ int run_test1(int no_fuzz) do { int pred,len,out_samples,frame_size,loss; if(opus_multistream_encoder_ctl(MSenc, OPUS_GET_PREDICTION_DISABLED(&pred))!=OPUS_OK)test_failed(); - if(opus_multistream_encoder_ctl(MSenc, OPUS_SET_PREDICTION_DISABLED((fast_rand()&15)<(pred?11:4)))!=OPUS_OK)test_failed(); + if(opus_multistream_encoder_ctl(MSenc, OPUS_SET_PREDICTION_DISABLED((int)(fast_rand()&15)<(pred?11:4)))!=OPUS_OK)test_failed(); frame_size=frame[j]; if(opus_multistream_encoder_ctl(MSenc, OPUS_SET_COMPLEXITY((count>>2)%11))!=OPUS_OK)test_failed(); if(opus_multistream_encoder_ctl(MSenc, OPUS_SET_PACKET_LOSS_PERC((fast_rand()&15)&(fast_rand()%15)))!=OPUS_OK)test_failed();