44 const enum BandType *band_type = sce->band_type;
45 const int *band_type_run_end = sce->band_type_run_end;
46 const int *sfo = sce->sfo;
52 int run_end = band_type_run_end[idx];
53 switch (band_type[idx]) {
55 for (;
i < run_end;
i++, idx++)
60 for (;
i < run_end;
i++, idx++) {
62 sf[idx] = 100 - sfo[idx];
69 for (;
i < run_end;
i++, idx++) {
71 sf[idx] = -(100 + sfo[idx]);
78 for (;
i < run_end;
i++, idx++) {
97 INTFLOAT *ch0 = cpe->ch[0].AAC_RENAME(coeffs);
98 INTFLOAT *ch1 = cpe->ch[1].AAC_RENAME(coeffs);
99 int g,
i, group, idx = 0;
103 if (cpe->ms_mask[idx] &&
104 cpe->ch[0].band_type[idx] <
NOISE_BT &&
105 cpe->ch[1].band_type[idx] <
NOISE_BT) {
107 for (group = 0; group < ics->
group_len[
g]; group++) {
108 ac->fdsp->butterflies_fixed(ch0 + group * 128 +
offsets[
i],
112 for (group = 0; group < ics->
group_len[
g]; group++) {
113 ac->fdsp->butterflies_float(ch0 + group * 128 +
offsets[
i],
137 INTFLOAT *coef0 = cpe->ch[0].AAC_RENAME(coeffs), *coef1 = cpe->ch[1].AAC_RENAME(coeffs);
139 int g, group,
i, idx = 0;
147 for (;
i < bt_run_end;
i++, idx++) {
150 c *= 1 - 2 * cpe->ms_mask[idx];
151 scale =
c * sce1->AAC_RENAME(sf)[idx];
152 for (group = 0; group < ics->
group_len[
g]; group++)
160 ac->fdsp->vector_fmul_scalar(coef1 + group * 128 +
offsets[
i],
168 idx += bt_run_end -
i;
186 const int mmm =
FFMIN(ics->tns_max_bands, ics->max_sfb);
188 int bottom, top, order, start, end,
size, inc;
197 for (
w = 0;
w < ics->num_windows;
w++) {
198 bottom = ics->num_swb;
201 bottom =
FFMAX(0, top - tns->length[
w][
filt]);
202 order = tns->order[
w][
filt];
209 start = ics->swb_offset[
FFMIN(bottom, mmm)];
210 end = ics->swb_offset[
FFMIN( top, mmm)];
211 if ((
size = end - start) <= 0)
213 if (tns->direction[
w][
filt]) {
223 for (m = 0; m <
size; m++, start += inc)
224 for (
i = 1;
i <=
FFMIN(m, order);
i++)
228 for (m = 0; m <
size; m++, start += inc) {
229 tmp[0] = coef[start];
230 for (
i = 1;
i <=
FFMIN(m, order);
i++)
232 for (
i = order;
i > 0;
i--)
254 ac->fdsp->vector_fmul(in, in, lwindow_prev, 1024);
256 memset(in, 0, 448 *
sizeof(*in));
257 ac->fdsp->vector_fmul(in + 448, in + 448, swindow_prev, 128);
260 ac->fdsp->vector_fmul_reverse(in + 1024, in + 1024, lwindow, 1024);
262 ac->fdsp->vector_fmul_reverse(in + 1024 + 448, in + 1024 + 448, swindow, 128);
263 memset(in + 1024 + 576, 0, 448 *
sizeof(*in));
265 ac->mdct_ltp_fn(ac->mdct_ltp,
out, in,
sizeof(
INTFLOAT));
274 const uint16_t *
offsets = sce->ics.swb_offset;
279 INTFLOAT *predFreq = ac->AAC_RENAME(buf_mdct);
280 int16_t num_samples = 2048;
283 num_samples = ltp->
lag + 1024;
284 for (
i = 0;
i < num_samples;
i++)
285 predTime[
i] =
AAC_MUL30(sce->AAC_RENAME(ltp_state)[
i + 2048 - ltp->
lag], ltp->AAC_RENAME(coef));
286 memset(&predTime[
i], 0, (2048 -
i) *
sizeof(*predTime));
290 if (sce->tns.present)
296 sce->AAC_RENAME(coeffs)[
i] += (
UINTFLOAT)predFreq[
i];
306 INTFLOAT *saved = sce->AAC_RENAME(saved);
307 INTFLOAT *saved_ltp = sce->AAC_RENAME(coeffs);
313 memcpy(saved_ltp, saved, 512 *
sizeof(*saved_ltp));
314 memset(saved_ltp + 576, 0, 448 *
sizeof(*saved_ltp));
315 ac->fdsp->vector_fmul_reverse(saved_ltp + 448, ac->AAC_RENAME(buf_mdct) + 960, &swindow[64], 64);
317 for (
i = 0;
i < 64;
i++)
318 saved_ltp[
i + 512] =
AAC_MUL31(ac->AAC_RENAME(buf_mdct)[1023 -
i], swindow[63 -
i]);
320 memcpy(saved_ltp, ac->AAC_RENAME(buf_mdct) + 512, 448 *
sizeof(*saved_ltp));
321 memset(saved_ltp + 576, 0, 448 *
sizeof(*saved_ltp));
322 ac->fdsp->vector_fmul_reverse(saved_ltp + 448, ac->AAC_RENAME(buf_mdct) + 960, &swindow[64], 64);
324 for (
i = 0;
i < 64;
i++)
325 saved_ltp[
i + 512] =
AAC_MUL31(ac->AAC_RENAME(buf_mdct)[1023 -
i], swindow[63 -
i]);
327 ac->fdsp->vector_fmul_reverse(saved_ltp, ac->AAC_RENAME(buf_mdct) + 512, &lwindow[512], 512);
329 for (
i = 0;
i < 512;
i++)
330 saved_ltp[
i + 512] =
AAC_MUL31(ac->AAC_RENAME(buf_mdct)[1023 -
i], lwindow[511 -
i]);
333 memcpy(sce->AAC_RENAME(ltp_state), sce->AAC_RENAME(ltp_state)+1024,
334 1024 *
sizeof(*sce->AAC_RENAME(ltp_state)));
335 memcpy(sce->AAC_RENAME(ltp_state) + 1024, sce->AAC_RENAME(
output),
336 1024 *
sizeof(*sce->AAC_RENAME(ltp_state)));
337 memcpy(sce->AAC_RENAME(ltp_state) + 2048, saved_ltp,
338 1024 *
sizeof(*sce->AAC_RENAME(ltp_state)));
347 INTFLOAT *in = sce->AAC_RENAME(coeffs);
349 INTFLOAT *saved = sce->AAC_RENAME(saved);
353 INTFLOAT *buf = ac->AAC_RENAME(buf_mdct);
359 for (
i = 0;
i < 1024;
i += 128)
360 ac->mdct128_fn(ac->mdct128, buf +
i, in +
i,
sizeof(
INTFLOAT));
362 ac->mdct1024_fn(ac->mdct1024, buf, in,
sizeof(
INTFLOAT));
373 ac->fdsp->vector_fmul_window(
out, saved, buf, lwindow_prev, 512);
375 memcpy(
out, saved, 448 *
sizeof(*
out));
378 ac->fdsp->vector_fmul_window(
out + 448 + 0*128, saved + 448, buf + 0*128, swindow_prev, 64);
379 ac->fdsp->vector_fmul_window(
out + 448 + 1*128, buf + 0*128 + 64, buf + 1*128, swindow, 64);
380 ac->fdsp->vector_fmul_window(
out + 448 + 2*128, buf + 1*128 + 64, buf + 2*128, swindow, 64);
381 ac->fdsp->vector_fmul_window(
out + 448 + 3*128, buf + 2*128 + 64, buf + 3*128, swindow, 64);
382 ac->fdsp->vector_fmul_window(
temp, buf + 3*128 + 64, buf + 4*128, swindow, 64);
383 memcpy(
out + 448 + 4*128,
temp, 64 *
sizeof(*
out));
385 ac->fdsp->vector_fmul_window(
out + 448, saved + 448, buf, swindow_prev, 64);
386 memcpy(
out + 576, buf + 64, 448 *
sizeof(*
out));
392 memcpy( saved,
temp + 64, 64 *
sizeof(*saved));
393 ac->fdsp->vector_fmul_window(saved + 64, buf + 4*128 + 64, buf + 5*128, swindow, 64);
394 ac->fdsp->vector_fmul_window(saved + 192, buf + 5*128 + 64, buf + 6*128, swindow, 64);
395 ac->fdsp->vector_fmul_window(saved + 320, buf + 6*128 + 64, buf + 7*128, swindow, 64);
396 memcpy( saved + 448, buf + 7*128 + 64, 64 *
sizeof(*saved));
398 memcpy( saved, buf + 512, 448 *
sizeof(*saved));
399 memcpy( saved + 448, buf + 7*128 + 64, 64 *
sizeof(*saved));
401 memcpy( saved, buf + 512, 512 *
sizeof(*saved));
411 INTFLOAT *in = sce->AAC_RENAME(coeffs);
413 INTFLOAT *saved = sce->AAC_RENAME(saved);
417 INTFLOAT *buf = ac->AAC_RENAME(buf_mdct);
423 for (
i = 0;
i < 8;
i++)
424 ac->mdct120_fn(ac->mdct120, buf +
i * 120, in +
i * 128,
sizeof(
INTFLOAT));
426 ac->mdct960_fn(ac->mdct960, buf, in,
sizeof(
INTFLOAT));
438 ac->fdsp->vector_fmul_window(
out, saved, buf, lwindow_prev, 480);
440 memcpy(
out, saved, 420 *
sizeof(*
out));
443 ac->fdsp->vector_fmul_window(
out + 420 + 0*120, saved + 420, buf + 0*120, swindow_prev, 60);
444 ac->fdsp->vector_fmul_window(
out + 420 + 1*120, buf + 0*120 + 60, buf + 1*120, swindow, 60);
445 ac->fdsp->vector_fmul_window(
out + 420 + 2*120, buf + 1*120 + 60, buf + 2*120, swindow, 60);
446 ac->fdsp->vector_fmul_window(
out + 420 + 3*120, buf + 2*120 + 60, buf + 3*120, swindow, 60);
447 ac->fdsp->vector_fmul_window(
temp, buf + 3*120 + 60, buf + 4*120, swindow, 60);
448 memcpy(
out + 420 + 4*120,
temp, 60 *
sizeof(*
out));
450 ac->fdsp->vector_fmul_window(
out + 420, saved + 420, buf, swindow_prev, 60);
451 memcpy(
out + 540, buf + 60, 420 *
sizeof(*
out));
457 memcpy( saved,
temp + 60, 60 *
sizeof(*saved));
458 ac->fdsp->vector_fmul_window(saved + 60, buf + 4*120 + 60, buf + 5*120, swindow, 60);
459 ac->fdsp->vector_fmul_window(saved + 180, buf + 5*120 + 60, buf + 6*120, swindow, 60);
460 ac->fdsp->vector_fmul_window(saved + 300, buf + 6*120 + 60, buf + 7*120, swindow, 60);
461 memcpy( saved + 420, buf + 7*120 + 60, 60 *
sizeof(*saved));
463 memcpy( saved, buf + 480, 420 *
sizeof(*saved));
464 memcpy( saved + 420, buf + 7*120 + 60, 60 *
sizeof(*saved));
466 memcpy( saved, buf + 480, 480 *
sizeof(*saved));
472 INTFLOAT *in = sce->AAC_RENAME(coeffs);
474 INTFLOAT *saved = sce->AAC_RENAME(saved);
475 INTFLOAT *buf = ac->AAC_RENAME(buf_mdct);
478 ac->mdct512_fn(ac->mdct512, buf, in,
sizeof(
INTFLOAT));
483 memcpy(
out, saved, 192 *
sizeof(*
out));
484 ac->fdsp->vector_fmul_window(
out + 192, saved + 192, buf,
AAC_RENAME2(sine_128), 64);
485 memcpy(
out + 320, buf + 64, 192 *
sizeof(*
out));
487 ac->fdsp->vector_fmul_window(
out, saved, buf,
AAC_RENAME2(sine_512), 256);
491 memcpy(saved, buf + 256, 256 *
sizeof(*saved));
498 INTFLOAT *saved = sce->AAC_RENAME(saved);
499 INTFLOAT *buf = ac->AAC_RENAME(buf_mdct);
501 const int n = ac->oc[1].m4ac.frame_length_short ? 480 : 512;
502 const int n2 = n >> 1;
503 const int n4 = n >> 2;
512 for (
i = 0;
i < n2;
i+=2) {
514 temp = in[
i ]; in[
i ] = -in[n - 1 -
i]; in[n - 1 -
i] =
temp;
515 temp = -in[
i + 1]; in[
i + 1] = in[n - 2 -
i]; in[n - 2 -
i] =
temp;
519 ac->mdct480_fn(ac->mdct480, buf, in,
sizeof(
INTFLOAT));
521 ac->mdct512_fn(ac->mdct512, buf, in,
sizeof(
INTFLOAT));
523 for (
i = 0;
i < n;
i+=2) {
534 for (
i = n4;
i < n2;
i ++) {
540 for (
i = 0;
i < n2;
i ++) {
546 for (
i = 0;
i < n4;
i ++) {
553 memmove(saved + n, saved, 2 * n *
sizeof(*saved));
554 memcpy( saved, buf, n *
sizeof(*saved));
562 for (
int j = 0; j <
samples; j++){
563 che->ch[0].output_fixed[j] = (
int32_t)
av_clip64((int64_t)che->ch[0].output_fixed[j]*128,
564 INT32_MIN, INT32_MAX-0x8000)+0x8000;
566 che->ch[1].output_fixed[j] = (
int32_t)
av_clip64((int64_t)che->ch[1].output_fixed[j]*128,
567 INT32_MIN, INT32_MAX-0x8000)+0x8000;
593 if (!sce->ics.predictor_initialized) {
595 sce->ics.predictor_initialized = 1;
602 for (k = sce->ics.swb_offset[sfb];
603 k < sce->ics.swb_offset[sfb + 1];
605 predict(&sce->AAC_RENAME(predictor_state)[k],
606 &sce->AAC_RENAME(coeffs)[k],
607 sce->ics.predictor_present &&
608 sce->ics.prediction_used[sfb]);
611 if (sce->ics.predictor_reset_group)
613 sce->ics.predictor_reset_group);