Fixes an encoder bugg when requesting a CBR rate over the allowable limit
authorJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Mon, 15 Aug 2011 18:08:57 +0000 (14:08 -0400)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Mon, 15 Aug 2011 18:08:57 +0000 (14:08 -0400)
libcelt/mdct.c
libcelt/mdct.h
src/opus_decoder.c
src/opus_encoder.c

index 1e310ad..43af87c 100644 (file)
@@ -99,6 +99,7 @@ void clt_mdct_clear(mdct_lookup *l)
 
 #endif /* CUSTOM_MODES */
 
+/* Forward MDCT trashes the input array */
 void clt_mdct_forward(const mdct_lookup *l, kiss_fft_scalar *in, kiss_fft_scalar * restrict out,
       const opus_val16 *window, int overlap, int shift, int stride)
 {
index 8df8db0..bba627c 100644 (file)
@@ -55,7 +55,7 @@ typedef struct {
 int clt_mdct_init(mdct_lookup *l,int N, int maxshift);
 void clt_mdct_clear(mdct_lookup *l);
 
-/** Compute a forward MDCT and scale by 4/N */
+/** Compute a forward MDCT and scale by 4/N, trashes the input array */
 void clt_mdct_forward(const mdct_lookup *l, kiss_fft_scalar *in, kiss_fft_scalar *out,
       const opus_val16 *window, int overlap, int shift, int stride);
 
index bbf8c03..d8f4af4 100644 (file)
@@ -39,8 +39,6 @@
 #include "modes.h"
 #include "silk_API.h"
 
-#define MAX_PACKET (1275)
-
 /* Make sure everything's aligned to 4 bytes (this may need to be increased
    on really weird architectures) */
 static inline int align(int i)
index 1f89d0a..dc8c85f 100644 (file)
@@ -425,7 +425,7 @@ int opus_encode(OpusEncoder *st, const opus_int16 *pcm, int frame_size,
         st->silk_mode.maxInternalSampleRate = 16000;
 
         /* Call SILK encoder for the low band */
-        nBytes = max_data_bytes-1;
+        nBytes = IMIN(1275, max_data_bytes-1);
         if (prefill)
         {
             int zero=0;
@@ -515,6 +515,7 @@ int opus_encode(OpusEncoder *st, const opus_int16 *pcm, int frame_size,
             }
         }
 
+        nb_compr_bytes = IMIN(1275, nb_compr_bytes);
         ec_enc_shrink(&enc, nb_compr_bytes);
     } else {
         nb_compr_bytes = 0;