]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/blobdiff - libavcodec/qcelpdec.c
Fix bandwith vs. bandwiDth typo.
[frescor/ffmpeg.git] / libavcodec / qcelpdec.c
index 32e74a6a7d0d45f42036bfdba52d53f25bd6fde8..bf2381503a0a3f54f4f1ceef0c43d85282e9d247 100644 (file)
@@ -31,7 +31,7 @@
 
 #include "avcodec.h"
 #include "internal.h"
-#include "bitstream.h"
+#include "get_bits.h"
 
 #include "qcelpdata.h"
 
@@ -249,7 +249,7 @@ static void decode_gain_and_index(QCELPContext  *q,
             gain[2] =     gain[1];
             gain[1] = 0.6*gain[0] + 0.4*gain[1];
         }
-    }else
+    }else if (q->bitrate != SILENCE)
     {
         if(q->bitrate == RATE_OCTAVE)
         {
@@ -412,18 +412,39 @@ static void compute_svector(QCELPContext *q, const float *gain,
 }
 
 /**
- * Apply generic gain control.
+ * Compute the gain control
  *
- * @param v_out output vector
  * @param v_in gain-controlled vector
  * @param v_ref vector to control gain of
  *
+ * @return gain control
+ *
  * FIXME: If v_ref is a zero vector, it energy is zero
  *        and the behavior of the gain control is
  *        undefined in the specs.
  *
  * TIA/EIA/IS-733 2.4.8.3-2/3/4/5, 2.4.8.6
  */
+static float compute_gain_ctrl(const float *v_ref, const float *v_in, const int len)
+{
+    float scalefactor = ff_dot_productf(v_in, v_in, len);
+
+    if(scalefactor)
+        scalefactor = sqrt(ff_dot_productf(v_ref, v_ref, len) / scalefactor);
+    else
+        ff_log_missing_feature(NULL, "Zero energy for gain control", 1);
+    return scalefactor;
+}
+
+/**
+ * Apply generic gain control.
+ *
+ * @param v_out output vector
+ * @param v_in gain-controlled vector
+ * @param v_ref vector to control gain of
+ *
+ * TIA/EIA/IS-733 2.4.8.3, 2.4.8.6
+ */
 static void apply_gain_ctrl(float *v_out, const float *v_ref,
                             const float *v_in)
 {
@@ -432,12 +453,7 @@ static void apply_gain_ctrl(float *v_out, const float *v_ref,
 
     for(i=0, j=0; i<4; i++)
     {
-        scalefactor = ff_dot_productf(v_in + j, v_in + j, 40);
-        if(scalefactor)
-            scalefactor = sqrt(ff_dot_productf(v_ref + j, v_ref + j, 40)
-                        / scalefactor);
-        else
-            ff_log_missing_feature(NULL, "Zero energy for gain control", 1);
+        scalefactor = compute_gain_ctrl(v_ref + j, v_in + j, 40);
         for(len=j+40; j<len; j++)
             v_out[j] = scalefactor * v_in[j];
     }
@@ -581,7 +597,7 @@ static void apply_pitch_filters(QCELPContext *q, float *cdn_vector)
  * @param lspf line spectral pair frequencies
  * @param lpc linear predictive coding coefficients
  *
- * @note: bandwith_expansion_coeff could be precalculated into a table
+ * @note: bandwidth_expansion_coeff could be precalculated into a table
  *        but it seems to be slower on x86
  *
  * TIA/EIA/IS-733 2.4.3.3.5
@@ -589,7 +605,7 @@ static void apply_pitch_filters(QCELPContext *q, float *cdn_vector)
 static void lspf2lpc(const float *lspf, float *lpc)
 {
     double lsf[10];
-    double bandwith_expansion_coeff = QCELP_BANDWITH_EXPANSION_COEFF;
+    double bandwidth_expansion_coeff = QCELP_BANDWIDTH_EXPANSION_COEFF;
     int   i;
 
     for (i=0; i<10; i++)
@@ -599,8 +615,8 @@ static void lspf2lpc(const float *lspf, float *lpc)
 
     for (i=0; i<10; i++)
     {
-        lpc[i] *= bandwith_expansion_coeff;
-        bandwith_expansion_coeff *= QCELP_BANDWITH_EXPANSION_COEFF;
+        lpc[i] *= bandwidth_expansion_coeff;
+        bandwidth_expansion_coeff *= QCELP_BANDWIDTH_EXPANSION_COEFF;
     }
 }
 
@@ -713,8 +729,10 @@ static void warn_insufficient_frame_quality(AVCodecContext *avctx,
 }
 
 static int qcelp_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
-                              const uint8_t *buf, int buf_size)
+                              AVPacket *avpkt)
 {
+    const uint8_t *buf = avpkt->data;
+    int buf_size = avpkt->size;
     QCELPContext *q = avctx->priv_data;
     float *outbuffer = data;
     int   i;