| OLD | NEW |
| 1 /* | 1 /* |
| 2 * AAC Spectral Band Replication decoding functions | 2 * AAC Spectral Band Replication decoding functions |
| 3 * Copyright (c) 2008-2009 Robert Swain ( rob opendot cl ) | 3 * Copyright (c) 2008-2009 Robert Swain ( rob opendot cl ) |
| 4 * Copyright (c) 2009-2010 Alex Converse <alex.converse@gmail.com> | 4 * Copyright (c) 2009-2010 Alex Converse <alex.converse@gmail.com> |
| 5 * | 5 * |
| 6 * This file is part of FFmpeg. | 6 * This file is part of FFmpeg. |
| 7 * | 7 * |
| 8 * FFmpeg is free software; you can redistribute it and/or | 8 * FFmpeg is free software; you can redistribute it and/or |
| 9 * modify it under the terms of the GNU Lesser General Public | 9 * modify it under the terms of the GNU Lesser General Public |
| 10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 * @file | 24 * @file |
| 25 * AAC Spectral Band Replication decoding functions | 25 * AAC Spectral Band Replication decoding functions |
| 26 * @author Robert Swain ( rob opendot cl ) | 26 * @author Robert Swain ( rob opendot cl ) |
| 27 */ | 27 */ |
| 28 | 28 |
| 29 #include "aac.h" | 29 #include "aac.h" |
| 30 #include "sbr.h" | 30 #include "sbr.h" |
| 31 #include "aacsbr.h" | 31 #include "aacsbr.h" |
| 32 #include "aacsbrdata.h" | 32 #include "aacsbrdata.h" |
| 33 #include "fft.h" | 33 #include "fft.h" |
| 34 #include "ps.h" |
| 34 | 35 |
| 35 #include <stdint.h> | 36 #include <stdint.h> |
| 36 #include <float.h> | 37 #include <float.h> |
| 37 | 38 |
| 38 #define ENVELOPE_ADJUSTMENT_OFFSET 2 | 39 #define ENVELOPE_ADJUSTMENT_OFFSET 2 |
| 39 #define NOISE_FLOOR_OFFSET 6.0f | 40 #define NOISE_FLOOR_OFFSET 6.0f |
| 40 | 41 |
| 41 /** | 42 /** |
| 42 * SBR VLC tables | 43 * SBR VLC tables |
| 43 */ | 44 */ |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 SBR_INIT_VLC_STATIC(8, 592); | 114 SBR_INIT_VLC_STATIC(8, 592); |
| 114 SBR_INIT_VLC_STATIC(9, 512); | 115 SBR_INIT_VLC_STATIC(9, 512); |
| 115 | 116 |
| 116 for (n = 1; n < 320; n++) | 117 for (n = 1; n < 320; n++) |
| 117 sbr_qmf_window_us[320 + n] = sbr_qmf_window_us[320 - n]; | 118 sbr_qmf_window_us[320 + n] = sbr_qmf_window_us[320 - n]; |
| 118 sbr_qmf_window_us[384] = -sbr_qmf_window_us[384]; | 119 sbr_qmf_window_us[384] = -sbr_qmf_window_us[384]; |
| 119 sbr_qmf_window_us[512] = -sbr_qmf_window_us[512]; | 120 sbr_qmf_window_us[512] = -sbr_qmf_window_us[512]; |
| 120 | 121 |
| 121 for (n = 0; n < 320; n++) | 122 for (n = 0; n < 320; n++) |
| 122 sbr_qmf_window_ds[n] = sbr_qmf_window_us[2*n]; | 123 sbr_qmf_window_ds[n] = sbr_qmf_window_us[2*n]; |
| 124 |
| 125 ff_ps_init(); |
| 123 } | 126 } |
| 124 | 127 |
| 125 av_cold void ff_aac_sbr_ctx_init(SpectralBandReplication *sbr) | 128 av_cold void ff_aac_sbr_ctx_init(SpectralBandReplication *sbr) |
| 126 { | 129 { |
| 127 sbr->kx[0] = sbr->kx[1] = 32; //Typo in spec, kx' inits to 32 | 130 sbr->kx[0] = sbr->kx[1] = 32; //Typo in spec, kx' inits to 32 |
| 128 sbr->data[0].e_a[1] = sbr->data[1].e_a[1] = -1; | 131 sbr->data[0].e_a[1] = sbr->data[1].e_a[1] = -1; |
| 129 sbr->data[0].synthesis_filterbank_samples_offset = SBR_SYNTHESIS_BUF_SIZE -
(1280 - 128); | 132 sbr->data[0].synthesis_filterbank_samples_offset = SBR_SYNTHESIS_BUF_SIZE -
(1280 - 128); |
| 130 sbr->data[1].synthesis_filterbank_samples_offset = SBR_SYNTHESIS_BUF_SIZE -
(1280 - 128); | 133 sbr->data[1].synthesis_filterbank_samples_offset = SBR_SYNTHESIS_BUF_SIZE -
(1280 - 128); |
| 131 ff_mdct_init(&sbr->mdct, 7, 1, 1.0/64); | 134 ff_mdct_init(&sbr->mdct, 7, 1, 1.0/64); |
| 132 ff_mdct_init(&sbr->mdct_ana, 7, 1, -2.0); | 135 ff_mdct_init(&sbr->mdct_ana, 7, 1, -2.0); |
| 136 ff_ps_ctx_init(&sbr->ps); |
| 133 } | 137 } |
| 134 | 138 |
| 135 av_cold void ff_aac_sbr_ctx_close(SpectralBandReplication *sbr) | 139 av_cold void ff_aac_sbr_ctx_close(SpectralBandReplication *sbr) |
| 136 { | 140 { |
| 137 ff_mdct_end(&sbr->mdct); | 141 ff_mdct_end(&sbr->mdct); |
| 138 ff_mdct_end(&sbr->mdct_ana); | 142 ff_mdct_end(&sbr->mdct_ana); |
| 139 } | 143 } |
| 140 | 144 |
| 141 static int qsort_comparison_function_int16(const void *a, const void *b) | 145 static int qsort_comparison_function_int16(const void *a, const void *b) |
| 142 { | 146 { |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 368 } else if (sbr->sample_rate >= 48000) | 372 } else if (sbr->sample_rate >= 48000) |
| 369 max_qmf_subbands = 32; | 373 max_qmf_subbands = 32; |
| 370 | 374 |
| 371 if (sbr->k[2] - sbr->k[0] > max_qmf_subbands) { | 375 if (sbr->k[2] - sbr->k[0] > max_qmf_subbands) { |
| 372 av_log(ac->avctx, AV_LOG_ERROR, | 376 av_log(ac->avctx, AV_LOG_ERROR, |
| 373 "Invalid bitstream, too many QMF subbands: %d\n", sbr->k[2] - sbr
->k[0]); | 377 "Invalid bitstream, too many QMF subbands: %d\n", sbr->k[2] - sbr
->k[0]); |
| 374 return -1; | 378 return -1; |
| 375 } | 379 } |
| 376 | 380 |
| 377 if (!spectrum->bs_freq_scale) { | 381 if (!spectrum->bs_freq_scale) { |
| 378 unsigned int dk; | 382 int dk, k2diff; |
| 379 int k2diff; | |
| 380 | 383 |
| 381 dk = spectrum->bs_alter_scale + 1; | 384 dk = spectrum->bs_alter_scale + 1; |
| 382 sbr->n_master = ((sbr->k[2] - sbr->k[0] + (dk&2)) >> dk) << 1; | 385 sbr->n_master = ((sbr->k[2] - sbr->k[0] + (dk&2)) >> dk) << 1; |
| 383 if (check_n_master(ac->avctx, sbr->n_master, sbr->spectrum_params.bs_xov
er_band)) | 386 if (check_n_master(ac->avctx, sbr->n_master, sbr->spectrum_params.bs_xov
er_band)) |
| 384 return -1; | 387 return -1; |
| 385 | 388 |
| 386 for (k = 1; k <= sbr->n_master; k++) | 389 for (k = 1; k <= sbr->n_master; k++) |
| 387 sbr->f_master[k] = dk; | 390 sbr->f_master[k] = dk; |
| 388 | 391 |
| 389 k2diff = sbr->k[2] - sbr->k[0] - sbr->n_master * dk; | 392 k2diff = sbr->k[2] - sbr->k[0] - sbr->n_master * dk; |
| 390 if (k2diff < 0) { | 393 if (k2diff < 0) { |
| 391 sbr->f_master[1]--; | 394 sbr->f_master[1]--; |
| 392 sbr->f_master[2]-= (k2diff < 1); | 395 sbr->f_master[2]-= (k2diff < -1); |
| 393 } else if (k2diff) { | 396 } else if (k2diff) { |
| 394 sbr->f_master[sbr->n_master]++; | 397 sbr->f_master[sbr->n_master]++; |
| 395 } | 398 } |
| 396 | 399 |
| 397 sbr->f_master[0] = sbr->k[0]; | 400 sbr->f_master[0] = sbr->k[0]; |
| 398 for (k = 1; k <= sbr->n_master; k++) | 401 for (k = 1; k <= sbr->n_master; k++) |
| 399 sbr->f_master[k] += sbr->f_master[k - 1]; | 402 sbr->f_master[k] += sbr->f_master[k - 1]; |
| 400 | 403 |
| 401 } else { | 404 } else { |
| 402 int half_bands = 7 - spectrum->bs_freq_scale; // bs_freq_scale = {
1,2,3} | 405 int half_bands = 7 - spectrum->bs_freq_scale; // bs_freq_scale = {
1,2,3} |
| (...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 883 | 886 |
| 884 //assign 0th elements of noise_facs from last elements | 887 //assign 0th elements of noise_facs from last elements |
| 885 memcpy(ch_data->noise_facs[0], ch_data->noise_facs[ch_data->bs_num_noise], | 888 memcpy(ch_data->noise_facs[0], ch_data->noise_facs[ch_data->bs_num_noise], |
| 886 sizeof(ch_data->noise_facs[0])); | 889 sizeof(ch_data->noise_facs[0])); |
| 887 } | 890 } |
| 888 | 891 |
| 889 static void read_sbr_extension(AACContext *ac, SpectralBandReplication *sbr, | 892 static void read_sbr_extension(AACContext *ac, SpectralBandReplication *sbr, |
| 890 GetBitContext *gb, | 893 GetBitContext *gb, |
| 891 int bs_extension_id, int *num_bits_left) | 894 int bs_extension_id, int *num_bits_left) |
| 892 { | 895 { |
| 893 //TODO - implement ps_data for parametric stereo parsing | |
| 894 switch (bs_extension_id) { | 896 switch (bs_extension_id) { |
| 895 case EXTENSION_ID_PS: | 897 case EXTENSION_ID_PS: |
| 896 if (!ac->m4ac.ps) { | 898 if (!ac->m4ac.ps) { |
| 897 av_log(ac->avctx, AV_LOG_ERROR, "Parametric Stereo signaled to be no
t-present but was found in the bitstream.\n"); | 899 av_log(ac->avctx, AV_LOG_ERROR, "Parametric Stereo signaled to be no
t-present but was found in the bitstream.\n"); |
| 898 skip_bits_long(gb, *num_bits_left); // bs_fill_bits | 900 skip_bits_long(gb, *num_bits_left); // bs_fill_bits |
| 899 *num_bits_left = 0; | 901 *num_bits_left = 0; |
| 900 } else { | 902 } else { |
| 901 #if 0 | 903 #if 1 |
| 902 *num_bits_left -= ff_ps_data(gb, ps); | 904 *num_bits_left -= ff_ps_read_data(ac->avctx, gb, &sbr->ps, *num_bits
_left); |
| 903 #else | 905 #else |
| 904 av_log_missing_feature(ac->avctx, "Parametric Stereo is", 0); | 906 av_log_missing_feature(ac->avctx, "Parametric Stereo is", 0); |
| 905 skip_bits_long(gb, *num_bits_left); // bs_fill_bits | 907 skip_bits_long(gb, *num_bits_left); // bs_fill_bits |
| 906 *num_bits_left = 0; | 908 *num_bits_left = 0; |
| 907 #endif | 909 #endif |
| 908 } | 910 } |
| 909 break; | 911 break; |
| 910 default: | 912 default: |
| 911 av_log_missing_feature(ac->avctx, "Reserved SBR extensions are", 1); | 913 av_log_missing_feature(ac->avctx, "Reserved SBR extensions are", 1); |
| 912 skip_bits_long(gb, *num_bits_left); // bs_fill_bits | 914 skip_bits_long(gb, *num_bits_left); // bs_fill_bits |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1001 if (get_bits1(gb)) { // bs_extended_data | 1003 if (get_bits1(gb)) { // bs_extended_data |
| 1002 int num_bits_left = get_bits(gb, 4); // bs_extension_size | 1004 int num_bits_left = get_bits(gb, 4); // bs_extension_size |
| 1003 if (num_bits_left == 15) | 1005 if (num_bits_left == 15) |
| 1004 num_bits_left += get_bits(gb, 8); // bs_esc_count | 1006 num_bits_left += get_bits(gb, 8); // bs_esc_count |
| 1005 | 1007 |
| 1006 num_bits_left <<= 3; | 1008 num_bits_left <<= 3; |
| 1007 while (num_bits_left > 7) { | 1009 while (num_bits_left > 7) { |
| 1008 num_bits_left -= 2; | 1010 num_bits_left -= 2; |
| 1009 read_sbr_extension(ac, sbr, gb, get_bits(gb, 2), &num_bits_left); //
bs_extension_id | 1011 read_sbr_extension(ac, sbr, gb, get_bits(gb, 2), &num_bits_left); //
bs_extension_id |
| 1010 } | 1012 } |
| 1013 if (num_bits_left < 0) { |
| 1014 av_log(ac->avctx, AV_LOG_ERROR, "SBR Extension over read.\n"); |
| 1015 } |
| 1016 if (num_bits_left > 0) |
| 1017 skip_bits(gb, num_bits_left); |
| 1011 } | 1018 } |
| 1012 | 1019 |
| 1013 return get_bits_count(gb) - cnt; | 1020 return get_bits_count(gb) - cnt; |
| 1014 } | 1021 } |
| 1015 | 1022 |
| 1016 static void sbr_reset(AACContext *ac, SpectralBandReplication *sbr) | 1023 static void sbr_reset(AACContext *ac, SpectralBandReplication *sbr) |
| 1017 { | 1024 { |
| 1018 int err; | 1025 int err; |
| 1019 err = sbr_make_f_master(ac, sbr, &sbr->spectrum_params); | 1026 err = sbr_make_f_master(ac, sbr, &sbr->spectrum_params); |
| 1020 if (err >= 0) | 1027 if (err >= 0) |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1159 } | 1166 } |
| 1160 x += 32; | 1167 x += 32; |
| 1161 } | 1168 } |
| 1162 } | 1169 } |
| 1163 | 1170 |
| 1164 /** | 1171 /** |
| 1165 * Synthesis QMF Bank (14496-3 sp04 p206) and Downsampled Synthesis QMF Bank | 1172 * Synthesis QMF Bank (14496-3 sp04 p206) and Downsampled Synthesis QMF Bank |
| 1166 * (14496-3 sp04 p206) | 1173 * (14496-3 sp04 p206) |
| 1167 */ | 1174 */ |
| 1168 static void sbr_qmf_synthesis(DSPContext *dsp, FFTContext *mdct, | 1175 static void sbr_qmf_synthesis(DSPContext *dsp, FFTContext *mdct, |
| 1169 float *out, float X[2][32][64], | 1176 float *out, float X[2][38][64], |
| 1170 float mdct_buf[2][64], | 1177 float mdct_buf[2][64], |
| 1171 float *v0, int *v_off, const unsigned int div, | 1178 float *v0, int *v_off, const unsigned int div, |
| 1172 float bias, float scale) | 1179 float bias, float scale) |
| 1173 { | 1180 { |
| 1174 int i, n; | 1181 int i, n; |
| 1175 const float *sbr_qmf_window = div ? sbr_qmf_window_ds : sbr_qmf_window_us; | 1182 const float *sbr_qmf_window = div ? sbr_qmf_window_ds : sbr_qmf_window_us; |
| 1176 int scale_and_bias = scale != 1.0f || bias != 0.0f; | 1183 int scale_and_bias = scale != 1.0f || bias != 0.0f; |
| 1177 float *v; | 1184 float *v; |
| 1178 for (i = 0; i < 32; i++) { | 1185 for (i = 0; i < 32; i++) { |
| 1179 if (*v_off == 0) { | 1186 if (*v_off == 0) { |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1395 } | 1402 } |
| 1396 } | 1403 } |
| 1397 } | 1404 } |
| 1398 if (k < sbr->m[1] + sbr->kx[1]) | 1405 if (k < sbr->m[1] + sbr->kx[1]) |
| 1399 memset(X_high + k, 0, (sbr->m[1] + sbr->kx[1] - k) * sizeof(*X_high)); | 1406 memset(X_high + k, 0, (sbr->m[1] + sbr->kx[1] - k) * sizeof(*X_high)); |
| 1400 | 1407 |
| 1401 return 0; | 1408 return 0; |
| 1402 } | 1409 } |
| 1403 | 1410 |
| 1404 /// Generate the subband filtered lowband | 1411 /// Generate the subband filtered lowband |
| 1405 static int sbr_x_gen(SpectralBandReplication *sbr, float X[2][32][64], | 1412 static int sbr_x_gen(SpectralBandReplication *sbr, float X[2][38][64], |
| 1406 const float X_low[32][40][2], const float Y[2][38][64][2], | 1413 const float X_low[32][40][2], const float Y[2][38][64][2], |
| 1407 int ch) | 1414 int ch) |
| 1408 { | 1415 { |
| 1409 int k, i; | 1416 int k, i; |
| 1410 const int i_f = 32; | 1417 const int i_f = 32; |
| 1411 const int i_Temp = FFMAX(2*sbr->data[ch].t_env_num_env_old - i_f, 0); | 1418 const int i_Temp = FFMAX(2*sbr->data[ch].t_env_num_env_old - i_f, 0); |
| 1412 memset(X, 0, 2*sizeof(*X)); | 1419 memset(X, 0, 2*sizeof(*X)); |
| 1413 for (k = 0; k < sbr->kx[0]; k++) { | 1420 for (k = 0; k < sbr->kx[0]; k++) { |
| 1414 for (i = 0; i < i_Temp; i++) { | 1421 for (i = 0; i < i_Temp; i++) { |
| 1415 X[0][i][k] = X_low[k][i + ENVELOPE_ADJUSTMENT_OFFSET][0]; | 1422 X[0][i][k] = X_low[k][i + ENVELOPE_ADJUSTMENT_OFFSET][0]; |
| 1416 X[1][i][k] = X_low[k][i + ENVELOPE_ADJUSTMENT_OFFSET][1]; | 1423 X[1][i][k] = X_low[k][i + ENVELOPE_ADJUSTMENT_OFFSET][1]; |
| 1417 } | 1424 } |
| 1418 } | 1425 } |
| 1419 for (; k < sbr->kx[0] + sbr->m[0]; k++) { | 1426 for (; k < sbr->kx[0] + sbr->m[0]; k++) { |
| 1420 for (i = 0; i < i_Temp; i++) { | 1427 for (i = 0; i < i_Temp; i++) { |
| 1421 X[0][i][k] = Y[0][i + i_f][k][0]; | 1428 X[0][i][k] = Y[0][i + i_f][k][0]; |
| 1422 X[1][i][k] = Y[0][i + i_f][k][1]; | 1429 X[1][i][k] = Y[0][i + i_f][k][1]; |
| 1423 } | 1430 } |
| 1424 } | 1431 } |
| 1425 | 1432 |
| 1426 for (k = 0; k < sbr->kx[1]; k++) { | 1433 for (k = 0; k < sbr->kx[1]; k++) { |
| 1427 for (i = i_Temp; i < i_f; i++) { | 1434 for (i = i_Temp; i < 38; i++) { |
| 1428 X[0][i][k] = X_low[k][i + ENVELOPE_ADJUSTMENT_OFFSET][0]; | 1435 X[0][i][k] = X_low[k][i + ENVELOPE_ADJUSTMENT_OFFSET][0]; |
| 1429 X[1][i][k] = X_low[k][i + ENVELOPE_ADJUSTMENT_OFFSET][1]; | 1436 X[1][i][k] = X_low[k][i + ENVELOPE_ADJUSTMENT_OFFSET][1]; |
| 1430 } | 1437 } |
| 1431 } | 1438 } |
| 1432 for (; k < sbr->kx[1] + sbr->m[1]; k++) { | 1439 for (; k < sbr->kx[1] + sbr->m[1]; k++) { |
| 1433 for (i = i_Temp; i < i_f; i++) { | 1440 for (i = i_Temp; i < i_f; i++) { |
| 1434 X[0][i][k] = Y[1][i][k][0]; | 1441 X[0][i][k] = Y[1][i][k][0]; |
| 1435 X[1][i][k] = Y[1][i][k][1]; | 1442 X[1][i][k] = Y[1][i][k][1]; |
| 1436 } | 1443 } |
| 1437 } | 1444 } |
| (...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1733 sbr_mapping(ac, sbr, &sbr->data[ch], sbr->data[ch].e_a); | 1740 sbr_mapping(ac, sbr, &sbr->data[ch], sbr->data[ch].e_a); |
| 1734 sbr_env_estimate(sbr->e_curr, sbr->X_high, sbr, &sbr->data[ch]); | 1741 sbr_env_estimate(sbr->e_curr, sbr->X_high, sbr, &sbr->data[ch]); |
| 1735 sbr_gain_calc(ac, sbr, &sbr->data[ch], sbr->data[ch].e_a); | 1742 sbr_gain_calc(ac, sbr, &sbr->data[ch], sbr->data[ch].e_a); |
| 1736 sbr_hf_assemble(sbr->data[ch].Y, sbr->X_high, sbr, &sbr->data[ch], | 1743 sbr_hf_assemble(sbr->data[ch].Y, sbr->X_high, sbr, &sbr->data[ch], |
| 1737 sbr->data[ch].e_a); | 1744 sbr->data[ch].e_a); |
| 1738 } | 1745 } |
| 1739 | 1746 |
| 1740 /* synthesis */ | 1747 /* synthesis */ |
| 1741 sbr_x_gen(sbr, sbr->X[ch], sbr->X_low, sbr->data[ch].Y, ch); | 1748 sbr_x_gen(sbr, sbr->X[ch], sbr->X_low, sbr->data[ch].Y, ch); |
| 1742 } | 1749 } |
| 1750 |
| 1751 if (ac->m4ac.ps == 1) { |
| 1752 if (sbr->ps.start) { |
| 1753 ff_ps_apply(ac->avctx, &sbr->ps, sbr->X[0], sbr->X[1], sbr->kx[1] +
sbr->m[1]); |
| 1754 } else { |
| 1755 memcpy(sbr->X[1], sbr->X[0], sizeof(sbr->X[0])); |
| 1756 } |
| 1757 nch = 2; |
| 1758 } |
| 1759 |
| 1743 sbr_qmf_synthesis(&ac->dsp, &sbr->mdct, L, sbr->X[0], sbr->qmf_filter_scratc
h, | 1760 sbr_qmf_synthesis(&ac->dsp, &sbr->mdct, L, sbr->X[0], sbr->qmf_filter_scratc
h, |
| 1744 sbr->data[0].synthesis_filterbank_samples, | 1761 sbr->data[0].synthesis_filterbank_samples, |
| 1745 &sbr->data[0].synthesis_filterbank_samples_offset, | 1762 &sbr->data[0].synthesis_filterbank_samples_offset, |
| 1746 downsampled, | 1763 downsampled, |
| 1747 ac->add_bias, -1024 * ac->sf_scale); | 1764 ac->add_bias, -1024 * ac->sf_scale); |
| 1748 if (nch == 2) | 1765 if (nch == 2) |
| 1749 sbr_qmf_synthesis(&ac->dsp, &sbr->mdct, R, sbr->X[1], sbr->qmf_filter_sc
ratch, | 1766 sbr_qmf_synthesis(&ac->dsp, &sbr->mdct, R, sbr->X[1], sbr->qmf_filter_sc
ratch, |
| 1750 sbr->data[1].synthesis_filterbank_samples, | 1767 sbr->data[1].synthesis_filterbank_samples, |
| 1751 &sbr->data[1].synthesis_filterbank_samples_offset, | 1768 &sbr->data[1].synthesis_filterbank_samples_offset, |
| 1752 downsampled, | 1769 downsampled, |
| 1753 ac->add_bias, -1024 * ac->sf_scale); | 1770 ac->add_bias, -1024 * ac->sf_scale); |
| 1754 } | 1771 } |
| OLD | NEW |