summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Marc Valin <jmvalin@jmvalin.ca>2016-11-23 01:57:22 -0500
committerJean-Marc Valin <jmvalin@jmvalin.ca>2016-11-23 01:57:22 -0500
commitab9d01ee1d886a584957aaaf4b4d43ae5180e0ce (patch)
tree98587ca8115e3441bf482ff2c11197d12ce516c4
parent174ee5a08f03021bbbfcc5bb190db0c255f06db0 (diff)
downloadopus-ab9d01ee1d886a584957aaaf4b4d43ae5180e0ce.tar.gz
Remove global downsampling state
-rw-r--r--src/analysis.c6
-rw-r--r--src/analysis.h1
-rw-r--r--src/opus_encoder.c5
-rw-r--r--src/opus_private.h6
4 files changed, 10 insertions, 8 deletions
diff --git a/src/analysis.c b/src/analysis.c
index 350b122f..262b76f6 100644
--- a/src/analysis.c
+++ b/src/analysis.c
@@ -244,7 +244,8 @@ static void tonality_analysis(TonalityAnalysisState *tonal, const CELTMode *celt
kfft = celt_mode->mdct.kfft[0];
if (tonal->count==0)
tonal->mem_fill = 240;
- tonal->hp_ener_accum += downmix(x, &tonal->inmem[tonal->mem_fill], IMIN(len, ANALYSIS_BUF_SIZE-tonal->mem_fill), offset, c1, c2, C);
+ tonal->hp_ener_accum += downmix(x, &tonal->inmem[tonal->mem_fill], tonal->downmix_state,
+ IMIN(len, ANALYSIS_BUF_SIZE-tonal->mem_fill), offset, c1, c2, C);
if (tonal->mem_fill+len < ANALYSIS_BUF_SIZE)
{
tonal->mem_fill += len;
@@ -271,7 +272,8 @@ static void tonality_analysis(TonalityAnalysisState *tonal, const CELTMode *celt
}
OPUS_MOVE(tonal->inmem, tonal->inmem+ANALYSIS_BUF_SIZE-240, 240);
remaining = len - (ANALYSIS_BUF_SIZE-tonal->mem_fill);
- tonal->hp_ener_accum = downmix(x, &tonal->inmem[240], remaining, offset+ANALYSIS_BUF_SIZE-tonal->mem_fill, c1, c2, C);
+ tonal->hp_ener_accum = downmix(x, &tonal->inmem[240], tonal->downmix_state,
+ remaining, offset+ANALYSIS_BUF_SIZE-tonal->mem_fill, c1, c2, C);
tonal->mem_fill = 240 + remaining;
opus_fft(kfft, in, out, tonal->arch);
#ifndef FIXED_POINT
diff --git a/src/analysis.h b/src/analysis.h
index 92e613b9..1ad6c53a 100644
--- a/src/analysis.h
+++ b/src/analysis.h
@@ -79,6 +79,7 @@ typedef struct {
int read_pos;
int read_subframe;
float hp_ener_accum;
+ opus_val32 downmix_state[3];
AnalysisInfo info[DETECT_SIZE];
} TonalityAnalysisState;
diff --git a/src/opus_encoder.c b/src/opus_encoder.c
index df9c89f9..03714f01 100644
--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -626,8 +626,7 @@ static opus_val32 silk_resampler_down2_hp(
return hp_ener;
}
-opus_val32 S[3];
-opus_val32 downmix_float(const void *_x, opus_val32 *sub, int subframe, int offset, int c1, int c2, int C)
+opus_val32 downmix_float(const void *_x, opus_val32 *sub, opus_val32 S[3], int subframe, int offset, int c1, int c2, int C)
{
VARDECL(opus_val32, tmp);
const float *x;
@@ -670,7 +669,7 @@ opus_val32 downmix_float(const void *_x, opus_val32 *sub, int subframe, int offs
}
#endif
-opus_val32 downmix_int(const void *_x, opus_val32 *sub, int subframe, int offset, int c1, int c2, int C)
+opus_val32 downmix_int(const void *_x, opus_val32 *sub, opus_val32 S[3], int subframe, int offset, int c1, int c2, int C)
{
VARDECL(opus_val32, tmp);
const opus_int16 *x;
diff --git a/src/opus_private.h b/src/opus_private.h
index 82b206f6..25104de1 100644
--- a/src/opus_private.h
+++ b/src/opus_private.h
@@ -84,9 +84,9 @@ int get_mono_channel(const ChannelLayout *layout, int stream_id, int prev);
#define OPUS_SET_FORCE_MODE_REQUEST 11002
#define OPUS_SET_FORCE_MODE(x) OPUS_SET_FORCE_MODE_REQUEST, __opus_check_int(x)
-typedef opus_val32 (*downmix_func)(const void *, opus_val32 *, int, int, int, int, int);
-opus_val32 downmix_float(const void *_x, opus_val32 *sub, int subframe, int offset, int c1, int c2, int C);
-opus_val32 downmix_int(const void *_x, opus_val32 *sub, int subframe, int offset, int c1, int c2, int C);
+typedef opus_val32 (*downmix_func)(const void *, opus_val32 *, opus_val32[3], int, int, int, int, int);
+opus_val32 downmix_float(const void *_x, opus_val32 *sub, opus_val32 S[3], int subframe, int offset, int c1, int c2, int C);
+opus_val32 downmix_int(const void *_x, opus_val32 *sub, opus_val32 S[3], int subframe, int offset, int c1, int c2, int C);
int encode_size(int size, unsigned char *data);