151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick/****************************************************************************** 251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * * 351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * Copyright (C) 2018 The Android Open Source Project 451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * 551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * Licensed under the Apache License, Version 2.0 (the "License"); 651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * you may not use this file except in compliance with the License. 751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * You may obtain a copy of the License at: 851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * 951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * http://www.apache.org/licenses/LICENSE-2.0 1051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * 1151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * Unless required by applicable law or agreed to in writing, software 1251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * distributed under the License is distributed on an "AS IS" BASIS, 1351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * See the License for the specific language governing permissions and 1551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * limitations under the License. 1651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * 1751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ***************************************************************************** 1851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 1951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick*/ 2051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include <stdio.h> 2151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include <stdlib.h> 2251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include <string.h> 2351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include <assert.h> 2451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 2551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include <ixheaacd_type_def.h> 2651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 2751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_cnst.h" 2851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 2951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_bitbuffer.h" 3051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_config.h" 3151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_interface.h" 3251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_acelp_info.h" 3351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 3451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_tns_usac.h" 3551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_sbrdecsettings.h" 3651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_info.h" 3751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_struct.h" 3851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_sbr_common.h" 3951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_drc_data_struct.h" 4051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_drc_dec.h" 4151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 4251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_sbrdecoder.h" 4351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_mps_polyphase.h" 4451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_sbr_const.h" 4551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 4651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_main.h" 4751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 4851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_arith_dec.h" 4951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 5051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include <ixheaacd_type_def.h> 5151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_memory_standards.h" 5251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_sbrdecsettings.h" 5351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_env_extr_part.h" 5451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_defines.h" 5551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include <ixheaacd_aac_rom.h> 5651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_common_rom.h" 5751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include <ixheaacd_sbr_rom.h> 5851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_bitbuffer.h" 5951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_pulsedata.h" 6051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_pns.h" 6151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 6251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_lt_predict.h" 6351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 6451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_channelinfo.h" 6551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_channel.h" 6651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_channelinfo.h" 6751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_sbrdecoder.h" 6851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_audioobjtypes.h" 6951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_latmdemux.h" 7051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_aacdec.h" 7151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_sbr_common.h" 7251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 7351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_mps_polyphase.h" 7451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_config.h" 7551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_mps_dec.h" 7651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_struct_def.h" 7751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 7851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_create.h" 7951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 8051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_process.h" 8151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 8251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_sbrdecoder.h" 8351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 8451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_mps_interface.h" 8551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 8651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_bit_extract.h" 8751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_func_def.h" 8851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#include "ixheaacd_interface.h" 8951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 9051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essickextern ia_huff_code_word_struct ixheaacd_huff_book_scl[]; 9151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 9251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essickextern WORD32 ixheaacd_book_scl_index[]; 9351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essickextern WORD16 ixheaacd_book_scl_code_book[]; 9451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 9551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essickextern ia_usac_samp_rate_info ixheaacd_samp_rate_info[]; 9651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essickextern const WORD32 ixheaacd_sampling_boundaries[(1 << LEN_SAMP_IDX)]; 9751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 9851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essickconst WORD32 ixheaacd_sampl_freq_idx_table[17] = { 9951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 10051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 12000, 11025, 8000, 7350, -1, -1, -1, -1}; 10151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 10251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essickstatic VOID ixheaacd_info_init(ia_usac_samp_rate_info *ptr_samp_info, 10351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 block_size_samples, 10451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_sfb_info_struct *pstr_sfb_info_long, 10551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_sfb_info_struct *pstr_sfb_info_short, 10651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD16 *sfb_width_short, 10751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD16 *sfb_width_long) { 10851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 i, j, k, n, ws; 10951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick const WORD16 *sfbands; 11051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_sfb_info_struct *pstr_sfb_info_ip; 11151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 11251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_long->islong = 1; 11351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_long->max_win_len = 1; 11451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_long->samp_per_bk = block_size_samples; 11551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 11651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick switch (block_size_samples) { 11751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick case 480: 11851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_long->ptr_sfb_tbl = ptr_samp_info->ptr_sfb_480; 11951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_long->sfb_per_sbk = ptr_samp_info->num_sfb_480; 12051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick break; 12151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick case 512: 12251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_long->ptr_sfb_tbl = ptr_samp_info->ptr_sfb_512; 12351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_long->sfb_per_sbk = ptr_samp_info->num_sfb_512; 12451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick break; 12551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick case 768: 12651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_long->sfb_per_sbk = ptr_samp_info->num_sfb_768; 12751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_long->ptr_sfb_tbl = ptr_samp_info->ptr_sfb_768; 12851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick break; 12951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick case 960: 13051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_long->ptr_sfb_tbl = ptr_samp_info->ptr_sfb_960; 13151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_long->sfb_per_sbk = ptr_samp_info->num_sfb_960; 13251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick break; 13351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick case 1024: 13451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_long->sfb_per_sbk = ptr_samp_info->num_sfb_1024; 13551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_long->ptr_sfb_tbl = ptr_samp_info->ptr_sfb_1024; 13651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick break; 13751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick default: 13851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick assert(0); 13951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick break; 14051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 14151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 14251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_long->sfb_width = sfb_width_long; 14351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_long->num_groups = 1; 14451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_long->group_len[0] = 1; 14551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 14651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = 0, j = 0, n = pstr_sfb_info_long->sfb_per_sbk; i < n; i++) { 14751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick k = pstr_sfb_info_long->ptr_sfb_tbl[i]; 14851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_long->sfb_width[i] = k - j; 14951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick j = k; 15051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 15151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 15251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_short->islong = 0; 15351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_short->max_win_len = NSHORT; 15451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_short->samp_per_bk = block_size_samples; 15551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 15651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = 0; i < pstr_sfb_info_short->max_win_len; i++) { 15751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick switch (block_size_samples) { 15851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick case 768: 15951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_short->ptr_sfb_tbl = ptr_samp_info->ptr_sfb_96; 16051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_short->sfb_per_sbk = ptr_samp_info->num_sfb_96; 16151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick break; 16251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick case 960: 16351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_short->ptr_sfb_tbl = ptr_samp_info->ptr_sfb_120; 16451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_short->sfb_per_sbk = ptr_samp_info->num_sfb_120; 16551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick break; 16651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick case 1024: 16751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_short->ptr_sfb_tbl = ptr_samp_info->ptr_sfb_128; 16851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_short->sfb_per_sbk = ptr_samp_info->num_sfb_128; 16951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick break; 17051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick default: 17151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick assert(0); 17251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick break; 17351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 17451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 17551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 17651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_short->sfb_width = sfb_width_short; 17751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = 0, j = 0, n = pstr_sfb_info_short->sfb_per_sbk; i < n; i++) { 17851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick k = pstr_sfb_info_short->ptr_sfb_tbl[i]; 17951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_short->sfb_width[i] = k - j; 18051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick j = k; 18151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 18251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 18351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_ip = pstr_sfb_info_long; 18451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (ws = 0; ws < 2; ws++) { 18551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_ip->sfb_per_bk = 0; 18651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick k = 0; 18751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick n = 0; 18851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = 0; i < pstr_sfb_info_ip->max_win_len; i++) { 18951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_ip->bins_per_sbk = 19051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_ip->samp_per_bk / pstr_sfb_info_ip->max_win_len; 19151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 19251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_ip->sfb_per_bk += pstr_sfb_info_ip->sfb_per_sbk; 19351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 19451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick sfbands = pstr_sfb_info_ip->ptr_sfb_tbl; 19551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (j = 0; j < pstr_sfb_info_ip->sfb_per_sbk; j++) 19651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_ip->sfb_idx_tbl[j + k] = sfbands[j] + n; 19751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 19851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick n += pstr_sfb_info_ip->bins_per_sbk; 19951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick k += pstr_sfb_info_ip->sfb_per_sbk; 20051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 20151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_sfb_info_ip = pstr_sfb_info_short; 20251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 20351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick} 20451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 20551aa06e124ba688ca810b25ee0b5bb66678aac14Ray EssickWORD32 ixheaacd_decode_init( 20651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VOID *handle, WORD32 sample_rate, ia_usac_data_struct *usac_data, 20751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_audio_specific_config_struct *pstr_stream_config) { 20851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 i; 20951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_exhaacplus_dec_api_struct *codec_handle = 21051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick (ia_exhaacplus_dec_api_struct *)handle; 21151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_aac_dec_state_struct *aac_dec_handle = codec_handle->p_state_aac; 21251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 fscale; 21351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 21451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 ele_id = 0; 21551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 21651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_usac_config_struct *ptr_usac_config = 21751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick &(pstr_stream_config->str_usac_config); 21851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_usac_decoder_config_struct *ptr_usac_dec_config = 21951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick &(pstr_stream_config->str_usac_config.str_usac_dec_config); 22051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 num_elements = ptr_usac_dec_config->num_elements; 22151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 chan = 0; 22251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 22351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->huffman_code_book_scl = aac_dec_handle->huffman_code_book_scl; 22451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->huffman_code_book_scl_index = 22551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick aac_dec_handle->huffman_code_book_scl_index; 22651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 22751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->tns_coeff3_32 = 22851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick aac_dec_handle->pstr_aac_tables->pstr_block_tables->tns_coeff3_32; 22951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->tns_coeff4_32 = 23051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick aac_dec_handle->pstr_aac_tables->pstr_block_tables->tns_coeff4_32; 23151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->tns_max_bands_tbl_usac = 23251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick &aac_dec_handle->pstr_aac_tables->pstr_block_tables 23351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ->tns_max_bands_tbl_usac; 23451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 235b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri for (i = 0; i < 11; i++) { 23651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (ixheaacd_sampling_boundaries[i] <= sample_rate) break; 23751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 23851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 23951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (i == (1 << LEN_SAMP_IDX)) return -1; 24051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->sampling_rate_idx = i; 24151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 24251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick fscale = (WORD32)((double)sample_rate * (double)FSCALE_DENOM / 12800.0f); 24351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 24451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = 0; i < MAX_NUM_CHANNELS; i++) { 24551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->window_shape_prev[i] = 0; 24651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->window_shape[i] = 0; 24751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 24851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 24951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_hufftab(&ixheaacd_book, ixheaacd_huff_book_scl, 25051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_book_scl_code_book, ixheaacd_book_scl_index, 1, 60, 25151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 60, 1, 19); 25251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 25351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->pstr_usac_winmap[0] = &usac_data->str_only_long_info; 25451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->pstr_usac_winmap[1] = &usac_data->str_only_long_info; 25551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->pstr_usac_winmap[2] = &usac_data->str_eight_short_info; 25651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->pstr_usac_winmap[3] = &usac_data->str_only_long_info; 25751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->pstr_usac_winmap[4] = &usac_data->str_only_long_info; 2588eb646f89b94cf6d0aa26e5bca39ba083a554965Harish Mahendrakar 259b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri if ((usac_data->ccfl != 480) && (usac_data->ccfl != 512) && 260b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri (usac_data->ccfl != 768) && (usac_data->ccfl != 960) && 261b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri (usac_data->ccfl != 1024)) 262b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri return -1; 26351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_info_init(&ixheaacd_samp_rate_info[usac_data->sampling_rate_idx], 26451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->ccfl, usac_data->pstr_usac_winmap[0], 26551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->pstr_usac_winmap[2], usac_data->sfb_width_short, 26651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->sfb_width_long); 26751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 26851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = 0; i < MAX_NUM_CHANNELS; i++) { 26951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->str_tddec[i] = &usac_data->arr_str_tddec[i]; 27051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->str_tddec[i]->fscale = 27151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ((fscale)*usac_data->ccfl) / LEN_SUPERFRAME; 27251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->len_subfrm = usac_data->ccfl / 4; 27351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->num_subfrm = (MAX_NUM_SUBFR * usac_data->ccfl) / LEN_SUPERFRAME; 27451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 27551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_init_acelp_data(usac_data, usac_data->str_tddec[i]); 27651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 27751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->str_tddec[i]->fd_synth = 27851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick &usac_data->str_tddec[i]->fd_synth_buf[LEN_FRAME]; 27951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 28051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 28151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (ele_id = 0; ele_id < num_elements; ele_id++) { 28251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick UWORD32 ele_type; 28351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 stereo_config_index; 28451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 28551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_usac_dec_element_config_struct *ptr_usac_ele_config = 28651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick &ptr_usac_config->str_usac_dec_config.str_usac_element_config[ele_id]; 28751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 28851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (ptr_usac_ele_config) { 28951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (usac_data->tw_mdct[ele_id]) { 29051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick return -1; 29151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 29251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 29351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->noise_filling_config[ele_id] = 29451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_usac_ele_config->noise_filling; 29551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 29651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 29751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ele_type = ptr_usac_config->str_usac_dec_config.usac_element_type[ele_id]; 29851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 29951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick stereo_config_index = ptr_usac_ele_config->stereo_config_index; 30051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 30151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick switch (ele_type) { 30251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick case ID_USAC_SCE: 30351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick case ID_USAC_LFE: 30451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 30551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->seed_value[chan] = 0x3039; 30651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 30751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick break; 30851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 30951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick case ID_USAC_CPE: { 31051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 frame_len_tbl[] = {-1, -1, 32, 32, 64}; 31151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 31251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->seed_value[chan] = 0x3039; 31351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick chan++; 31451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 31551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->seed_value[chan] = 0x10932; 31651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 31751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (stereo_config_index > 0) { 31851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 bs_frame_length = 31951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick frame_len_tbl[ptr_usac_config->core_sbr_framelength_index] - 1; 32051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 bs_residual_coding = (stereo_config_index > 1) ? 1 : 0; 32151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 32251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_usac_dec_mps_config_struct *ptr_usac_mps212_config = 32351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick &(ptr_usac_config->str_usac_dec_config 32451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick .str_usac_element_config[ele_id] 32551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick .str_usac_mps212_config); 32651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 327b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri ixheaacd_mps_create(&aac_dec_handle->mps_dec_handle, bs_frame_length, 328b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri bs_residual_coding, ptr_usac_mps212_config); 32951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 33051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick break; 33151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 33251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 33351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick break; 33451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick case ID_USAC_EXT: 33551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick break; 33651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick default: 33751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick return -1; 33851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick break; 33951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 34051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 34151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 34251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick return 0; 34351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick} 34451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 34551aa06e124ba688ca810b25ee0b5bb66678aac14Ray EssickWORD32 ixheaacd_dec_data_init(VOID *handle, 34651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_frame_data_struct *pstr_frame_data, 34751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_usac_data_struct *usac_data) { 34851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_audio_specific_config_struct *pstr_stream_config, *layer_config; 34951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 err_code = 0; 35051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 35151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 num_out_chan = 0; 35251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 35351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 i_ch, i, ele_id; 35451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 num_elements; 35551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 35651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 out_frame_len, sbr_ratio_idx; 35751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 35851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_usac_config_struct *ptr_usac_config = 35951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick &(pstr_frame_data->str_audio_specific_config.str_usac_config); 36051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 36151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->window_shape_prev[0] = WIN_SEL_0; 36251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->window_shape_prev[1] = WIN_SEL_0; 36351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 36451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_frame_data->str_layer.bit_rate = 36551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_frame_data->str_audio_specific_config.avg_bit_rate; 36651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_stream_config = &pstr_frame_data->str_audio_specific_config; 36751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick layer_config = &pstr_frame_data->str_audio_specific_config; 36851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 36951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick sbr_ratio_idx = ixheaacd_sbr_params( 37051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ptr_usac_config->core_sbr_framelength_index, &out_frame_len, 3714908247643e9e97852e847c00bfe7c4259279538Ray Essick &usac_data->ccfl, &usac_data->output_samples, 3724908247643e9e97852e847c00bfe7c4259279538Ray Essick &pstr_frame_data->str_layer.sample_rate_layer, 3734908247643e9e97852e847c00bfe7c4259279538Ray Essick &layer_config->samp_frequency_index); 3744908247643e9e97852e847c00bfe7c4259279538Ray Essick 375b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri pstr_stream_config->sampling_frequency = 376b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri pstr_frame_data->str_layer.sample_rate_layer; 3774908247643e9e97852e847c00bfe7c4259279538Ray Essick pstr_stream_config->samp_frequency_index = layer_config->samp_frequency_index; 37851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 37951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick num_elements = ptr_usac_config->str_usac_dec_config.num_elements; 38051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 38151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (ele_id = 0; ele_id < num_elements; ele_id++) { 38251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_usac_dec_element_config_struct *ptr_usac_ele_config = 38351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick &(ptr_usac_config->str_usac_dec_config.str_usac_element_config[ele_id]); 38451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 38551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (ptr_usac_ele_config) { 38651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->tw_mdct[ele_id] = ptr_usac_ele_config->tw_mdct; 38751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 38851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 38951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick { 39051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_usac_dec_mps_config_struct *ptr_usac_mps212_config = 39151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick &ptr_usac_ele_config->str_usac_mps212_config; 39251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 stereo_config_index = ptr_usac_ele_config->stereo_config_index; 39351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 39451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->mps_pseudo_lr[ele_id] = 39551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick (stereo_config_index > 1) ? ptr_usac_mps212_config->bs_pseudo_lr : 0; 39651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 39751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 39851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 39951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->sbr_ratio_idx = sbr_ratio_idx; 40051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->esbr_bit_str[0].no_elements = 0; 40151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->esbr_bit_str[1].no_elements = 0; 40251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 40351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick num_out_chan = ptr_usac_config->num_out_channels; 40451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 4054908247643e9e97852e847c00bfe7c4259279538Ray Essick if (usac_data->ccfl == 768) 40651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_frame_data->str_layer.sample_rate_layer = 40751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 4 * pstr_frame_data->str_layer.sample_rate_layer / 3; 40851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 40951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = 0; i < MAX_NUM_CHANNELS; i++) { 41051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->coef_fix[i] = &usac_data->arr_coef_fix[i][0]; 41151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->coef[i] = &usac_data->arr_coef[i][0]; 41251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->coef_save[i] = &usac_data->arr_coef_save[i][0]; 41351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->factors[i] = &usac_data->arr_factors[i][0]; 41451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->group_dis[i] = &usac_data->arr_group_dis[i][0]; 41551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->pstr_tns[i] = &usac_data->arr_str_tns[i]; 41651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->tw_ratio[i] = &usac_data->arr_tw_ratio[i][0]; 41751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->ms_used[i] = &usac_data->arr_ms_used[i][0]; 41851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->window_shape_prev[i] = WIN_SEL_0; 41951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 42051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->seed_value[i] = 0x0; 42151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 42251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->fac_data_present[i] = 0; 42351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 42451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 42551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick err_code = 42651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_decode_init(handle, pstr_frame_data->str_layer.sample_rate_layer, 42751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data, pstr_stream_config); 42851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (err_code == -1) return -1; 42951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 43051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i_ch = 0; i_ch < MAX_NUM_CHANNELS; i_ch++) { 43151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (usac_data->tw_mdct[0] == 1) { 43251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 i; 43351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (i = 0; i < 2 * usac_data->ccfl; i++) { 43451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->warp_cont_mem[i_ch][i] = 1.0; 43551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 43651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick usac_data->warp_sum[i_ch][0] = usac_data->warp_sum[i_ch][1] = 43751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick (FLOAT32)usac_data->ccfl; 43851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 43951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 44051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick return err_code; 44151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick} 44251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 44351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essickstatic VOID ixheaacd_count_tracks_per_layer(int *max_layer, int *stream_count, 44451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick int *tracks_in_layer) { 44551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 stream; 44651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 num_layer; 44751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 num_streams; 44851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 layer = 0; 44951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 45051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (stream_count == NULL) 45151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick num_streams = 0; 45251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick else 45351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick num_streams = *stream_count; 45451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (max_layer == NULL) 45551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick num_layer = num_streams; 45651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick else 45751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick num_layer = *max_layer; 45851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (num_layer < 0) num_layer = num_streams; 45951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 46051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (stream = 0; (layer <= num_layer) && (stream < num_streams);) { 46151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *tracks_in_layer = 1; 46251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick stream += 1; 46351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick layer++; 46451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (layer <= num_layer) *tracks_in_layer = 0; 46551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 46651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 46751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (max_layer) *max_layer = (layer - 1); 46851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (stream_count) *stream_count = stream; 46951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick} 47051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 47151aa06e124ba688ca810b25ee0b5bb66678aac14Ray EssickWORD32 ixheaacd_frm_data_init(ia_audio_specific_config_struct *pstr_audio_conf, 47251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_dec_data_struct *pstr_dec_data) 47351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 47451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick{ 47551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 layer; 47651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 track; 47751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 num_dec_streams; 47851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_frame_data_struct *pstr_frame_data; 47951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 48051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 stream_count = 1; 48151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 max_layer = -1; 48251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 48351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick memset(pstr_dec_data, 0, sizeof(ia_dec_data_struct)); 4844908247643e9e97852e847c00bfe7c4259279538Ray Essick memset(&(pstr_dec_data->str_frame_data), 0, 48551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick sizeof(pstr_dec_data->str_frame_data)); 48651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 4874908247643e9e97852e847c00bfe7c4259279538Ray Essick pstr_frame_data = &(pstr_dec_data->str_frame_data); 48851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 48951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (max_layer < 0) max_layer = stream_count - 1; 49051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 49151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ixheaacd_count_tracks_per_layer(&max_layer, &stream_count, 49251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick &pstr_frame_data->tracks_in_layer); 49351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 49451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_frame_data->scal_out_select = max_layer; 49551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 49651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_frame_data->stream_count = 0; 49751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 49851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick num_dec_streams = track = 0; 49951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (layer = 0; layer < (signed)pstr_frame_data->scal_out_select + 1; 50051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick layer++) { 50151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 j; 50251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (j = 0; j < 1; j++, num_dec_streams++) { 50351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_frame_data->str_audio_specific_config = *pstr_audio_conf; 50451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_frame_data->str_layer.sample_rate_layer = 50551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_frame_data->str_audio_specific_config.sampling_frequency; 50651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_frame_data->str_layer.bit_rate = 50751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_frame_data->str_audio_specific_config.avg_bit_rate; 50851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 50951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 51051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick track += pstr_frame_data->tracks_in_layer; 51151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 51251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 51351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_frame_data->stream_count = num_dec_streams; 51451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 51551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick return num_dec_streams; 51651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick} 51751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 51851aa06e124ba688ca810b25ee0b5bb66678aac14Ray EssickWORD32 ixheaacd_decode_create(ia_exhaacplus_dec_api_struct *handle, 51951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_dec_data_struct *pstr_dec_data, 52051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 tracks_for_decoder) { 52151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 stream; 52251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 52351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 num_delay_samp = 0; 52451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 err = 0; 52551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_frame_data_struct *pstr_frame_data; 52651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 stream_count; 52751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_aac_dec_state_struct *aac_dec_handle = handle->p_state_aac; 5284908247643e9e97852e847c00bfe7c4259279538Ray Essick pstr_frame_data = &(pstr_dec_data->str_frame_data); 52951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick stream_count = pstr_frame_data->stream_count; 53051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_frame_data->stream_count = tracks_for_decoder; 53151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 53251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (stream = 0; stream < stream_count; stream++) { 53351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick UWORD32 aot = pstr_frame_data->str_audio_specific_config.audio_object_type; 53451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 53551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick switch (aot) { 53651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick case AOT_USAC: 5374908247643e9e97852e847c00bfe7c4259279538Ray Essick 538b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri err = ixheaacd_dec_data_init(handle, pstr_frame_data, 539b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri &(pstr_dec_data->str_usac_data)); 540b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri 541b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri switch (pstr_dec_data->str_usac_data.sbr_ratio_idx) { 542b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri case 0: 543b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri handle->aac_config.ui_sbr_mode = 0; 544b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri break; 545b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri case 1: 546b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri handle->aac_config.ui_sbr_mode = 1; 547b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri break; 548b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri case 2: 549b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri handle->aac_config.ui_sbr_mode = 1; 550b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri break; 551b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri case 3: 552b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri handle->aac_config.ui_sbr_mode = 3; 553b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri break; 554b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri 555b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri default: 556b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri handle->aac_config.ui_sbr_mode = 0; 557b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri } 558b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri 559b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri if (err == -1) return -1; 5604908247643e9e97852e847c00bfe7c4259279538Ray Essick 56151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick break; 56251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 56351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick default: 56451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 56551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick break; 56651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 56751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 56851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 56951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_frame_data->scal_out_object_type = 57051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_frame_data->str_audio_specific_config.audio_object_type; 57151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_frame_data->scal_out_num_channels = 57251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_frame_data->str_audio_specific_config.channel_configuration; 57351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_frame_data->scal_out_sampling_frequency = 57451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_frame_data->str_audio_specific_config.sampling_frequency; 57551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 5764908247643e9e97852e847c00bfe7c4259279538Ray Essick if (&(pstr_dec_data->str_usac_data) != NULL) { 5774908247643e9e97852e847c00bfe7c4259279538Ray Essick ia_sbr_header_data_struct usac_def_header; 57851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_audio_specific_config_struct *pstr_aud_spec_config = 57951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick &pstr_frame_data->str_audio_specific_config; 58051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_usac_config_struct *ptr_usac_config = 58151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick &(pstr_frame_data->str_audio_specific_config.str_usac_config); 58251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 58351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 inter_tes[MAX_NUM_ELEMENTS] = {0}; 58451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 bs_pvc[MAX_NUM_ELEMENTS] = {0}; 58551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 harmonic_sbr[MAX_NUM_ELEMENTS] = {0}; 5864908247643e9e97852e847c00bfe7c4259279538Ray Essick WORD32 inter_test_flag = 0; 5874908247643e9e97852e847c00bfe7c4259279538Ray Essick WORD32 bs_pvc_flag = 0; 5884908247643e9e97852e847c00bfe7c4259279538Ray Essick WORD32 harmonic_Sbr_flag = 0; 58951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 59051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_usac_decoder_config_struct *ptr_usac_dec_config = 59151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick &ptr_usac_config->str_usac_dec_config; 59251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 const num_ele = ptr_usac_dec_config->num_elements; 59351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick WORD32 elem_idx = 0; 59451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 5954908247643e9e97852e847c00bfe7c4259279538Ray Essick memset(&usac_def_header, 0, sizeof(ia_sbr_header_data_struct)); 5964908247643e9e97852e847c00bfe7c4259279538Ray Essick 59751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick for (elem_idx = 0; elem_idx < num_ele; elem_idx++) { 598b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri UWORD32 usac_ele_type = 599b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri ptr_usac_config->str_usac_dec_config.usac_element_type[elem_idx]; 600b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri ia_usac_dec_element_config_struct *ptr_usac_ele_config = 601b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri &ptr_usac_config->str_usac_dec_config 602b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri .str_usac_element_config[elem_idx]; 6034908247643e9e97852e847c00bfe7c4259279538Ray Essick 60451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ia_usac_dec_sbr_config_struct *ptr_usac_sbr_config = 60551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick &(ptr_usac_dec_config->str_usac_element_config[elem_idx] 60651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick .str_usac_sbr_config); 60751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick inter_tes[elem_idx] = 60851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick (ptr_usac_sbr_config != NULL) ? ptr_usac_sbr_config->bs_inter_tes : 0; 60951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick bs_pvc[elem_idx] = 61051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick (ptr_usac_sbr_config != NULL) ? ptr_usac_sbr_config->bs_pvc : 0; 61151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick harmonic_sbr[elem_idx] = 61251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick (ptr_usac_sbr_config != NULL) ? ptr_usac_sbr_config->harmonic_sbr : 0; 61351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 614b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri if (ptr_usac_sbr_config->bs_inter_tes) inter_test_flag = 1; 615b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri if (ptr_usac_sbr_config->bs_pvc) bs_pvc_flag = 1; 616b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri if (ptr_usac_sbr_config->harmonic_sbr) harmonic_Sbr_flag = 1; 617b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri 618b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri if ((usac_ele_type != ID_USAC_LFE) && (usac_ele_type != ID_USAC_EXT)) { 619b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri ia_usac_dec_sbr_config_struct *ptr_usac_sbr_config = 620b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri &(ptr_usac_ele_config->str_usac_sbr_config); 621b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri 622b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri usac_def_header.start_freq = ptr_usac_sbr_config->dflt_start_freq; 623b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri usac_def_header.stop_freq = ptr_usac_sbr_config->dflt_stop_freq; 624b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri usac_def_header.header_extra_1 = 625b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri ptr_usac_sbr_config->dflt_header_extra1; 626b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri usac_def_header.header_extra_2 = 627b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri ptr_usac_sbr_config->dflt_header_extra2; 628b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri usac_def_header.freq_scale = ptr_usac_sbr_config->dflt_freq_scale; 629b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri usac_def_header.alter_scale = ptr_usac_sbr_config->dflt_alter_scale; 630b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri usac_def_header.noise_bands = ptr_usac_sbr_config->dflt_noise_bands; 631b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri usac_def_header.limiter_bands = ptr_usac_sbr_config->dflt_limiter_bands; 632b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri usac_def_header.limiter_gains = ptr_usac_sbr_config->dflt_limiter_gains; 633b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri usac_def_header.interpol_freq = ptr_usac_sbr_config->dflt_interpol_freq; 634b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri usac_def_header.smoothing_mode = 635b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri ptr_usac_sbr_config->dflt_smoothing_mode; 636b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri } 6374908247643e9e97852e847c00bfe7c4259279538Ray Essick } 6384908247643e9e97852e847c00bfe7c4259279538Ray Essick 6394908247643e9e97852e847c00bfe7c4259279538Ray Essick pstr_dec_data->str_usac_data.down_samp_sbr = 0; 6404908247643e9e97852e847c00bfe7c4259279538Ray Essick 6414908247643e9e97852e847c00bfe7c4259279538Ray Essick if (pstr_dec_data->str_usac_data.sbr_ratio_idx > 0) { 6424908247643e9e97852e847c00bfe7c4259279538Ray Essick if (pstr_aud_spec_config->ext_sampling_frequency == 6434908247643e9e97852e847c00bfe7c4259279538Ray Essick pstr_aud_spec_config->sampling_frequency) { 6444908247643e9e97852e847c00bfe7c4259279538Ray Essick pstr_dec_data->str_usac_data.down_samp_sbr = 1; 6454908247643e9e97852e847c00bfe7c4259279538Ray Essick } 6464908247643e9e97852e847c00bfe7c4259279538Ray Essick if (pstr_dec_data->str_usac_data.down_samp_sbr == 0) { 6474908247643e9e97852e847c00bfe7c4259279538Ray Essick if (pstr_dec_data->str_usac_data.sbr_ratio_idx == 3) { 6484908247643e9e97852e847c00bfe7c4259279538Ray Essick pstr_frame_data->scal_out_sampling_frequency = 6494908247643e9e97852e847c00bfe7c4259279538Ray Essick 4 * pstr_frame_data->scal_out_sampling_frequency; 6504908247643e9e97852e847c00bfe7c4259279538Ray Essick } else { 6514908247643e9e97852e847c00bfe7c4259279538Ray Essick pstr_frame_data->scal_out_sampling_frequency = 6524908247643e9e97852e847c00bfe7c4259279538Ray Essick 2 * pstr_frame_data->scal_out_sampling_frequency; 6534908247643e9e97852e847c00bfe7c4259279538Ray Essick } 6544908247643e9e97852e847c00bfe7c4259279538Ray Essick } 6554908247643e9e97852e847c00bfe7c4259279538Ray Essick 6564908247643e9e97852e847c00bfe7c4259279538Ray Essick { 6574908247643e9e97852e847c00bfe7c4259279538Ray Essick void *sbr_persistent_mem_v = aac_dec_handle->sbr_persistent_mem_u; 6584908247643e9e97852e847c00bfe7c4259279538Ray Essick 6594908247643e9e97852e847c00bfe7c4259279538Ray Essick pstr_dec_data->str_usac_data.pstr_esbr_dec = ixheaacd_init_sbr( 66051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick pstr_frame_data->str_layer.sample_rate_layer, 6614908247643e9e97852e847c00bfe7c4259279538Ray Essick pstr_dec_data->str_usac_data.ccfl, 6624908247643e9e97852e847c00bfe7c4259279538Ray Essick &pstr_dec_data->str_usac_data.down_samp_sbr, sbr_persistent_mem_v, 66351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick NULL, pstr_frame_data->scal_out_num_channels, 0, 6644908247643e9e97852e847c00bfe7c4259279538Ray Essick pstr_dec_data->str_usac_data.sbr_ratio_idx, 6654908247643e9e97852e847c00bfe7c4259279538Ray Essick pstr_dec_data->str_usac_data.output_samples, &harmonic_Sbr_flag, 66651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick (void *)&usac_def_header, aac_dec_handle->str_sbr_config, 6674908247643e9e97852e847c00bfe7c4259279538Ray Essick pstr_dec_data->str_usac_data.audio_object_type); 6684908247643e9e97852e847c00bfe7c4259279538Ray Essick pstr_dec_data->str_usac_data.sbr_scratch_mem_base = 66951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick aac_dec_handle->sbr_scratch_mem_u; 67051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick if (num_ele) 6714908247643e9e97852e847c00bfe7c4259279538Ray Essick ixheaacd_setesbr_flags(sbr_persistent_mem_v, bs_pvc_flag, 6724908247643e9e97852e847c00bfe7c4259279538Ray Essick harmonic_Sbr_flag, inter_test_flag); 67351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 67451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 6754908247643e9e97852e847c00bfe7c4259279538Ray Essick if (pstr_dec_data->str_usac_data.pstr_esbr_dec == NULL) { 67651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick return -1; 67751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 67851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 67951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick } 68051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 68151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick return (num_delay_samp); 68251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick} 683