[FFmpeg-cvslog] r17916 - in trunk/libavcodec: Makefile acelp_vectors.c acelp_vectors.h qcelpdec.c

reynaldo subversion
Mon Mar 9 22:55:25 CET 2009


Author: reynaldo
Date: Mon Mar  9 22:55:24 2009
New Revision: 17916

Log:
Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
patchset. Idea is to share this common code between the AMR and QCELP
decoders.

Modified:
   trunk/libavcodec/Makefile
   trunk/libavcodec/acelp_vectors.c
   trunk/libavcodec/acelp_vectors.h
   trunk/libavcodec/qcelpdec.c

Modified: trunk/libavcodec/Makefile
==============================================================================
--- trunk/libavcodec/Makefile	Mon Mar  9 22:53:00 2009	(r17915)
+++ trunk/libavcodec/Makefile	Mon Mar  9 22:55:24 2009	(r17916)
@@ -165,7 +165,7 @@ OBJS-$(CONFIG_PNG_DECODER)             +
 OBJS-$(CONFIG_PNG_ENCODER)             += png.o pngenc.o
 OBJS-$(CONFIG_PPM_ENCODER)             += pnmenc.o pnm.o
 OBJS-$(CONFIG_PTX_DECODER)             += ptx.o
-OBJS-$(CONFIG_QCELP_DECODER)           += qcelpdec.o qcelp_lsp.o celp_math.o celp_filters.o
+OBJS-$(CONFIG_QCELP_DECODER)           += qcelpdec.o qcelp_lsp.o celp_math.o celp_filters.o acelp_vectors.o
 OBJS-$(CONFIG_QDM2_DECODER)            += qdm2.o mpegaudiodec.o mpegaudiodecheader.o mpegaudio.o mpegaudiodata.o
 OBJS-$(CONFIG_QDRAW_DECODER)           += qdrw.o
 OBJS-$(CONFIG_QPEG_DECODER)            += qpeg.o

Modified: trunk/libavcodec/acelp_vectors.c
==============================================================================
--- trunk/libavcodec/acelp_vectors.c	Mon Mar  9 22:53:00 2009	(r17915)
+++ trunk/libavcodec/acelp_vectors.c	Mon Mar  9 22:55:24 2009	(r17916)
@@ -145,3 +145,13 @@ void ff_acelp_weighted_vector_sum(
                  in_b[i] * weight_coeff_b +
                  rounder) >> shift);
 }
+
+void ff_weighted_vector_sumf(float *out, const float *in_a, const float *in_b,
+                             float weight_coeff_a, float weight_coeff_b, int length)
+{
+    int i;
+
+    for(i=0; i<length; i++)
+        out[i] = weight_coeff_a * in_a[i]
+               + weight_coeff_b * in_b[i];
+}

Modified: trunk/libavcodec/acelp_vectors.h
==============================================================================
--- trunk/libavcodec/acelp_vectors.h	Mon Mar  9 22:53:00 2009	(r17915)
+++ trunk/libavcodec/acelp_vectors.h	Mon Mar  9 22:55:24 2009	(r17916)
@@ -150,4 +150,18 @@ void ff_acelp_weighted_vector_sum(
         int shift,
         int length);
 
+/**
+ * float implementation of weighted sum of two vectors.
+ * @param out [out] result of addition
+ * @param in_a first vector
+ * @param in_b second vector
+ * @param weight_coeff_a first vector weight coefficient
+ * @param weight_coeff_a second vector weight coefficient
+ * @param length vectors length
+ *
+ * @note It is safe to pass the same buffer for out and in_a or in_b.
+ */
+void ff_weighted_vector_sumf(float *out, const float *in_a, const float *in_b,
+                             float weight_coeff_a, float weight_coeff_b, int length);
+
 #endif /* AVCODEC_ACELP_VECTORS_H */

Modified: trunk/libavcodec/qcelpdec.c
==============================================================================
--- trunk/libavcodec/qcelpdec.c	Mon Mar  9 22:53:00 2009	(r17915)
+++ trunk/libavcodec/qcelpdec.c	Mon Mar  9 22:55:24 2009	(r17916)
@@ -37,6 +37,7 @@
 
 #include "celp_math.h"
 #include "celp_filters.h"
+#include "acelp_vectors.h"
 
 #undef NDEBUG
 #include <assert.h>
@@ -81,17 +82,6 @@ typedef struct
  */
 void ff_celp_lspf2lpc(const double *lspf, float *lpc);
 
-static void weighted_vector_sumf(float *out, const float *in_a,
-                                 const float *in_b, float weight_coeff_a,
-                                 float weight_coeff_b, int length)
-{
-    int i;
-
-    for(i=0; i<length; i++)
-        out[i] = weight_coeff_a * in_a[i]
-               + weight_coeff_b * in_b[i];
-}
-
 /**
  * Initialize the speech codec according to the specification.
  *
@@ -174,7 +164,7 @@ static int decode_lspf(QCELPContext *q, 
             lspf[i-1] = FFMIN(lspf[i-1], (lspf[i] - QCELP_LSP_SPREAD_FACTOR));
 
         // Low-pass filter the LSP frequencies.
-        weighted_vector_sumf(lspf, lspf, q->prev_lspf, smooth, 1.0-smooth, 10);
+        ff_weighted_vector_sumf(lspf, lspf, q->prev_lspf, smooth, 1.0-smooth, 10);
     }else
     {
         q->octave_count = 0;
@@ -640,7 +630,7 @@ void interpolate_lpc(QCELPContext *q, co
 
     if(weight != 1.0)
     {
-        weighted_vector_sumf(interpolated_lspf, curr_lspf, q->prev_lspf,
+        ff_weighted_vector_sumf(interpolated_lspf, curr_lspf, q->prev_lspf,
                              weight, 1.0 - weight, 10);
         lspf2lpc(interpolated_lspf, lpc);
     }else if(q->bitrate >= RATE_QUARTER ||




More information about the ffmpeg-cvslog mailing list