SILK can't use more than 80% of the bits in hybrid mode
authorKoen Vos <koen.vos@skype.net>
Thu, 17 Feb 2011 21:54:44 +0000 (16:54 -0500)
committerJean-Marc Valin <jean-marc.valin@octasic.com>
Thu, 17 Feb 2011 21:54:44 +0000 (16:54 -0500)
src/opus_encoder.c

index c4d2aa1..d69a062 100644 (file)
@@ -128,6 +128,10 @@ int opus_encode(OpusEncoder *st, const short *pcm, int frame_size,
                     st->silk_mode.bitRate = ( st->silk_mode.bitRate + 9000 + st->use_vbr * 1000 ) / 2;
                 }
             }
+            /* don't let SILK use more than 80% */
+            if( st->silk_mode.bitRate > ( st->bitrate_bps - 8*st->Fs/frame_size ) * 4/5 ) {
+                st->silk_mode.bitRate = ( st->bitrate_bps - 8*st->Fs/frame_size ) * 4/5;
+            }
         }
 
         st->silk_mode.payloadSize_ms = 1000 * frame_size / st->Fs;
@@ -162,6 +166,8 @@ int opus_encode(OpusEncoder *st, const short *pcm, int frame_size,
             } else if( st->silk_mode.internalSampleRate == 16000 ) {
                 silk_internal_bandwidth = BANDWIDTH_WIDEBAND;
             }
+        } else {
+            SKP_assert( st->silk_mode.internalSampleRate == 16000 );
         }
     }