[FFmpeg-soc] [soc]: r5437 - amr/amrnbdec.c

vitor subversion at mplayerhq.hu
Tue Nov 10 06:13:45 CET 2009


Author: vitor
Date: Tue Nov 10 06:13:45 2009
New Revision: 5437

Log:
Use ff_acelp_interpolatef(). Output is unchanged.

Modified:
   amr/amrnbdec.c

Modified: amr/amrnbdec.c
==============================================================================
--- amr/amrnbdec.c	Tue Nov 10 06:11:11 2009	(r5436)
+++ amr/amrnbdec.c	Tue Nov 10 06:13:45 2009	(r5437)
@@ -422,47 +422,6 @@ static void decode_pitch_lag(int *lag_in
     }
 }
 
-/**
- * Calculate the pitch vector by interpolating the past excitation at the pitch
- * lag using a b60 hamming windowed sinc function.
- *
- * @param pitch_vector buffer that must hold for the previous state of the filter in
- *                     pitch_vector[-PITCH_LAG_MAX-LP_FILTER_ORDER-1, -1]
- * @param lag_int             integer part of pitch lag
- * @param lag_frac            fractional part of pitch lag
- * @param mode                current frame mode
- */
-static void interp_pitch_vector(float *pitch_vector, int lag_int,
-                                int lag_frac, enum Mode mode)
-{
-    int n, i;
-    const float *b60_idx1, *b60_idx2;
-    float *exc_idx;
-
-    lag_frac *= -1;
-    if (mode != MODE_12k2) {
-        lag_frac <<= 1;
-    }
-
-    if (lag_frac < 0) {
-        lag_frac += 6;
-        lag_int++;
-    }
-
-    b60_idx1 = &b60[    lag_frac];
-    b60_idx2 = &b60[6 - lag_frac];
-    exc_idx  = &pitch_vector[-lag_int];
-
-    for (n = 0; n < AMR_SUBFRAME_SIZE; n++) {
-        pitch_vector[n] = 0.0;
-        for (i = 0; i < 10; i++)
-            pitch_vector[n] += b60_idx1[6 * i] * exc_idx[-i];
-        exc_idx++;
-        for (i = 0; i < 10; i++)
-            pitch_vector[n] += b60_idx2[6 * i] * exc_idx[ i];
-    }
-}
-
 static void decode_pitch_vector(AMRContext *p,
                                 const AMRNBSubframe *amr_subframe,
                                 const int subframe)
@@ -472,10 +431,18 @@ static void decode_pitch_vector(AMRConte
     decode_pitch_lag(&pitch_lag_int, &pitch_lag_frac, amr_subframe->p_lag,
                      p->pitch_lag_int, subframe, p->cur_frame_mode);
 
-    interp_pitch_vector(p->excitation, pitch_lag_int, pitch_lag_frac,
-                        p->cur_frame_mode);
-
     p->pitch_lag_int = pitch_lag_int; // store previous lag in a uint8_t
+
+    pitch_lag_frac <<= (p->cur_frame_mode != MODE_12k2);
+
+    pitch_lag_int += pitch_lag_frac > 0;
+
+    /* Calculate the pitch vector by interpolating the past excitation at the
+       pitch lag using a b60 hamming windowed sinc function.   */
+    ff_acelp_interpolatef(p->excitation, p->excitation + 1 - pitch_lag_int,
+                          b60, 6, pitch_lag_frac + 6 - 6*(pitch_lag_frac > 0),
+                          10, AMR_SUBFRAME_SIZE);
+
     memcpy(p->pitch_vector, p->excitation, AMR_SUBFRAME_SIZE * sizeof(float));
 }
 


More information about the FFmpeg-soc mailing list