#include "fft.h"
#include "lpc.h"
#include "kbdwin.h"
-#include "sinewin.h"
+#include "sinewin_fixed_tablegen.h"
#include "aac.h"
#include "aactab.h"
#include <math.h>
#include <string.h>
+DECLARE_ALIGNED(32, static int, AAC_RENAME2(aac_kbd_long_1024))[1024];
+DECLARE_ALIGNED(32, static int, AAC_RENAME2(aac_kbd_short_128))[128];
+
static av_always_inline void reset_predict_state(PredictorState *ps)
{
ps->r0.mant = 0;
for (i=0; i<len; i++) {
coef = coefs[i];
if (coef < 0)
- coef = -(int)ff_cbrt_tab_fixed[-coef];
+ coef = -(int)ff_cbrt_tab_fixed[(-coef) & 8191];
else
- coef = (int)ff_cbrt_tab_fixed[coef];
+ coef = (int)ff_cbrt_tab_fixed[ coef & 8191];
coefs[i] = coef;
}
}
-static void subband_scale(int *dst, int *src, int scale, int offset, int len)
+static void subband_scale(int *dst, int *src, int scale, int offset, int len, void *log_context)
{
int ssign = scale < 0 ? -1 : 1;
int s = FFABS(scale);
dst[i] = out * (unsigned)ssign;
}
} else {
- av_log(NULL, AV_LOG_ERROR, "Overflow in subband_scale()\n");
+ av_log(log_context, AV_LOG_ERROR, "Overflow in subband_scale()\n");
}
}
static void noise_scale(int *coefs, int scale, int band_energy, int len)
{
- int ssign = scale < 0 ? -1 : 1;
- int s = FFABS(scale);
+ int s = -scale;
unsigned int round;
int i, out, c = exp2tab[s & 3];
int nlz = 0;
+ av_assert0(s >= 0);
while (band_energy > 0x7fff) {
band_energy >>= 1;
nlz++;
round = s ? 1 << (s-1) : 0;
for (i=0; i<len; i++) {
out = (int)(((int64_t)coefs[i] * c) >> 32);
- coefs[i] = ((int)(out+round) >> s) * ssign;
+ coefs[i] = -((int)(out+round) >> s);
}
}
else {
s = s + 32;
- round = 1 << (s-1);
- for (i=0; i<len; i++) {
- out = (int)((int64_t)((int64_t)coefs[i] * c + round) >> s);
- coefs[i] = out * ssign;
+ if (s > 0) {
+ round = 1 << (s-1);
+ for (i=0; i<len; i++) {
+ out = (int)((int64_t)((int64_t)coefs[i] * c + round) >> s);
+ coefs[i] = -out;
+ }
+ } else {
+ for (i=0; i<len; i++)
+ coefs[i] = -(int64_t)coefs[i] * c * (1 << -s);
}
}
}
AV_SAMPLE_FMT_S32P, AV_SAMPLE_FMT_NONE
},
.capabilities = AV_CODEC_CAP_CHANNEL_CONF | AV_CODEC_CAP_DR1,
- .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
+ .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP,
.channel_layouts = aac_channel_layout,
.profiles = NULL_IF_CONFIG_SMALL(ff_aac_profiles),
.flush = flush,