summaryrefslogtreecommitdiffstats
path: root/libSBRenc/src/code_env.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libSBRenc/src/code_env.cpp')
-rw-r--r--libSBRenc/src/code_env.cpp641
1 files changed, 0 insertions, 641 deletions
diff --git a/libSBRenc/src/code_env.cpp b/libSBRenc/src/code_env.cpp
deleted file mode 100644
index e1a28d5..0000000
--- a/libSBRenc/src/code_env.cpp
+++ /dev/null
@@ -1,641 +0,0 @@
-
-/* -----------------------------------------------------------------------------------------------------------
-Software License for The Fraunhofer FDK AAC Codec Library for Android
-
-© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
- All rights reserved.
-
- 1. INTRODUCTION
-The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements
-the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio.
-This FDK AAC Codec software is intended to be used on a wide variety of Android devices.
-
-AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual
-audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by
-independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part
-of the MPEG specifications.
-
-Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer)
-may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners
-individually for the purpose of encoding or decoding bit streams in products that are compliant with
-the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license
-these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec
-software may already be covered under those patent licenses when it is used for those licensed purposes only.
-
-Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality,
-are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional
-applications information and documentation.
-
-2. COPYRIGHT LICENSE
-
-Redistribution and use in source and binary forms, with or without modification, are permitted without
-payment of copyright license fees provided that you satisfy the following conditions:
-
-You must retain the complete text of this software license in redistributions of the FDK AAC Codec or
-your modifications thereto in source code form.
-
-You must retain the complete text of this software license in the documentation and/or other materials
-provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form.
-You must make available free of charge copies of the complete source code of the FDK AAC Codec and your
-modifications thereto to recipients of copies in binary form.
-
-The name of Fraunhofer may not be used to endorse or promote products derived from this library without
-prior written permission.
-
-You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec
-software or your modifications thereto.
-
-Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software
-and the date of any change. For modified versions of the FDK AAC Codec, the term
-"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term
-"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android."
-
-3. NO PATENT LICENSE
-
-NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer,
-ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with
-respect to this software.
-
-You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized
-by appropriate patent licenses.
-
-4. DISCLAIMER
-
-This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors
-"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties
-of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
-CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages,
-including but not limited to procurement of substitute goods or services; loss of use, data, or profits,
-or business interruption, however caused and on any theory of liability, whether in contract, strict
-liability, or tort (including negligence), arising in any way out of the use of this software, even if
-advised of the possibility of such damage.
-
-5. CONTACT INFORMATION
-
-Fraunhofer Institute for Integrated Circuits IIS
-Attention: Audio and Multimedia Departments - FDK AAC LL
-Am Wolfsmantel 33
-91058 Erlangen, Germany
-
-www.iis.fraunhofer.de/amm
-amm-info@iis.fraunhofer.de
------------------------------------------------------------------------------------------------------------ */
-
-#include "code_env.h"
-#include "sbr_rom.h"
-
-/*****************************************************************************
-
- functionname: FDKsbrEnc_InitSbrHuffmanTables
- description: initializes Huffman Tables dependent on chosen amp_res
- returns: error handle
- input:
- output:
-
-*****************************************************************************/
-INT
-FDKsbrEnc_InitSbrHuffmanTables (HANDLE_SBR_ENV_DATA sbrEnvData,
- HANDLE_SBR_CODE_ENVELOPE henv,
- HANDLE_SBR_CODE_ENVELOPE hnoise,
- AMP_RES amp_res)
-{
- if ( (!henv) || (!hnoise) || (!sbrEnvData) )
- return (1); /* not init. */
-
- sbrEnvData->init_sbr_amp_res = amp_res;
-
- switch (amp_res) {
- case SBR_AMP_RES_3_0:
- /*envelope data*/
-
- /*Level/Pan - coding */
- sbrEnvData->hufftableLevelTimeC = v_Huff_envelopeLevelC11T;
- sbrEnvData->hufftableLevelTimeL = v_Huff_envelopeLevelL11T;
- sbrEnvData->hufftableBalanceTimeC = bookSbrEnvBalanceC11T;
- sbrEnvData->hufftableBalanceTimeL = bookSbrEnvBalanceL11T;
-
- sbrEnvData->hufftableLevelFreqC = v_Huff_envelopeLevelC11F;
- sbrEnvData->hufftableLevelFreqL = v_Huff_envelopeLevelL11F;
- sbrEnvData->hufftableBalanceFreqC = bookSbrEnvBalanceC11F;
- sbrEnvData->hufftableBalanceFreqL = bookSbrEnvBalanceL11F;
-
- /*Right/Left - coding */
- sbrEnvData->hufftableTimeC = v_Huff_envelopeLevelC11T;
- sbrEnvData->hufftableTimeL = v_Huff_envelopeLevelL11T;
- sbrEnvData->hufftableFreqC = v_Huff_envelopeLevelC11F;
- sbrEnvData->hufftableFreqL = v_Huff_envelopeLevelL11F;
-
- sbrEnvData->codeBookScfLavBalance = CODE_BOOK_SCF_LAV_BALANCE11;
- sbrEnvData->codeBookScfLav = CODE_BOOK_SCF_LAV11;
-
- sbrEnvData->si_sbr_start_env_bits = SI_SBR_START_ENV_BITS_AMP_RES_3_0;
- sbrEnvData->si_sbr_start_env_bits_balance = SI_SBR_START_ENV_BITS_BALANCE_AMP_RES_3_0;
- break;
-
- case SBR_AMP_RES_1_5:
- /*envelope data*/
-
- /*Level/Pan - coding */
- sbrEnvData->hufftableLevelTimeC = v_Huff_envelopeLevelC10T;
- sbrEnvData->hufftableLevelTimeL = v_Huff_envelopeLevelL10T;
- sbrEnvData->hufftableBalanceTimeC = bookSbrEnvBalanceC10T;
- sbrEnvData->hufftableBalanceTimeL = bookSbrEnvBalanceL10T;
-
- sbrEnvData->hufftableLevelFreqC = v_Huff_envelopeLevelC10F;
- sbrEnvData->hufftableLevelFreqL = v_Huff_envelopeLevelL10F;
- sbrEnvData->hufftableBalanceFreqC = bookSbrEnvBalanceC10F;
- sbrEnvData->hufftableBalanceFreqL = bookSbrEnvBalanceL10F;
-
- /*Right/Left - coding */
- sbrEnvData->hufftableTimeC = v_Huff_envelopeLevelC10T;
- sbrEnvData->hufftableTimeL = v_Huff_envelopeLevelL10T;
- sbrEnvData->hufftableFreqC = v_Huff_envelopeLevelC10F;
- sbrEnvData->hufftableFreqL = v_Huff_envelopeLevelL10F;
-
- sbrEnvData->codeBookScfLavBalance = CODE_BOOK_SCF_LAV_BALANCE10;
- sbrEnvData->codeBookScfLav = CODE_BOOK_SCF_LAV10;
-
- sbrEnvData->si_sbr_start_env_bits = SI_SBR_START_ENV_BITS_AMP_RES_1_5;
- sbrEnvData->si_sbr_start_env_bits_balance = SI_SBR_START_ENV_BITS_BALANCE_AMP_RES_1_5;
- break;
-
- default:
- return (1); /* undefined amp_res mode */
- }
-
- /* these are common to both amp_res values */
- /*Noise data*/
-
- /*Level/Pan - coding */
- sbrEnvData->hufftableNoiseLevelTimeC = v_Huff_NoiseLevelC11T;
- sbrEnvData->hufftableNoiseLevelTimeL = v_Huff_NoiseLevelL11T;
- sbrEnvData->hufftableNoiseBalanceTimeC = bookSbrNoiseBalanceC11T;
- sbrEnvData->hufftableNoiseBalanceTimeL = bookSbrNoiseBalanceL11T;
-
- sbrEnvData->hufftableNoiseLevelFreqC = v_Huff_envelopeLevelC11F;
- sbrEnvData->hufftableNoiseLevelFreqL = v_Huff_envelopeLevelL11F;
- sbrEnvData->hufftableNoiseBalanceFreqC = bookSbrEnvBalanceC11F;
- sbrEnvData->hufftableNoiseBalanceFreqL = bookSbrEnvBalanceL11F;
-
-
- /*Right/Left - coding */
- sbrEnvData->hufftableNoiseTimeC = v_Huff_NoiseLevelC11T;
- sbrEnvData->hufftableNoiseTimeL = v_Huff_NoiseLevelL11T;
- sbrEnvData->hufftableNoiseFreqC = v_Huff_envelopeLevelC11F;
- sbrEnvData->hufftableNoiseFreqL = v_Huff_envelopeLevelL11F;
-
- sbrEnvData->si_sbr_start_noise_bits = SI_SBR_START_NOISE_BITS_AMP_RES_3_0;
- sbrEnvData->si_sbr_start_noise_bits_balance = SI_SBR_START_NOISE_BITS_BALANCE_AMP_RES_3_0;
-
-
- /* init envelope tables and codebooks */
- henv->codeBookScfLavBalanceTime = sbrEnvData->codeBookScfLavBalance;
- henv->codeBookScfLavBalanceFreq = sbrEnvData->codeBookScfLavBalance;
- henv->codeBookScfLavLevelTime = sbrEnvData->codeBookScfLav;
- henv->codeBookScfLavLevelFreq = sbrEnvData->codeBookScfLav;
- henv->codeBookScfLavTime = sbrEnvData->codeBookScfLav;
- henv->codeBookScfLavFreq = sbrEnvData->codeBookScfLav;
-
- henv->hufftableLevelTimeL = sbrEnvData->hufftableLevelTimeL;
- henv->hufftableBalanceTimeL = sbrEnvData->hufftableBalanceTimeL;
- henv->hufftableTimeL = sbrEnvData->hufftableTimeL;
- henv->hufftableLevelFreqL = sbrEnvData->hufftableLevelFreqL;
- henv->hufftableBalanceFreqL = sbrEnvData->hufftableBalanceFreqL;
- henv->hufftableFreqL = sbrEnvData->hufftableFreqL;
-
- henv->codeBookScfLavFreq = sbrEnvData->codeBookScfLav;
- henv->codeBookScfLavTime = sbrEnvData->codeBookScfLav;
-
- henv->start_bits = sbrEnvData->si_sbr_start_env_bits;
- henv->start_bits_balance = sbrEnvData->si_sbr_start_env_bits_balance;
-
-
- /* init noise tables and codebooks */
-
- hnoise->codeBookScfLavBalanceTime = CODE_BOOK_SCF_LAV_BALANCE11;
- hnoise->codeBookScfLavBalanceFreq = CODE_BOOK_SCF_LAV_BALANCE11;
- hnoise->codeBookScfLavLevelTime = CODE_BOOK_SCF_LAV11;
- hnoise->codeBookScfLavLevelFreq = CODE_BOOK_SCF_LAV11;
- hnoise->codeBookScfLavTime = CODE_BOOK_SCF_LAV11;
- hnoise->codeBookScfLavFreq = CODE_BOOK_SCF_LAV11;
-
- hnoise->hufftableLevelTimeL = sbrEnvData->hufftableNoiseLevelTimeL;
- hnoise->hufftableBalanceTimeL = sbrEnvData->hufftableNoiseBalanceTimeL;
- hnoise->hufftableTimeL = sbrEnvData->hufftableNoiseTimeL;
- hnoise->hufftableLevelFreqL = sbrEnvData->hufftableNoiseLevelFreqL;
- hnoise->hufftableBalanceFreqL = sbrEnvData->hufftableNoiseBalanceFreqL;
- hnoise->hufftableFreqL = sbrEnvData->hufftableNoiseFreqL;
-
-
- hnoise->start_bits = sbrEnvData->si_sbr_start_noise_bits;
- hnoise->start_bits_balance = sbrEnvData->si_sbr_start_noise_bits_balance;
-
- /* No delta coding in time from the previous frame due to 1.5dB FIx-FIX rule */
- henv->upDate = 0;
- hnoise->upDate = 0;
- return (0);
-}
-
-/*******************************************************************************
- Functionname: indexLow2High
- *******************************************************************************
-
- Description: Nice small patch-functions in order to cope with non-factor-2
- ratios between high-res and low-res
-
- Arguments: INT offset, INT index, FREQ_RES res
-
- Return: INT
-
-*******************************************************************************/
-static INT indexLow2High(INT offset, INT index, FREQ_RES res)
-{
-
- if(res == FREQ_RES_LOW)
- {
- if (offset >= 0)
- {
- if (index < offset)
- return(index);
- else
- return(2*index - offset);
- }
- else
- {
- offset = -offset;
- if (index < offset)
- return(2*index+index);
- else
- return(2*index + offset);
- }
- }
- else
- return(index);
-}
-
-
-
-/*******************************************************************************
- Functionname: mapLowResEnergyVal
- *******************************************************************************
-
- Description:
-
- Arguments: INT currVal,INT* prevData, INT offset, INT index, FREQ_RES res
-
- Return: none
-
-*******************************************************************************/
-static void mapLowResEnergyVal(SCHAR currVal, SCHAR* prevData, INT offset, INT index, FREQ_RES res)
-{
-
- if(res == FREQ_RES_LOW)
- {
- if (offset >= 0)
- {
- if(index < offset)
- prevData[index] = currVal;
- else
- {
- prevData[2*index - offset] = currVal;
- prevData[2*index+1 - offset] = currVal;
- }
- }
- else
- {
- offset = -offset;
- if (index < offset)
- {
- prevData[3*index] = currVal;
- prevData[3*index+1] = currVal;
- prevData[3*index+2] = currVal;
- }
- else
- {
- prevData[2*index + offset] = currVal;
- prevData[2*index + 1 + offset] = currVal;
- }
- }
- }
- else
- prevData[index] = currVal;
-}
-
-
-
-/*******************************************************************************
- Functionname: computeBits
- *******************************************************************************
-
- Description:
-
- Arguments: INT delta,
- INT codeBookScfLavLevel,
- INT codeBookScfLavBalance,
- const UCHAR * hufftableLevel,
- const UCHAR * hufftableBalance, INT coupling, INT channel)
-
- Return: INT
-
-*******************************************************************************/
-static INT
-computeBits (SCHAR *delta,
- INT codeBookScfLavLevel,
- INT codeBookScfLavBalance,
- const UCHAR * hufftableLevel,
- const UCHAR * hufftableBalance, INT coupling, INT channel)
-{
- INT index;
- INT delta_bits = 0;
-
- if (coupling) {
- if (channel == 1)
- {
- if (*delta < 0)
- index = fixMax(*delta, -codeBookScfLavBalance);
- else
- index = fixMin(*delta, codeBookScfLavBalance);
-
- if (index != *delta) {
- *delta = index;
- return (10000);
- }
-
- delta_bits = hufftableBalance[index + codeBookScfLavBalance];
- }
- else {
- if (*delta < 0)
- index = fixMax(*delta, -codeBookScfLavLevel);
- else
- index = fixMin(*delta, codeBookScfLavLevel);
-
- if (index != *delta) {
- *delta = index;
- return (10000);
- }
- delta_bits = hufftableLevel[index + codeBookScfLavLevel];
- }
- }
- else {
- if (*delta < 0)
- index = fixMax(*delta, -codeBookScfLavLevel);
- else
- index = fixMin(*delta, codeBookScfLavLevel);
-
- if (index != *delta) {
- *delta = index;
- return (10000);
- }
- delta_bits = hufftableLevel[index + codeBookScfLavLevel];
- }
-
- return (delta_bits);
-}
-
-
-
-
-/*******************************************************************************
- Functionname: FDKsbrEnc_codeEnvelope
- *******************************************************************************
-
- Description:
-
- Arguments: INT *sfb_nrg,
- const FREQ_RES *freq_res,
- SBR_CODE_ENVELOPE * h_sbrCodeEnvelope,
- INT *directionVec, INT scalable, INT nEnvelopes, INT channel,
- INT headerActive)
-
- Return: none
- h_sbrCodeEnvelope->sfb_nrg_prev is modified !
- sfb_nrg is modified
- h_sbrCodeEnvelope->update is modfied !
- *directionVec is modified
-
-*******************************************************************************/
-void
-FDKsbrEnc_codeEnvelope(SCHAR *sfb_nrg,
- const FREQ_RES *freq_res,
- SBR_CODE_ENVELOPE *h_sbrCodeEnvelope,
- INT *directionVec,
- INT coupling,
- INT nEnvelopes,
- INT channel,
- INT headerActive)
-{
- INT i, no_of_bands, band;
- FIXP_DBL tmp1,tmp2,tmp3,dF_edge_1stEnv;
- SCHAR *ptr_nrg;
-
- INT codeBookScfLavLevelTime;
- INT codeBookScfLavLevelFreq;
- INT codeBookScfLavBalanceTime;
- INT codeBookScfLavBalanceFreq;
- const UCHAR *hufftableLevelTimeL;
- const UCHAR *hufftableBalanceTimeL;
- const UCHAR *hufftableLevelFreqL;
- const UCHAR *hufftableBalanceFreqL;
-
- INT offset = h_sbrCodeEnvelope->offset;
- INT envDataTableCompFactor;
-
- INT delta_F_bits = 0, delta_T_bits = 0;
- INT use_dT;
-
- SCHAR delta_F[MAX_FREQ_COEFFS];
- SCHAR delta_T[MAX_FREQ_COEFFS];
- SCHAR last_nrg, curr_nrg;
-
- tmp1 = FL2FXCONST_DBL(0.5f) >> (DFRACT_BITS-16-1);
- tmp2 = h_sbrCodeEnvelope->dF_edge_1stEnv >> (DFRACT_BITS-16);
- tmp3 = (FIXP_DBL)(((INT)(LONG)h_sbrCodeEnvelope->dF_edge_incr*h_sbrCodeEnvelope->dF_edge_incr_fac) >> (DFRACT_BITS-16));
-
- dF_edge_1stEnv = tmp1 + tmp2 + tmp3;
-
- if (coupling) {
- codeBookScfLavLevelTime = h_sbrCodeEnvelope->codeBookScfLavLevelTime;
- codeBookScfLavLevelFreq = h_sbrCodeEnvelope->codeBookScfLavLevelFreq;
- codeBookScfLavBalanceTime = h_sbrCodeEnvelope->codeBookScfLavBalanceTime;
- codeBookScfLavBalanceFreq = h_sbrCodeEnvelope->codeBookScfLavBalanceFreq;
- hufftableLevelTimeL = h_sbrCodeEnvelope->hufftableLevelTimeL;
- hufftableBalanceTimeL = h_sbrCodeEnvelope->hufftableBalanceTimeL;
- hufftableLevelFreqL = h_sbrCodeEnvelope->hufftableLevelFreqL;
- hufftableBalanceFreqL = h_sbrCodeEnvelope->hufftableBalanceFreqL;
- }
- else {
- codeBookScfLavLevelTime = h_sbrCodeEnvelope->codeBookScfLavTime;
- codeBookScfLavLevelFreq = h_sbrCodeEnvelope->codeBookScfLavFreq;
- codeBookScfLavBalanceTime = h_sbrCodeEnvelope->codeBookScfLavTime;
- codeBookScfLavBalanceFreq = h_sbrCodeEnvelope->codeBookScfLavFreq;
- hufftableLevelTimeL = h_sbrCodeEnvelope->hufftableTimeL;
- hufftableBalanceTimeL = h_sbrCodeEnvelope->hufftableTimeL;
- hufftableLevelFreqL = h_sbrCodeEnvelope->hufftableFreqL;
- hufftableBalanceFreqL = h_sbrCodeEnvelope->hufftableFreqL;
- }
-
- if(coupling == 1 && channel == 1)
- envDataTableCompFactor = 1; /*should be one when the new huffman-tables are ready*/
- else
- envDataTableCompFactor = 0;
-
-
- if (h_sbrCodeEnvelope->deltaTAcrossFrames == 0)
- h_sbrCodeEnvelope->upDate = 0;
-
- /* no delta coding in time in case of a header */
- if (headerActive)
- h_sbrCodeEnvelope->upDate = 0;
-
-
- for (i = 0; i < nEnvelopes; i++)
- {
- if (freq_res[i] == FREQ_RES_HIGH)
- no_of_bands = h_sbrCodeEnvelope->nSfb[FREQ_RES_HIGH];
- else
- no_of_bands = h_sbrCodeEnvelope->nSfb[FREQ_RES_LOW];
-
-
- ptr_nrg = sfb_nrg;
- curr_nrg = *ptr_nrg;
-
- delta_F[0] = curr_nrg >> envDataTableCompFactor;
-
- if (coupling && channel == 1)
- delta_F_bits = h_sbrCodeEnvelope->start_bits_balance;
- else
- delta_F_bits = h_sbrCodeEnvelope->start_bits;
-
-
- if(h_sbrCodeEnvelope->upDate != 0)
- {
- delta_T[0] = (curr_nrg - h_sbrCodeEnvelope->sfb_nrg_prev[0]) >> envDataTableCompFactor;
-
- delta_T_bits = computeBits (&delta_T[0],
- codeBookScfLavLevelTime,
- codeBookScfLavBalanceTime,
- hufftableLevelTimeL,
- hufftableBalanceTimeL, coupling, channel);
- }
-
-
- mapLowResEnergyVal(curr_nrg, h_sbrCodeEnvelope->sfb_nrg_prev, offset, 0, freq_res[i]);
-
- /* ensure that nrg difference is not higher than codeBookScfLavXXXFreq */
- if ( coupling && channel == 1 ) {
- for (band = no_of_bands - 1; band > 0; band--) {
- if ( ptr_nrg[band] - ptr_nrg[band-1] > codeBookScfLavBalanceFreq ) {
- ptr_nrg[band-1] = ptr_nrg[band] - codeBookScfLavBalanceFreq;
- }
- }
- for (band = 1; band < no_of_bands; band++) {
- if ( ptr_nrg[band-1] - ptr_nrg[band] > codeBookScfLavBalanceFreq ) {
- ptr_nrg[band] = ptr_nrg[band-1] - codeBookScfLavBalanceFreq;
- }
- }
- }
- else {
- for (band = no_of_bands - 1; band > 0; band--) {
- if ( ptr_nrg[band] - ptr_nrg[band-1] > codeBookScfLavLevelFreq ) {
- ptr_nrg[band-1] = ptr_nrg[band] - codeBookScfLavLevelFreq;
- }
- }
- for (band = 1; band < no_of_bands; band++) {
- if ( ptr_nrg[band-1] - ptr_nrg[band] > codeBookScfLavLevelFreq ) {
- ptr_nrg[band] = ptr_nrg[band-1] - codeBookScfLavLevelFreq;
- }
- }
- }
-
-
- /* Coding loop*/
- for (band = 1; band < no_of_bands; band++)
- {
- last_nrg = (*ptr_nrg);
- ptr_nrg++;
- curr_nrg = (*ptr_nrg);
-
- delta_F[band] = (curr_nrg - last_nrg) >> envDataTableCompFactor;
-
- delta_F_bits += computeBits (&delta_F[band],
- codeBookScfLavLevelFreq,
- codeBookScfLavBalanceFreq,
- hufftableLevelFreqL,
- hufftableBalanceFreqL, coupling, channel);
-
- if(h_sbrCodeEnvelope->upDate != 0)
- {
- delta_T[band] = curr_nrg - h_sbrCodeEnvelope->sfb_nrg_prev[indexLow2High(offset, band, freq_res[i])];
- delta_T[band] = delta_T[band] >> envDataTableCompFactor;
- }
-
- mapLowResEnergyVal(curr_nrg, h_sbrCodeEnvelope->sfb_nrg_prev, offset, band, freq_res[i]);
-
- if(h_sbrCodeEnvelope->upDate != 0)
- {
- delta_T_bits += computeBits (&delta_T[band],
- codeBookScfLavLevelTime,
- codeBookScfLavBalanceTime,
- hufftableLevelTimeL,
- hufftableBalanceTimeL, coupling, channel);
- }
- }
-
- /* Replace sfb_nrg with deltacoded samples and set flag */
- if (i == 0) {
- INT tmp_bits;
- tmp_bits = (((delta_T_bits * dF_edge_1stEnv) >> (DFRACT_BITS-18)) + (FIXP_DBL)1) >> 1;
- use_dT = (h_sbrCodeEnvelope->upDate != 0 && (delta_F_bits > tmp_bits));
- }
- else
- use_dT = (delta_T_bits < delta_F_bits && h_sbrCodeEnvelope->upDate != 0);
-
- if (use_dT)
- {
- directionVec[i] = TIME;
- FDKmemcpy (sfb_nrg, delta_T, no_of_bands * sizeof (SCHAR));
- }
- else {
- h_sbrCodeEnvelope->upDate = 0;
- directionVec[i] = FREQ;
- FDKmemcpy (sfb_nrg, delta_F, no_of_bands * sizeof (SCHAR));
- }
- sfb_nrg += no_of_bands;
- h_sbrCodeEnvelope->upDate = 1;
- }
-
-}
-
-
-/*******************************************************************************
- Functionname: FDKsbrEnc_InitSbrCodeEnvelope
- *******************************************************************************
-
- Description:
-
- Arguments:
-
- Return:
-
-*******************************************************************************/
-INT
-FDKsbrEnc_InitSbrCodeEnvelope (HANDLE_SBR_CODE_ENVELOPE h_sbrCodeEnvelope,
- INT *nSfb,
- INT deltaTAcrossFrames,
- FIXP_DBL dF_edge_1stEnv,
- FIXP_DBL dF_edge_incr)
-{
-
- FDKmemclear(h_sbrCodeEnvelope,sizeof(SBR_CODE_ENVELOPE));
-
- h_sbrCodeEnvelope->deltaTAcrossFrames = deltaTAcrossFrames;
- h_sbrCodeEnvelope->dF_edge_1stEnv = dF_edge_1stEnv;
- h_sbrCodeEnvelope->dF_edge_incr = dF_edge_incr;
- h_sbrCodeEnvelope->dF_edge_incr_fac = 0;
- h_sbrCodeEnvelope->upDate = 0;
- h_sbrCodeEnvelope->nSfb[FREQ_RES_LOW] = nSfb[FREQ_RES_LOW];
- h_sbrCodeEnvelope->nSfb[FREQ_RES_HIGH] = nSfb[FREQ_RES_HIGH];
- h_sbrCodeEnvelope->offset = 2*h_sbrCodeEnvelope->nSfb[FREQ_RES_LOW] - h_sbrCodeEnvelope->nSfb[FREQ_RES_HIGH];
-
- return (0);
-}