ref: 2c3b5eededb78a38b58f141b87ed576efe242d8b
parent: 6b45974fbd3bd8a50f9532680cb89590e150a843
author: Jean-Marc Valin <[email protected]>
date: Fri Sep 21 10:33:01 EDT 2012
Saves channels*overlap*4 bytes off the state encoder These were only needed with RESYNTH defined
--- a/celt/celt.c
+++ b/celt/celt.c
@@ -193,9 +193,13 @@
#endif
celt_sig in_mem[1]; /* Size = channels*mode->overlap */
- /* celt_sig prefilter_mem[], Size = channels*COMBFILTER_PERIOD */
- /* celt_sig overlap_mem[], Size = channels*mode->overlap */
- /* opus_val16 oldEBands[], Size = 2*channels*mode->nbEBands */
+ /* celt_sig prefilter_mem[], Size = channels*COMBFILTER_MAXPERIOD */
+ /* opus_val16 oldBandE[], Size = channels*mode->nbEBands */
+ /* opus_val16 oldLogE[], Size = channels*mode->nbEBands */
+ /* opus_val16 oldLogE2[], Size = channels*mode->nbEBands */
+#ifdef RESYNTH
+ /* opus_val16 overlap_mem[], Size = channels*overlap */
+#endif
};
int celt_encoder_get_size(int channels)
@@ -207,9 +211,14 @@
OPUS_CUSTOM_NOSTATIC int opus_custom_encoder_get_size(const CELTMode *mode, int channels)
{
int size = sizeof(struct CELTEncoder)
- + (2*channels*mode->overlap-1)*sizeof(celt_sig)
- + channels*COMBFILTER_MAXPERIOD*sizeof(celt_sig)
- + 3*channels*mode->nbEBands*sizeof(opus_val16);
+ + (channels*mode->overlap-1)*sizeof(celt_sig) /* celt_sig in_mem[channels*mode->overlap]; */
+ + channels*COMBFILTER_MAXPERIOD*sizeof(celt_sig) /* celt_sig prefilter_mem[channels*COMBFILTER_MAXPERIOD]; */
+ + 3*channels*mode->nbEBands*sizeof(opus_val16); /* opus_val16 oldBandE[channels*mode->nbEBands]; */
+ /* opus_val16 oldLogE[channels*mode->nbEBands]; */
+ /* opus_val16 oldLogE2[channels*mode->nbEBands]; */
+#ifdef RESYNTH
+ size += channels*mode->overlap*sizeof(celt_sig); /* celt_sig overlap_mem[channels*mode->nbEBands]; */
+#endif
return size;
}
@@ -944,7 +953,7 @@
N = M*st->mode->shortMdctSize;
prefilter_mem = st->in_mem+CC*(st->overlap);
- oldBandE = (opus_val16*)(st->in_mem+CC*(2*st->overlap+COMBFILTER_MAXPERIOD));
+ oldBandE = (opus_val16*)(st->in_mem+CC*(st->overlap+COMBFILTER_MAXPERIOD));
oldLogE = oldBandE + CC*st->mode->nbEBands;
oldLogE2 = oldLogE + CC*st->mode->nbEBands;
@@ -1588,7 +1597,7 @@
if (CC==2)
out_mem[1] = st->syn_mem[1]+MAX_PERIOD;
- overlap_mem[0] = prefilter_mem+CC*COMBFILTER_MAXPERIOD;
+ overlap_mem[0] = (celt_sig*)(oldLogE2 + CC*st->mode->nbEBands);
if (CC==2)
overlap_mem[1] = overlap_mem[0] + st->overlap;
@@ -1843,7 +1852,7 @@
{
int i;
opus_val16 *oldBandE, *oldLogE, *oldLogE2;
- oldBandE = (opus_val16*)(st->in_mem+st->channels*(2*st->overlap+COMBFILTER_MAXPERIOD));
+ oldBandE = (opus_val16*)(st->in_mem+st->channels*(st->overlap+COMBFILTER_MAXPERIOD));
oldLogE = oldBandE + st->channels*st->mode->nbEBands;
oldLogE2 = oldLogE + st->channels*st->mode->nbEBands;
OPUS_CLEAR((char*)&st->ENCODER_RESET_START,