- int i, k;
- const int chans = avctx->channels;
- const float * lwindow = sce->ics.use_kb_window[0] ? ff_aac_kbd_long_1024 : ff_sine_1024;
- const float * swindow = sce->ics.use_kb_window[0] ? ff_aac_kbd_short_128 : ff_sine_128;
- const float * pwindow = sce->ics.use_kb_window[1] ? ff_aac_kbd_short_128 : ff_sine_128;
- float *output = sce->ret;
-
- if (sce->ics.window_sequence[0] != EIGHT_SHORT_SEQUENCE) {
- memcpy(output, sce->saved, sizeof(float)*1024);
- if (sce->ics.window_sequence[0] == LONG_STOP_SEQUENCE) {
- memset(output, 0, sizeof(output[0]) * 448);
- for (i = 448; i < 576; i++)
- output[i] = sce->saved[i] * pwindow[i - 448];
- for (i = 576; i < 704; i++)
- output[i] = sce->saved[i];
- }
- if (sce->ics.window_sequence[0] != LONG_START_SEQUENCE) {
- for (i = 0; i < 1024; i++) {
- output[i+1024] = audio[i * chans] * lwindow[1024 - i - 1];
- sce->saved[i] = audio[i * chans] * lwindow[i];
- }
- } else {
- for (i = 0; i < 448; i++)
- output[i+1024] = audio[i * chans];
- for (; i < 576; i++)
- output[i+1024] = audio[i * chans] * swindow[576 - i - 1];
- memset(output+1024+576, 0, sizeof(output[0]) * 448);
- for (i = 0; i < 1024; i++)
- sce->saved[i] = audio[i * chans];
- }
- s->mdct1024.mdct_calc(&s->mdct1024, sce->coeffs, output);
- } else {
- for (k = 0; k < 1024; k += 128) {
- for (i = 448 + k; i < 448 + k + 256; i++)
- output[i - 448 - k] = (i < 1024)
- ? sce->saved[i]
- : audio[(i-1024)*chans];
- s->dsp.vector_fmul (output, output, k ? swindow : pwindow, 128);
- s->dsp.vector_fmul_reverse(output+128, output+128, swindow, 128);
- s->mdct128.mdct_calc(&s->mdct128, sce->coeffs + k, output);
- }
- for (i = 0; i < 1024; i++)
- sce->saved[i] = audio[i * chans];
+ const float *lwindow = sce->ics.use_kb_window[0] ? ff_aac_kbd_long_1024 : ff_sine_1024;
+ const float *pwindow = sce->ics.use_kb_window[1] ? ff_aac_kbd_long_1024 : ff_sine_1024;
+ float *out = sce->ret_buf;
+
+ fdsp->vector_fmul (out, audio, lwindow, 1024);
+ fdsp->vector_fmul_reverse(out + 1024, audio + 1024, pwindow, 1024);
+}
+
+WINDOW_FUNC(long_start)
+{
+ const float *lwindow = sce->ics.use_kb_window[1] ? ff_aac_kbd_long_1024 : ff_sine_1024;
+ const float *swindow = sce->ics.use_kb_window[0] ? ff_aac_kbd_short_128 : ff_sine_128;
+ float *out = sce->ret_buf;
+
+ fdsp->vector_fmul(out, audio, lwindow, 1024);
+ memcpy(out + 1024, audio + 1024, sizeof(out[0]) * 448);
+ fdsp->vector_fmul_reverse(out + 1024 + 448, audio + 1024 + 448, swindow, 128);
+ memset(out + 1024 + 576, 0, sizeof(out[0]) * 448);
+}
+
+WINDOW_FUNC(long_stop)
+{
+ const float *lwindow = sce->ics.use_kb_window[0] ? ff_aac_kbd_long_1024 : ff_sine_1024;
+ const float *swindow = sce->ics.use_kb_window[1] ? ff_aac_kbd_short_128 : ff_sine_128;
+ float *out = sce->ret_buf;
+
+ memset(out, 0, sizeof(out[0]) * 448);
+ fdsp->vector_fmul(out + 448, audio + 448, swindow, 128);
+ memcpy(out + 576, audio + 576, sizeof(out[0]) * 448);
+ fdsp->vector_fmul_reverse(out + 1024, audio + 1024, lwindow, 1024);
+}
+
+WINDOW_FUNC(eight_short)
+{
+ const float *swindow = sce->ics.use_kb_window[0] ? ff_aac_kbd_short_128 : ff_sine_128;
+ const float *pwindow = sce->ics.use_kb_window[1] ? ff_aac_kbd_short_128 : ff_sine_128;
+ const float *in = audio + 448;
+ float *out = sce->ret_buf;
+ int w;
+
+ for (w = 0; w < 8; w++) {
+ fdsp->vector_fmul (out, in, w ? pwindow : swindow, 128);
+ out += 128;
+ in += 128;
+ fdsp->vector_fmul_reverse(out, in, swindow, 128);
+ out += 128;