Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1207)

Unified Diff: webrtc/modules/audio_coding/codecs/isac/main/source/transform.c

Issue 1177993003: iSAC: Move global trig tables into the codec instance (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/audio_coding/codecs/isac/main/source/transform.c
diff --git a/webrtc/modules/audio_coding/codecs/isac/main/source/transform.c b/webrtc/modules/audio_coding/codecs/isac/main/source/transform.c
index ea6b579093a5b3877bb5785eb9adb073554f9eb1..8992897f454dbfca902d9c86be2263a34ac28716 100644
--- a/webrtc/modules/audio_coding/codecs/isac/main/source/transform.c
+++ b/webrtc/modules/audio_coding/codecs/isac/main/source/transform.c
@@ -14,41 +14,33 @@
#include "os_specific_inline.h"
#include <math.h>
-static double costab1[FRAMESAMPLES_HALF];
-static double sintab1[FRAMESAMPLES_HALF];
-static double costab2[FRAMESAMPLES_QUARTER];
-static double sintab2[FRAMESAMPLES_QUARTER];
-
-void WebRtcIsac_InitTransform()
-{
+void WebRtcIsac_InitTransform(TransformTables* tables) {
int k;
double fact, phase;
fact = PI / (FRAMESAMPLES_HALF);
phase = 0.0;
for (k = 0; k < FRAMESAMPLES_HALF; k++) {
- costab1[k] = cos(phase);
- sintab1[k] = sin(phase);
+ tables->costab1[k] = cos(phase);
+ tables->sintab1[k] = sin(phase);
phase += fact;
}
fact = PI * ((double) (FRAMESAMPLES_HALF - 1)) / ((double) FRAMESAMPLES_HALF);
phase = 0.5 * fact;
for (k = 0; k < FRAMESAMPLES_QUARTER; k++) {
- costab2[k] = cos(phase);
- sintab2[k] = sin(phase);
+ tables->costab2[k] = cos(phase);
+ tables->sintab2[k] = sin(phase);
phase += fact;
}
}
-
-void WebRtcIsac_Time2Spec(double *inre1,
- double *inre2,
- int16_t *outreQ7,
- int16_t *outimQ7,
- FFTstr *fftstr_obj)
-{
-
+void WebRtcIsac_Time2Spec(const TransformTables* tables,
+ double* inre1,
+ double* inre2,
+ int16_t* outreQ7,
+ int16_t* outimQ7,
+ FFTstr* fftstr_obj) {
int k;
int dims[1];
double tmp1r, tmp1i, xr, xi, yr, yi, fact;
@@ -61,8 +53,8 @@ void WebRtcIsac_Time2Spec(double *inre1,
/* Multiply with complex exponentials and combine into one complex vector */
fact = 0.5 / sqrt(FRAMESAMPLES_HALF);
for (k = 0; k < FRAMESAMPLES_HALF; k++) {
- tmp1r = costab1[k];
- tmp1i = sintab1[k];
+ tmp1r = tables->costab1[k];
the sun 2015/06/15 15:08:51 Premature pessimization? I hope the dereference i
kwiberg-webrtc 2015/06/15 21:57:28 I'm glad you asked. Given this small test program
the sun 2015/06/16 08:19:54 Hey, now I AM glad I asked. That was super informa
kwiberg-webrtc 2015/06/16 08:31:44 I know just enough assembly to decrypt what code l
the sun 2015/06/16 08:46:36 I was just thinking that it did auto-vectorization
+ tmp1i = tables->sintab1[k];
tmpre[k] = (inre1[k] * tmp1r + inre2[k] * tmp1i) * fact;
tmpim[k] = (inre2[k] * tmp1r - inre1[k] * tmp1i) * fact;
}
@@ -78,8 +70,8 @@ void WebRtcIsac_Time2Spec(double *inre1,
xi = tmpim[k] - tmpim[FRAMESAMPLES_HALF - 1 - k];
yr = tmpim[k] + tmpim[FRAMESAMPLES_HALF - 1 - k];
- tmp1r = costab2[k];
- tmp1i = sintab2[k];
+ tmp1r = tables->costab2[k];
+ tmp1i = tables->sintab2[k];
outreQ7[k] = (int16_t)WebRtcIsac_lrint((xr * tmp1r - xi * tmp1i) * 128.0);
outimQ7[k] = (int16_t)WebRtcIsac_lrint((xr * tmp1i + xi * tmp1r) * 128.0);
outreQ7[FRAMESAMPLES_HALF - 1 - k] = (int16_t)WebRtcIsac_lrint((-yr * tmp1i - yi * tmp1r) * 128.0);
@@ -87,10 +79,12 @@ void WebRtcIsac_Time2Spec(double *inre1,
}
}
-
-void WebRtcIsac_Spec2time(double *inre, double *inim, double *outre1, double *outre2, FFTstr *fftstr_obj)
-{
-
+void WebRtcIsac_Spec2time(const TransformTables* tables,
+ double* inre,
+ double* inim,
+ double* outre1,
+ double* outre2,
+ FFTstr* fftstr_obj) {
int k;
double tmp1r, tmp1i, xr, xi, yr, yi, fact;
@@ -100,8 +94,8 @@ void WebRtcIsac_Spec2time(double *inre, double *inim, double *outre1, double *ou
for (k = 0; k < FRAMESAMPLES_QUARTER; k++) {
/* Move zero in time to beginning of frames */
- tmp1r = costab2[k];
- tmp1i = sintab2[k];
+ tmp1r = tables->costab2[k];
+ tmp1i = tables->sintab2[k];
xr = inre[k] * tmp1r + inim[k] * tmp1i;
xi = inim[k] * tmp1r - inre[k] * tmp1i;
yr = -inim[FRAMESAMPLES_HALF - 1 - k] * tmp1r - inre[FRAMESAMPLES_HALF - 1 - k] * tmp1i;
@@ -122,8 +116,8 @@ void WebRtcIsac_Spec2time(double *inre, double *inim, double *outre1, double *ou
/* Demodulate and separate */
fact = sqrt(FRAMESAMPLES_HALF);
for (k = 0; k < FRAMESAMPLES_HALF; k++) {
- tmp1r = costab1[k];
- tmp1i = sintab1[k];
+ tmp1r = tables->costab1[k];
+ tmp1i = tables->sintab1[k];
xr = (outre1[k] * tmp1r - outre2[k] * tmp1i) * fact;
outre2[k] = (outre2[k] * tmp1r + outre1[k] * tmp1i) * fact;
outre1[k] = xr;

Powered by Google App Engine
This is Rietveld 408576698