Fixes a few minor issues (no bit-stream change)
authorJean-Marc Valin <jmvalin@jmvalin.ca>
Tue, 24 Jan 2012 01:45:08 +0000 (14:45 +1300)
committerJean-Marc Valin <jmvalin@jmvalin.ca>
Tue, 24 Jan 2012 01:47:54 +0000 (14:47 +1300)
- Safer gain clamping for PLC
- Makes opus_decoder_get_nb_samples() report an error on invalid ToC
- Giving a free license to the text ofthe draft (not just the code)

doc/draft-ietf-codec-opus.xml
silk/dec_API.c
silk/decode_core.c
src/opus_decoder.c

index 4524c3e..a6739a1 100644 (file)
@@ -7175,6 +7175,14 @@ for their bug reports and feedback.
 </t>
 </section>
 
+<section title="Copying Conditions">
+<t>The authors agree to grant third parties the irrevocable right to copy, use and distribute 
+the work (excluding Code Components available under the simplified BSD license), with or 
+without modification, in any medium, without royalty, provided that, unless separate 
+permission is granted, redistributed modified works do not contain misleading author, version, 
+name of work, or endorsement information.</t>
+</section>
+
 </middle>
 
 <back>
index c456a6d..a0b841c 100644 (file)
@@ -315,7 +315,12 @@ opus_int silk_Decode(                                   /* O    Returns error co
         decControl->prevPitchLag = 0;
     }
 
-    if( lostFlag != FLAG_PACKET_LOST ) {
+    if( lostFlag == FLAG_PACKET_LOST ) {
+       /* On packet loss, remove the gain clamping to prevent having the energy "bounce back"
+          if we lose packets when the energy is going down */
+       for ( i = 0; i < psDec->nChannelsInternal; i++ )
+          psDec->channel_state[ i ].LastGainIndex = 10;
+    } else {
        psDec->prev_decode_only_middle = decode_only_middle;
     }
     return ret;
index 7f90e03..9854ccc 100644 (file)
@@ -72,7 +72,8 @@ void silk_decode_core(
             psDec->exc_Q14[ i ] += QUANT_LEVEL_ADJUST_Q10 << 4;
         }
         psDec->exc_Q14[ i ] += offset_Q10 << 4;
-        psDec->exc_Q14[ i ] ^= silk_RSHIFT( rand_seed, 31 );
+        if ( rand_seed < 0 )
+           psDec->exc_Q14[ i ] = -psDec->exc_Q14[ i ];
 
         rand_seed = silk_ADD32_ovflw( rand_seed, pulses[ i ] );
     }
index 97e3e96..ab79f42 100644 (file)
@@ -923,6 +923,10 @@ int opus_decoder_get_nb_samples(const OpusDecoder *dec,
 {
    int samples;
    int count = opus_packet_get_nb_frames(packet, len);
+
+   if (count<0)
+      return count;
+
    samples = count*opus_packet_get_samples_per_frame(packet, dec->Fs);
    /* Can't have more than 120 ms */
    if (samples*25 > dec->Fs*3)