Compare commits

..

5 commits

Author SHA1 Message Date
wrapper
1e660479c8 fix sbr 2
Some checks failed
CMake / build (push) Has been cancelled
2025-08-24 13:31:40 +07:00
wrapper
d2211d963d retweak
Some checks are pending
CMake / build (push) Waiting to run
2025-08-24 09:14:50 +07:00
wrapper
29b7a4eb4c fix
Some checks failed
CMake / build (push) Has been cancelled
2025-08-22 19:48:17 +07:00
wrapper
e33d5a718e make dual rate unlikely
Some checks are pending
CMake / build (push) Waiting to run
2025-08-22 19:35:23 +07:00
wrapper
c10720f05d Revert "add downsampled frequency scaling"
This reverts commit ce9ef54af5.
2025-08-22 19:34:35 +07:00
6 changed files with 61 additions and 176 deletions

View file

@ -2262,7 +2262,6 @@ static IA_ERRORCODE ia_enhaacplus_enc_init(ixheaace_api_struct *pstr_api_struct,
iaace_scratch *pstr_aac_scratch;
WORD8 *ptr_spectral_band_replication_scratch;
UWORD32 core_sample_rate;
WORD32 use_single_rate;
ixheaace_state_struct *pstr_enc_state = pstr_api_struct->pstr_state;
ixheaace_audio_specific_config_struct *pstr_asc = &pstr_enc_state->audio_specific_config;
@ -2312,7 +2311,6 @@ static IA_ERRORCODE ia_enhaacplus_enc_init(ixheaace_api_struct *pstr_api_struct,
case AOT_SBR:
case AOT_PS:
pstr_api_struct->pstr_state->buffer_offset = INPUT_DELAY_LC;
use_single_rate = 0;
break;
case AOT_AAC_LD:
@ -2321,7 +2319,6 @@ static IA_ERRORCODE ia_enhaacplus_enc_init(ixheaace_api_struct *pstr_api_struct,
} else {
pstr_api_struct->pstr_state->buffer_offset = INPUT_DELAY_LD_512;
}
use_single_rate = 0;
break;
case AOT_AAC_ELD:
@ -2330,7 +2327,6 @@ static IA_ERRORCODE ia_enhaacplus_enc_init(ixheaace_api_struct *pstr_api_struct,
} else {
pstr_api_struct->pstr_state->buffer_offset = INPUT_DELAY_ELD_512;
}
use_single_rate = 1;
break;
}
pstr_api_struct->pstr_state->downsample[ele_idx] = 0;
@ -2341,6 +2337,9 @@ static IA_ERRORCODE ia_enhaacplus_enc_init(ixheaace_api_struct *pstr_api_struct,
pstr_aac_config->native_sample_rate = pstr_api_struct->config[ele_idx].native_sample_rate;
pstr_aac_config->num_in_channels = pstr_api_struct->config[ele_idx].i_channels;
pstr_aac_config->num_out_channels = pstr_api_struct->config[ele_idx].chmode_nchannels;
if (pstr_api_struct->config[ele_idx].aac_classic == 0) {
pstr_aac_config->core_sample_rate = pstr_aac_config->core_sample_rate / 2;
}
if (pstr_api_struct->pstr_state->mps_enable) {
switch (pstr_api_struct->pstr_state->mps_tree_config) {
case TREE_212:
@ -2348,9 +2347,6 @@ static IA_ERRORCODE ia_enhaacplus_enc_init(ixheaace_api_struct *pstr_api_struct,
case TREE_5152:
pstr_aac_config->num_out_channels = 1;
core_ch = 1;
if (use_single_rate) {
use_single_rate = pstr_api_struct->pstr_state->mps_tree_config != TREE_212 || pstr_aac_config->core_sample_rate < 27713;
}
break;
case TREE_525:
@ -2359,9 +2355,6 @@ static IA_ERRORCODE ia_enhaacplus_enc_init(ixheaace_api_struct *pstr_api_struct,
break;
}
}
if (pstr_api_struct->config[ele_idx].aac_classic == 0 && !use_single_rate) {
pstr_aac_config->core_sample_rate = pstr_aac_config->core_sample_rate / 2;
}
if (pstr_api_struct->config[ele_idx].use_parametric_stereo) {
pstr_api_struct->config[ele_idx].chmode_nchannels = 2;
@ -2497,7 +2490,6 @@ static IA_ERRORCODE ia_enhaacplus_enc_init(ixheaace_api_struct *pstr_api_struct,
spectral_band_replication_config.crc_sbr = 0;
spectral_band_replication_config.parametric_coding = 1;
spectral_band_replication_config.is_esbr = pstr_api_struct->config[0].esbr_flag;
spectral_band_replication_config.is_single_rate = use_single_rate;
if (pstr_api_struct->pstr_state->aot == AOT_AAC_ELD) {
spectral_band_replication_config.is_ld_sbr = 1;
spectral_band_replication_config.sbr_codec = ELD_SBR;
@ -2576,14 +2568,10 @@ static IA_ERRORCODE ia_enhaacplus_enc_init(ixheaace_api_struct *pstr_api_struct,
ixheaace_adjust_sbr_settings(
&spectral_band_replication_config, pstr_aac_config->bit_rate,
pstr_aac_config->num_out_channels, use_single_rate ? pstr_aac_config->sample_rate : core_sample_rate, AACENC_TRANS_FAC, 24000,
pstr_aac_config->num_out_channels, core_sample_rate, AACENC_TRANS_FAC, 24000,
pstr_api_struct->spectral_band_replication_tabs.ptr_qmf_tab,
pstr_api_struct->pstr_state->aot, (pstr_api_struct->config[0].ccfl_idx == SBR_4_1));
if (spectral_band_replication_config.is_single_rate && !spectral_band_replication_config.is_single_rate_found) {
return IA_EXHEAACE_INIT_FATAL_AACPLUS_NOT_AVAIL;
}
if (pstr_api_struct->config[ele_idx].element_type != ID_LFE) {
/* open SBR PART, set core bandwidth */
error = ixheaace_env_open(

View file

@ -19,7 +19,6 @@
*/
#include <math.h>
#include <stdio.h>
#include "ixheaac_type_def.h"
#include "ixheaac_constants.h"
#include "ixheaace_error_codes.h"
@ -372,47 +371,6 @@ ixheaace_get_sbr_start_freq_raw(WORD32 start_freq, WORD32 qmf_bands, WORD32 fs)
return result;
}
WORD32 ixheaace_get_sbr_stop_freq_raw(WORD32 stop_freq, WORD32 qmf_bands, WORD32 fs) {
WORD32 result;
if (stop_freq < 0 || stop_freq > 13) {
return -1;
}
result = ixheaace_get_stop_freq(fs, stop_freq);
printf("stop freq compute: %d\n", result);
result = (result * fs / qmf_bands + 1) >> 1;
return result;
}
WORD32 ixheaace_get_downsampled_stop_freq(WORD32 stop_freq, WORD32 qmf_bands, WORD32 fs,
WORD32 start_freq, ixheaace_sr_mode sample_rate_mode,
WORD32 sbr_ratio_idx, ixheaace_sbr_codec_type sbr_codec)
{
WORD32 new_stop_freq;
WORD32 stop_freq_downsampled = fs / 2;
WORD32 result;
WORD32 k0;
WORD32 k2;
printf("fs: %d, sr: %d, sf: %d\n", fs, stop_freq_downsampled, ixheaace_get_sbr_stop_freq_raw(stop_freq, qmf_bands, fs));
while (stop_freq && ixheaace_get_sbr_stop_freq_raw(stop_freq, qmf_bands, fs) > stop_freq_downsampled) {
stop_freq--;
}
new_stop_freq = ixheaace_get_sbr_stop_freq_raw(stop_freq, qmf_bands, fs);
if (new_stop_freq > stop_freq_downsampled) return -1;
result = ixheaace_find_start_and_stop_band(fs, qmf_bands, start_freq, stop_freq,
sample_rate_mode, &k0, &k2, sbr_ratio_idx, sbr_codec);
if (result != IA_NO_ERROR) return -1;
return stop_freq;
}
static WORD32 ixheaace_number_of_bands(WORD32 b_p_o, WORD32 start, WORD32 stop,
FLOAT32 warp_fac) {
WORD32 result = 0;

View file

@ -43,7 +43,3 @@ ixheaace_find_start_and_stop_band(const WORD32 sampling_freq, const WORD32 num_c
ixheaace_sbr_codec_type sbr_codec);
WORD32 ixheaace_get_sbr_start_freq_raw(WORD32 start_freq, WORD32 qmf_bands, WORD32 fs);
WORD32 ixheaace_get_sbr_stop_freq_raw(WORD32 stop_freq, WORD32 qmf_bands, WORD32 fs);
WORD32 ixheaace_get_downsampled_stop_freq(WORD32 stop_freq, WORD32 qmf_bands, WORD32 fs,
WORD32 start_freq, ixheaace_sr_mode sample_rate_mode,
WORD32 sbr_ratio_idx, ixheaace_sbr_codec_type sbr_codec);

View file

@ -18,7 +18,6 @@
* Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
*/
#include <stdio.h>
#include <string.h>
#include "ixheaac_type_def.h"
@ -226,7 +225,7 @@ static IA_ERRORCODE ixheaace_create_env_channel(
start_index = 576;
err_code = ixheaace_create_ton_corr_param_extr(
ch, &pstr_env->str_ton_corr, pstr_sbr_cfg->sample_freq, params->is_single_rate ? 32 : 64, params->sbr_xpos_ctrl,
ch, &pstr_env->str_ton_corr, pstr_sbr_cfg->sample_freq, 64, params->sbr_xpos_ctrl,
pstr_sbr_cfg->ptr_freq_band_tab[LOW_RES][0], pstr_sbr_cfg->ptr_v_k_master,
pstr_sbr_cfg->num_master, params->ana_max_level, pstr_sbr_cfg->ptr_freq_band_tab,
pstr_sbr_cfg->num_scf, pstr_sbr_hdr->sbr_noise_bands, params->use_speech_config,
@ -254,7 +253,7 @@ static IA_ERRORCODE ixheaace_create_env_channel(
if (tran_fc == 0) {
tran_fc = ixheaac_min32(5000, ixheaace_get_sbr_start_freq_raw(pstr_sbr_hdr->sbr_start_freq,
params->is_single_rate ? 32 : 64, pstr_sbr_cfg->sample_freq));
64, pstr_sbr_cfg->sample_freq));
}
tran_fc = (tran_fc * 4 * 64 / pstr_sbr_cfg->sample_freq + 1) >> 1;
@ -436,7 +435,6 @@ VOID ixheaace_adjust_sbr_settings(const ixheaace_pstr_sbr_cfg pstr_config, UWORD
UWORD32 std_br, ixheaace_str_qmf_tabs *pstr_qmf_tab,
WORD32 aot, WORD32 is_esbr_4_1) {
FLAG table_found = IXHEAACE_TABLE_IDX_NOT_FOUND;
WORD32 downsample_stop;
WORD32 idx_sr = 0;
WORD32 idx_ch = 0;
WORD32 idx_entry = 0;
@ -516,19 +514,6 @@ VOID ixheaace_adjust_sbr_settings(const ixheaace_pstr_sbr_cfg pstr_config, UWORD
}
}
if (pstr_config->is_single_rate) {
printf("he-aac: single rate start: %d\n", pstr_config->start_freq);
printf("he-aac: single rate stop: %d\n", pstr_config->stop_freq);
downsample_stop = ixheaace_get_downsampled_stop_freq(pstr_config->stop_freq, IXHEAACE_QMF_CHANNELS / 2, fs_core,
pstr_config->start_freq, IXHEAACE_SINGLE_RATE, pstr_config->sbr_ratio_idx,
pstr_config->sbr_codec);
if (downsample_stop >= 0) {
pstr_config->is_single_rate_found = 1;
pstr_config->stop_freq = downsample_stop;
printf("he-aac: single rate downsampled: %d\n", pstr_config->stop_freq);
}
}
if (pstr_config->sbr_codec == ELD_SBR) {
pstr_config->send_header_data_time = -1;
if ((num_ch == NUM_CHANS_MONO) && (bit_rate <= 22000)) {
@ -612,8 +597,6 @@ VOID ixheaace_initialize_sbr_defaults(ixheaace_pstr_sbr_cfg pstr_config) {
pstr_config->sbr_harmonic = 0;
pstr_config->sbr_ratio_idx = 0; // NO_SBR
pstr_config->use_low_freq_res = 0;
pstr_config->is_single_rate = 0;
pstr_config->is_single_rate_found = 0;
}
static IA_ERRORCODE ia_enhaacplus_enc_update_freq_band_tab(
@ -984,7 +967,7 @@ ixheaace_env_open(ixheaace_pstr_sbr_enc *pstr_env_encoder, ixheaace_pstr_sbr_cfg
pstr_env_enc->str_sbr_cfg.stereo_mode =
(params->codec_settings.num_channels == 2) ? params->stereo_mode : IXHEAACE_SBR_MODE_MONO;
if (!params->is_single_rate) {
if (1) {
pstr_env_enc->str_sbr_hdr.sample_rate_mode = IXHEAACE_DUAL_RATE;
if (params->sbr_codec == USAC_SBR) {
pstr_env_enc->str_sbr_cfg.sample_freq = 2 * params->codec_settings.sample_freq;
@ -1060,7 +1043,7 @@ ixheaace_env_open(ixheaace_pstr_sbr_enc *pstr_env_encoder, ixheaace_pstr_sbr_cfg
pstr_env_enc->str_sbr_cfg.use_parametric_coding = params->parametric_coding;
err_code = ia_enhaacplus_enc_update_freq_band_tab(
&pstr_env_enc->str_sbr_cfg, &pstr_env_enc->str_sbr_hdr, params->is_single_rate ? IXHEAACE_QMF_CHANNELS / 2 : IXHEAACE_QMF_CHANNELS);
&pstr_env_enc->str_sbr_cfg, &pstr_env_enc->str_sbr_hdr, IXHEAACE_QMF_CHANNELS);
if (err_code) {
return err_code;
}

View file

@ -85,8 +85,6 @@ typedef struct ixheaace_str_sbr_cfg {
WORD32 hq_esbr;
ixheaace_sbr_codec_type sbr_codec;
WORD32 use_low_freq_res;
WORD32 is_single_rate;
WORD32 is_single_rate_found;
} ixheaace_str_sbr_cfg, *ixheaace_pstr_sbr_cfg;
typedef struct ixheaace_str_sbr_enc *ixheaace_pstr_sbr_enc;

View file

@ -744,7 +744,7 @@ const ixheaace_str_qmf_tabs ixheaace_qmf_tab = {
},
#else
{{{
/*** 8000hz 1ch ***/
/*** 8000hz 1ch SBR_AAC ***/
{8000, 10000, {7, 11}, 3, {1, 0, 6}, IXHEAACE_SBR_MODE_MONO},
{10000, 12000, {11, 13}, 3, {1, 0, 6}, IXHEAACE_SBR_MODE_MONO},
{12000, 16000, {14, 13}, 3, {1, 0, 6}, IXHEAACE_SBR_MODE_MONO},
@ -753,7 +753,7 @@ const ixheaace_str_qmf_tabs ixheaace_qmf_tab = {
{32000, 48001, {14, 15}, 2, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{0}},
{
/*** 8000hz 2ch ***/
/*** 8000hz 2ch SBR_AAC ***/
{16000, 24000, {6, 9}, 3, {1, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{24000, 28000, {9, 11}, 3, {1, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{28000, 36000, {11, 11}, 2, {2, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
@ -765,7 +765,7 @@ const ixheaace_str_qmf_tabs ixheaace_qmf_tab = {
{0}}},
{{
/*** 11025hz 1ch ***/
/*** 11025hz 1ch SBR_AAC ***/
{8000, 10000, {5, 6}, 3, {1, 0, 6}, IXHEAACE_SBR_MODE_MONO},
{10000, 12000, {8, 12}, 3, {1, 0, 6}, IXHEAACE_SBR_MODE_MONO},
{12000, 16000, {12, 13}, 3, {1, 0, 6}, IXHEAACE_SBR_MODE_MONO},
@ -773,10 +773,10 @@ const ixheaace_str_qmf_tabs ixheaace_qmf_tab = {
{20000, 24000, {13, 13}, 3, {1, 0, 6}, IXHEAACE_SBR_MODE_MONO},
{24000, 32000, {14, 14}, 2, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{32000, 48000, {15, 15}, 2, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{48000, 64001, {15, 15}, 1, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{48000, 66001, {15, 15}, 1, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{0}},
{
/*** 11025hz 2ch ***/
/*** 11025hz 2ch SBR_AAC ***/
{16000, 24000, {7, 9}, 3, {1, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{24000, 28000, {10, 10}, 3, {1, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{28000, 36000, {12, 12}, 2, {2, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
@ -784,11 +784,11 @@ const ixheaace_str_qmf_tabs ixheaace_qmf_tab = {
{44000, 52000, {14, 13}, 2, {2, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{52000, 60000, {15, 13}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{60000, 76000, {15, 13}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{76000, 128001, {15, 13}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{76000, 132301, {15, 13}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{0}}},
{{
/*** 12000hz 1ch ***/
/*** 12000hz 1ch SBR_AAC ***/
{8000, 10000, {4, 6}, 3, {1, 0, 6}, IXHEAACE_SBR_MODE_MONO},
{10000, 12000, {7, 11}, 3, {1, 0, 6}, IXHEAACE_SBR_MODE_MONO},
{12000, 16000, {11, 12}, 3, {1, 0, 6}, IXHEAACE_SBR_MODE_MONO},
@ -796,10 +796,10 @@ const ixheaace_str_qmf_tabs ixheaace_qmf_tab = {
{20000, 24000, {12, 12}, 3, {1, 0, 6}, IXHEAACE_SBR_MODE_MONO},
{24000, 32000, {13, 13}, 2, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{32000, 48000, {14, 14}, 2, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{48000, 64001, {15, 15}, 1, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{48000, 72001, {15, 15}, 1, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{0}},
{
/*** 12000hz 2ch ***/
/*** 12000hz 2ch SBR_AAC ***/
{16000, 24000, {6, 9}, 3, {1, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{24000, 28000, {9, 10}, 3, {1, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{28000, 36000, {11, 12}, 2, {2, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
@ -807,11 +807,11 @@ const ixheaace_str_qmf_tabs ixheaace_qmf_tab = {
{44000, 52000, {13, 13}, 2, {2, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{52000, 60000, {14, 13}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{60000, 76000, {15, 13}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{76000, 128001, {15, 13}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{76000, 144001, {15, 13}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{0}}},
{{
/*** 16000hz 1ch ***/
/*** 16000hz 1ch SBR_AAC ***/
{6000, 8000, {0, 0}, 3, {1, 0, 6}, IXHEAACE_SBR_MODE_MONO},
{8000, 10000, {1, 0}, 3, {1, 0, 6}, IXHEAACE_SBR_MODE_MONO},
{10000, 12000, {2, 6}, 3, {1, 0, 6}, IXHEAACE_SBR_MODE_MONO},
@ -821,10 +821,10 @@ const ixheaace_str_qmf_tabs ixheaace_qmf_tab = {
{22000, 28000, {10, 12}, 2, {2, 0, 6}, IXHEAACE_SBR_MODE_MONO},
{28000, 36000, {12, 13}, 2, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{36000, 44000, {14, 13}, 1, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{44000, 64001, {15, 13}, 1, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{44000, 96001, {15, 13}, 1, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{0}},
{
/*** 16000hz 2ch ***/
/*** 16000hz 2ch SBR_AAC ***/
{16000, 24000, {4, 1}, 3, {1, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{24000, 28000, {8, 10}, 3, {1, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{28000, 36000, {10, 12}, 2, {2, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
@ -832,11 +832,11 @@ const ixheaace_str_qmf_tabs ixheaace_qmf_tab = {
{44000, 52000, {15, 13}, 2, {2, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{52000, 60000, {15, 13}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{60000, 76000, {15, 13}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{76000, 128001, {15, 13}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{76000, 192001, {15, 13}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{0}}},
{{
/*** 22050hz 1ch ***/
/*** 22050hz 1ch SBR_AAC ***/
{8000, 11369, {1, 1}, 3, {1, 0, 6}, IXHEAACE_SBR_MODE_MONO},
{11369, 16000, {3, 4}, 3, {1, 0, 6}, IXHEAACE_SBR_MODE_MONO},
{16000, 18000, {3, 5}, 3, {1, 0, 6}, IXHEAACE_SBR_MODE_MONO},
@ -844,12 +844,10 @@ const ixheaace_str_qmf_tabs ixheaace_qmf_tab = {
{22000, 28000, {7, 8}, 2, {2, 0, 6}, IXHEAACE_SBR_MODE_MONO},
{28000, 36000, {10, 9}, 2, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{36000, 44000, {11, 10}, 1, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{44000, 52000, {13, 11}, 1, {2, 0, 0}, IXHEAACE_SBR_MODE_MONO},
{52000, 68000, {14, 12}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_MONO},
{68000, 96001, {14, 12}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_MONO},
{44000, 132151, {13, 12}, 1, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{0}},
{
/*** 22050hz 2ch ***/
/*** 22050hz 2ch SBR_AAC ***/
{16000, 24000, {2, 1}, 3, {1, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{24000, 28000, {5, 6}, 3, {1, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{28000, 32000, {5, 8}, 2, {2, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
@ -858,11 +856,11 @@ const ixheaace_str_qmf_tabs ixheaace_qmf_tab = {
{44000, 52000, {12, 9}, 2, {3, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{52000, 60000, {13, 10}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{60000, 101000, {14, 12}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{101000, 128001, {15, 12}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{101000, 264601, {15, 12}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{0}}},
{{
/*** 24000hz 1ch ***/
/*** 24000hz 1ch SBR_AAC ***/
{8000, 12000, {1, 1}, 3, {1, 0, 6}, IXHEAACE_SBR_MODE_MONO},
{12000, 16000, {3, 4}, 3, {1, 0, 6}, IXHEAACE_SBR_MODE_MONO},
{16000, 18000, {3, 5}, 3, {1, 0, 6}, IXHEAACE_SBR_MODE_MONO},
@ -870,12 +868,10 @@ const ixheaace_str_qmf_tabs ixheaace_qmf_tab = {
{22000, 28000, {7, 8}, 2, {2, 0, 6}, IXHEAACE_SBR_MODE_MONO},
{28000, 36000, {10, 9}, 2, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{36000, 44000, {11, 10}, 1, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{44000, 52000, {13, 11}, 1, {3, 0, 0}, IXHEAACE_SBR_MODE_MONO},
{52000, 68000, {15, 11}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_MONO},
{68000, 96001, {15, 12}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_MONO},
{44000, 144001, {13, 11}, 1, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{0}},
{
/*** 24000hz 2ch ***/
/*** 24000hz 2ch SBR_AAC ***/
{16000, 24000, {2, 1}, 3, {1, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{24000, 28000, {5, 6}, 3, {1, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{28000, 36000, {7, 8}, 2, {2, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
@ -883,92 +879,58 @@ const ixheaace_str_qmf_tabs ixheaace_qmf_tab = {
{44000, 52000, {12, 9}, 2, {3, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{52000, 60000, {13, 10}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{60000, 76000, {14, 12}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{76000, 128001, {15, 12}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{76000, 288001, {15, 12}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{0}}},
{{
/*** 32000hz 1ch ***/
/*** 32000hz 1ch SBR_AAC ***/
{24000, 36000, {4, 4}, 3, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{36000, 60000, {7, 6}, 2, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{60000, 72000, {9, 8}, 1, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{72000, 100000, {11, 10}, 1, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{100000, 160001, {13, 11}, 1, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{100000, 192001, {13, 11}, 1, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{0}},
{
/*** 32000hz 2ch ***/
/*** 32000hz 2ch SBR_AAC ***/
{32000, 60000, {4, 4}, 3, {2, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{60000, 80000, {11, 6}, 2, {3, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{80000, 112000, {12, 8}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{112000, 144000, {13, 10}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{144000, 256001, {13, 11}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{60000, 80000, {7, 6}, 2, {3, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{80000, 112000, {9, 8}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{112000, 144000, {11, 10}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{144000, 384001, {13, 11}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{0}}},
{{
/*** 44100hz 1ch ***/
{12000, 16000, {0, 0}, 0, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{16000, 22000, {1, 1}, 0, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{22000, 30000, {2, 3}, 0, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{30000, 36000, {4, 4}, 0, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{36000, 40000, {5, 4}, 0, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{40000, 48000, {6, 5}, 0, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{48000, 60000, {7, 6}, 1, {3, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{60000, 72000, {9, 6}, 1, {3, 0, 0}, IXHEAACE_SBR_MODE_MONO},
{72000, 88000, {10, 8}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_MONO},
{88000, 160001, {12, 9}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_MONO},
{160001, 288001, {13, 12}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_MONO},
/*** 44100hz 1ch SBR_AAC ***/
{24000, 36000, {4, 4}, 3, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{36000, 60000, {7, 6}, 2, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{60000, 72000, {9, 8}, 1, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{72000, 100000, {11, 10}, 1, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{100000, 264601, {13, 11}, 1, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{0}},
{
/*** 44100hz 2ch ***/
{12000, 16000, {0, 0}, 0, {2, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{16000, 22000, {1, 0}, 0, {2, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{22000, 26000, {2, 1}, 0, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{26000, 30000, {3, 3}, 0, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{30000, 34000, {3, 3}, 0, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{34000, 38000, {4, 4}, 0, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{38000, 44000, {5, 4}, 0, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{44000, 52000, {6, 4}, 0, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{52000, 60000, {8, 5}, 2, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{60000, 68000, {9, 6}, 2, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{68000, 76000, {10, 6}, 2, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{76000, 90000, {11, 7}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{90000, 112000, {11, 8}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{112000, 132000, {12, 9}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{132000, 180000, {13, 11}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{180000, 288001, {15, 12}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
/*** 44100hz 2ch SBR_AAC ***/
{32000, 60000, {4, 4}, 3, {2, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{60000, 80000, {7, 6}, 2, {3, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{80000, 112000, {9, 8}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{112000, 144000, {11, 10}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{144000, 529201, {13, 11}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{0}}},
{{
/*** 48000hz 1ch ***/
{12000, 16000, {0, 0}, 0, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{16000, 22000, {1, 1}, 0, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{22000, 30000, {2, 3}, 0, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{30000, 36000, {4, 4}, 0, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{36000, 40000, {5, 4}, 0, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{40000, 48000, {6, 5}, 0, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{48000, 60000, {7, 6}, 1, {3, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{60000, 72000, {9, 6}, 1, {3, 0, 0}, IXHEAACE_SBR_MODE_MONO},
{72000, 88000, {10, 8}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_MONO},
{88000, 160001, {12, 9}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_MONO},
{160001, 288001, {13, 12}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_MONO},
/*** 48000hz 1ch SBR_AAC ***/
{24000, 36000, {4, 9}, 3, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{36000, 60000, {7, 10}, 2, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{60000, 72000, {9, 10}, 1, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{72000, 100000, {11, 11}, 1, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{100000, 288001, {13, 11}, 1, {2, 0, 3}, IXHEAACE_SBR_MODE_MONO},
{0}},
{
/*** 48000hz 2ch ***/
{12000, 16000, {0, 0}, 0, {2, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{16000, 22000, {0, 0}, 0, {2, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{22000, 26000, {1, 1}, 0, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{26000, 30000, {2, 3}, 0, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{30000, 34000, {3, 3}, 0, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{34000, 38000, {4, 4}, 0, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{38000, 44000, {2, 4}, 0, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{44000, 52000, {6, 4}, 0, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{52000, 60000, {8, 5}, 2, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{60000, 68000, {9, 6}, 2, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{68000, 76000, {10, 6}, 2, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{76000, 90000, {11, 7}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{90000, 112000, {11, 8}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{112000, 132000, {12, 9}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{132000, 180000, {13, 11}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{180000, 288001, {15, 12}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
/*** 48000hz 2ch SBR_AAC ***/
{32000, 60000, {4, 9}, 3, {2, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{60000, 80000, {7, 10}, 2, {2, 0, -3}, IXHEAACE_SBR_MODE_SWITCH_LRC},
{80000, 112000, {9, 10}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{112000, 144000, {11, 11}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{144000, 576001, {13, 11}, 1, {3, 0, -3}, IXHEAACE_SBR_MODE_LEFT_RIGHT},
{0}}}
},