diff acelp_vectors.c @ 10493:5f2ced30548b libavcodec

Implement ff_scale_vector_to_given_sum_of_squares() to aid generic gain control routines. Changes for qcelp are included. Patch Collin McQuillan.
author reynaldo
date Wed, 04 Nov 2009 19:29:29 +0000
parents 9f35b262d3f0
children 8e91a3efdbd2
line wrap: on
line diff
--- a/acelp_vectors.c	Wed Nov 04 17:30:23 2009 +0000
+++ b/acelp_vectors.c	Wed Nov 04 19:29:29 2009 +0000
@@ -22,6 +22,7 @@
 
 #include <inttypes.h>
 #include "avcodec.h"
+#include "celp_math.h"
 #include "acelp_vectors.h"
 #include "celp_math.h"
 
@@ -177,3 +178,14 @@
 
     *gain_mem = mem;
 }
+
+void ff_scale_vector_to_given_sum_of_squares(float *out, const float *in,
+                                             float sum_of_squares, const int n)
+{
+    int i;
+    float scalefactor = ff_dot_productf(in, in, n);
+    if (scalefactor)
+        scalefactor = sqrt(sum_of_squares / scalefactor);
+    for (i = 0; i < n; i++)
+        out[i] = in[i] * scalefactor;
+}