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();