shithub: opus

Download patch

ref: 66c612ef43baa3e2d7094b4a057c1370ce629dbb
parent: 11785e92c3a4310caee80209beba5536ab4a4297
author: Jean-Marc Valin <[email protected]>
date: Mon Aug 15 10:08:57 EDT 2011

Fixes an encoder bugg when requesting a CBR rate over the allowable limit

--- a/libcelt/mdct.c
+++ b/libcelt/mdct.c
@@ -99,6 +99,7 @@
 
 #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)
 {
--- a/libcelt/mdct.h
+++ b/libcelt/mdct.h
@@ -55,7 +55,7 @@
 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);
 
--- a/src/opus_decoder.c
+++ b/src/opus_decoder.c
@@ -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)
--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -425,7 +425,7 @@
         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 @@
             }
         }
 
+        nb_compr_bytes = IMIN(1275, nb_compr_bytes);
         ec_enc_shrink(&enc, nb_compr_bytes);
     } else {
         nb_compr_bytes = 0;