Better handling of DTX for range coder state checks
authorJean-Marc Valin <jmvalin@jmvalin.ca>
Sat, 20 Aug 2011 04:21:46 +0000 (00:21 -0400)
committerJean-Marc Valin <jmvalin@jmvalin.ca>
Sat, 20 Aug 2011 04:21:46 +0000 (00:21 -0400)
src/opus_decoder.c
src/opus_encoder.c

index f2e173b..a022840 100644 (file)
@@ -442,7 +442,10 @@ static int opus_decode_frame(OpusDecoder *st, const unsigned char *data,
                    st->channels, window, st->Fs);
     }
 
-    st->rangeFinal = dec.rng ^ redundant_rng;
+    if (len <= 1)
+       st->rangeFinal = 0;
+    else
+       st->rangeFinal = dec.rng ^ redundant_rng;
 
     st->prev_mode = mode;
     st->prev_redundancy = redundancy;
index 1b00a27..e90472f 100644 (file)
@@ -261,6 +261,7 @@ int opus_encode_float(OpusEncoder *st, const opus_val16 *pcm, int frame_size,
     opus_uint32 redundant_rng = 0;
     ALLOC_STACK;
 
+    st->rangeFinal = 0;
     if (400*frame_size != st->Fs && 200*frame_size != st->Fs && 100*frame_size != st->Fs &&
          50*frame_size != st->Fs &&  25*frame_size != st->Fs &&  50*frame_size != 3*st->Fs)
         return OPUS_BAD_ARG;