12228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
22228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* -----------------------------------------------------------------------------------------------------------
32228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectSoftware License for The Fraunhofer FDK AAC Codec Library for Android
42228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
54f0d97057c5c640b25518358886f8c47da9fc052Jean-Michel Trivi� Copyright  1995 - 2013 Fraunhofer-Gesellschaft zur F�rderung der angewandten Forschung e.V.
62228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  All rights reserved.
72228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
82228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1.    INTRODUCTION
92228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements
102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectthe MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio.
112228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThis FDK AAC Codec software is intended to be used on a wide variety of Android devices.
122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
132228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual
142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectaudio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by
152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectindependent studies and is widely deployed. AAC has been standardized by ISO and IEC as part
162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectof the MPEG specifications.
172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
182228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectPatent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer)
192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectmay be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners
202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectindividually for the purpose of encoding or decoding bit streams in products that are compliant with
212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectthe ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license
222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectthese patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec
232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectsoftware may already be covered under those patent licenses when it is used for those licensed purposes only.
242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
252228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectCommercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality,
262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectare also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional
272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectapplications information and documentation.
282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project2.    COPYRIGHT LICENSE
302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
312228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectRedistribution and use in source and binary forms, with or without modification, are permitted without
322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectpayment of copyright license fees provided that you satisfy the following conditions:
332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
342228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectYou must retain the complete text of this software license in redistributions of the FDK AAC Codec or
352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectyour modifications thereto in source code form.
362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
372228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectYou must retain the complete text of this software license in the documentation and/or other materials
382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectprovided with redistributions of the FDK AAC Codec or your modifications thereto in binary form.
392228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectYou must make available free of charge copies of the complete source code of the FDK AAC Codec and your
402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectmodifications thereto to recipients of copies in binary form.
412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
422228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe name of Fraunhofer may not be used to endorse or promote products derived from this library without
432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectprior written permission.
442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
452228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectYou may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec
462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectsoftware or your modifications thereto.
472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
482228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectYour modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software
492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectand the date of any change. For modified versions of the FDK AAC Codec, the term
502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term
512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android."
522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project3.    NO PATENT LICENSE
542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
552228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectNO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer,
562228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with
572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectrespect to this software.
582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
592228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectYou may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized
602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectby appropriate patent licenses.
612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project4.    DISCLAIMER
632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
642228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThis FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors
652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties
662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectof merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
672228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectCONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages,
682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectincluding but not limited to procurement of substitute goods or services; loss of use, data, or profits,
692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projector business interruption, however caused and on any theory of liability, whether in contract, strict
702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectliability, or tort (including negligence), arising in any way out of the use of this software, even if
712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectadvised of the possibility of such damage.
722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project5.    CONTACT INFORMATION
742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
752228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectFraunhofer Institute for Integrated Circuits IIS
762228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAttention: Audio and Multimedia Departments - FDK AAC LL
772228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAm Wolfsmantel 33
782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project91058 Erlangen, Germany
792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectwww.iis.fraunhofer.de/amm
812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectamm-info@iis.fraunhofer.de
822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project----------------------------------------------------------------------------------------------------------- */
832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#include "fram_gen.h"
852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#include "sbr_misc.h"
862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#include "genericStds.h"
882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic const SBR_FRAME_INFO frameInfo1_2048 = {
902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            1,
912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0, 16},
922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            {FREQ_RES_HIGH},
932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project             0,
942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project             1,
952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project             {0, 16} };
962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic const SBR_FRAME_INFO frameInfo2_2048 = {
982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            2,
992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0,  8, 16},
1002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            {FREQ_RES_HIGH, FREQ_RES_HIGH},
1012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            0,
1022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            2,
1032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0,  8, 16} };
1042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic const SBR_FRAME_INFO frameInfo4_2048 = {
1062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            4,
1072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0,  4,  8, 12, 16},
1082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            {FREQ_RES_HIGH, FREQ_RES_HIGH, FREQ_RES_HIGH, FREQ_RES_HIGH},
1092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            0,
1102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            2,
1112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0,  8, 16} };
1122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic const SBR_FRAME_INFO frameInfo1_2304 = {
1142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            1,
1152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0, 18},
1162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            {FREQ_RES_HIGH},
1172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            0,
1182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            1,
1192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0, 18} };
1202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic const SBR_FRAME_INFO frameInfo2_2304 = {
1222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            2,
1232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0,  9, 18},
1242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            {FREQ_RES_HIGH, FREQ_RES_HIGH},
1252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            0,
1262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            2,
1272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0,  9, 18} };
1282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic const SBR_FRAME_INFO frameInfo4_2304 = {
1302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            4,
1312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0,  5,  9, 14, 18},
1322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            {FREQ_RES_HIGH, FREQ_RES_HIGH, FREQ_RES_HIGH, FREQ_RES_HIGH},
1332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            0,
1342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            2,
1352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0,  9, 18} };
1362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic const SBR_FRAME_INFO frameInfo1_1920 = {
1382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            1,
1392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0, 15},
1402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            {FREQ_RES_HIGH},
1412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            0,
1422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            1,
1432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0, 15} };
1442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic const SBR_FRAME_INFO frameInfo2_1920 = {
1462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            2,
1472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0,  8, 15},
1482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            {FREQ_RES_HIGH, FREQ_RES_HIGH},
1492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            0,
1502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            2,
1512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0,  8, 15} };
1522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic const SBR_FRAME_INFO frameInfo4_1920 = {
1542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            4,
1552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0,  4,  8, 12, 15},
1562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            {FREQ_RES_HIGH, FREQ_RES_HIGH, FREQ_RES_HIGH, FREQ_RES_HIGH},
1572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            0,
1582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            2,
1592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0,  8, 15} };
1602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic const SBR_FRAME_INFO frameInfo1_1152 = {
1622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            1,
1632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0,  9},
1642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            {FREQ_RES_HIGH},
1652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            0,
1662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            1,
1672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0,  9} };
1682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic const SBR_FRAME_INFO frameInfo2_1152 = {
1702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            2,
1712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0,  5,  9},
1722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            {FREQ_RES_HIGH, FREQ_RES_HIGH},
1732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            0,
1742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            2,
1752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0,  5,  9} };
1762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic const SBR_FRAME_INFO frameInfo4_1152 = {
1782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            4,
1792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0,  2,  5,
1802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              7,  9},
1812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            {FREQ_RES_HIGH, FREQ_RES_HIGH, FREQ_RES_HIGH, FREQ_RES_HIGH},
1822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            0,
1832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            2,
1842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            { 0,  5,  9} };
1852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* AACLD frame info */
1882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic const SBR_FRAME_INFO frameInfo1_512LD = {
1892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   1,
1902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   {0, 8},
1912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   {FREQ_RES_HIGH},
1922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   0,
1932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   1,
1942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   {0, 8}};
1952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic const SBR_FRAME_INFO frameInfo2_512LD = {
1972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   2,
1982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   {0, 4, 8},
1992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   {FREQ_RES_HIGH, FREQ_RES_HIGH},
2002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   0,
2012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   2,
2022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   {0, 4, 8}};
2032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic const SBR_FRAME_INFO frameInfo4_512LD = {
2052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   4,
2062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   {0, 2, 4, 6, 8},
2072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   {FREQ_RES_HIGH, FREQ_RES_HIGH, FREQ_RES_HIGH, FREQ_RES_HIGH},
2082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   0,
2092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   2,
2102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   {0, 4, 8}};
2112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic int
2132228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectcalcFillLengthMax (int tranPos,          /*!< input : transient position (ref: tran det) */
2142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   int numberTimeSlots   /*!< input : number of timeslots */
2152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   );
2162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void
2182228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectfillFrameTran (const int *v_tuningSegm,      /*!< tuning: desired segment lengths */
2192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               const int *v_tuningFreq,      /*!< tuning: desired frequency resolutions */
2202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               int tran,                     /*!< input : position of transient */
2212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               int *v_bord,                  /*!< memNew: borders */
2222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               int *length_v_bord,           /*!< memNew: # borders */
2232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               int *v_freq,                  /*!< memNew: frequency resolutions */
2242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               int *length_v_freq,           /*!< memNew: # frequency resolutions */
2252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               int *bmin,                    /*!< hlpNew: first mandatory border */
2262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               int *bmax                     /*!< hlpNew: last  mandatory border */
2272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               );
2282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void fillFramePre (INT dmax, INT *v_bord, INT *length_v_bord,
2302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                          INT *v_freq, INT *length_v_freq, INT bmin,
2312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                          INT rest);
2322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void fillFramePost (INT *parts, INT *d, INT dmax, INT *v_bord,
2342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                           INT *length_v_bord, INT *v_freq,
2352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                           INT *length_v_freq, INT bmax,
2362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                           INT bufferFrameStart, INT numberTimeSlots, INT fmax);
2372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void fillFrameInter (INT *nL, const int *v_tuningSegm, INT *v_bord,
2392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                            INT *length_v_bord, INT bmin, INT *v_freq,
2402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                            INT *length_v_freq, INT *v_bordFollow,
2412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                            INT *length_v_bordFollow, INT *v_freqFollow,
2422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                            INT *length_v_freqFollow, INT i_fillFollow,
2432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                            INT dmin, INT dmax, INT numberTimeSlots);
2442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void calcFrameClass (FRAME_CLASS *frameClass, FRAME_CLASS *frameClassOld, INT tranFlag,
2462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                            INT *spreadFlag);
2472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void specialCase (INT *spreadFlag, INT allowSpread, INT *v_bord,
2492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                         INT *length_v_bord, INT *v_freq, INT *length_v_freq,
2502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                         INT *parts, INT d);
2512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void calcCmonBorder (INT *i_cmon, INT *i_tran, INT *v_bord,
2532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                            INT *length_v_bord, INT tran,
2542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                            INT bufferFrameStart, INT numberTimeSlots);
2552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void keepForFollowUp (INT *v_bordFollow, INT *length_v_bordFollow,
2572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                             INT *v_freqFollow, INT *length_v_freqFollow,
2582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                             INT *i_tranFollow, INT *i_fillFollow,
2592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                             INT *v_bord, INT *length_v_bord, INT *v_freq,
2602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                             INT i_cmon, INT i_tran, INT parts, INT numberTimeSlots);
2612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void calcCtrlSignal (HANDLE_SBR_GRID hSbrGrid, FRAME_CLASS frameClass,
2632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                            INT *v_bord, INT length_v_bord, INT *v_freq,
2642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                            INT length_v_freq, INT i_cmon, INT i_tran,
2652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                            INT spreadFlag, INT nL);
2662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void ctrlSignal2FrameInfo (HANDLE_SBR_GRID hSbrGrid,
2682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                  HANDLE_SBR_FRAME_INFO hFrameInfo,
2692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                  INT freq_res_fixfix);
2702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* table for 8 time slot index */
2732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic const int envelopeTable_8 [8][5] = {
2742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* transientIndex  nEnv, tranIdx, shortEnv, border1, border2, ... */
2752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* borders from left to right side; -1 = not in use */
2762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|T-|------]*/  { 2, 0, 0, 1, -1 },
2772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|-T-|-----]*/  { 2, 0, 0, 2, -1 },
2782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[--|T-|----]*/  { 3, 1, 1, 2,  4 },
2792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[---|T-|---]*/  { 3, 1, 1, 3,  5 },
2802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[----|T-|--]*/  { 3, 1, 1, 4,  6 },
2812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[-----|T--|]*/  { 2, 1, 1, 5, -1 },
2822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[------|T-|]*/  { 2, 1, 1, 6, -1 },
2832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[-------|T|]*/  { 2, 1, 1, 7, -1 },
2842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project};
2852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* table for 16 time slot index */
2872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic const int envelopeTable_16 [16][6] = {
2882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* transientIndex  nEnv, tranIdx, shortEnv, border1, border2, ... */
2892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* length from left to right side; -1 = not in use */
2902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|T---|------------|]*/ { 2, 0, 0, 4, -1, -1},
2912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|-T---|-----------|]*/ { 2, 0, 0, 5, -1, -1},
2922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|--|T---|----------]*/ { 3, 1, 1, 2,  6, -1},
2932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|---|T---|---------]*/ { 3, 1, 1, 3,  7, -1},
2942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|----|T---|--------]*/ { 3, 1, 1, 4,  8, -1},
2952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|-----|T---|-------]*/ { 3, 1, 1, 5,  9, -1},
2962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|------|T---|------]*/ { 3, 1, 1, 6, 10, -1},
2972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|-------|T---|-----]*/ { 3, 1, 1, 7, 11, -1},
2982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|--------|T---|----]*/ { 3, 1, 1, 8, 12, -1},
2992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|---------|T---|---]*/ { 3, 1, 1, 9, 13, -1},
3002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|----------|T---|--]*/ { 3, 1, 1,10, 14, -1},
3012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|-----------|T----|]*/ { 2, 1, 1,11, -1, -1},
3022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|------------|T---|]*/ { 2, 1, 1,12, -1, -1},
3032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|-------------|T--|]*/ { 2, 1, 1,13, -1, -1},
3042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|--------------|T-|]*/ { 2, 1, 1,14, -1, -1},
3052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|---------------|T|]*/ { 2, 1, 1,15, -1, -1},
3062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project};
3072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* table for 15 time slot index */
3092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic const int envelopeTable_15 [15][6] = {
3102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* transientIndex  nEnv, tranIdx, shortEnv, border1, border2, ... */
3112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* length from left to right side; -1 = not in use */
3122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|T---|------------]*/ { 2, 0, 0, 4, -1, -1},
3132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|-T---|-----------]*/ { 2, 0, 0, 5, -1, -1},
3142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|--|T---|---------]*/ { 3, 1, 1, 2,  6, -1},
3152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|---|T---|--------]*/ { 3, 1, 1, 3,  7, -1},
3162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|----|T---|-------]*/ { 3, 1, 1, 4,  8, -1},
3172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|-----|T---|------]*/ { 3, 1, 1, 5,  9, -1},
3182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|------|T---|-----]*/ { 3, 1, 1, 6, 10, -1},
3192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|-------|T---|----]*/ { 3, 1, 1, 7, 11, -1},
3202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|--------|T---|---]*/ { 3, 1, 1, 8, 12, -1},
3212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|---------|T---|--]*/ { 3, 1, 1, 9, 13, -1},
3222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|----------|T----|]*/ { 2, 1, 1,10, -1, -1},
3232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|-----------|T---|]*/ { 2, 1, 1,11, -1, -1},
3242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|------------|T--|]*/ { 2, 1, 1,12, -1, -1},
3252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|-------------|T-|]*/ { 2, 1, 1,13, -1, -1},
3262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*[|--------------|T|]*/ { 2, 1, 1,14, -1, -1},
3272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project};
3282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic const int minFrameTranDistance = 4;
3302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic const FREQ_RES freqRes_table_8[] = {FREQ_RES_LOW, FREQ_RES_LOW, FREQ_RES_LOW, FREQ_RES_LOW, FREQ_RES_LOW,
3322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  FREQ_RES_HIGH, FREQ_RES_HIGH, FREQ_RES_HIGH, FREQ_RES_HIGH};
3332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic const FREQ_RES freqRes_table_16[16] = {
3352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* size of envelope */
3362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* 0-4 */    FREQ_RES_LOW, FREQ_RES_LOW, FREQ_RES_LOW, FREQ_RES_LOW, FREQ_RES_LOW,
3372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* 5-9 */    FREQ_RES_LOW, FREQ_RES_HIGH, FREQ_RES_HIGH, FREQ_RES_HIGH, FREQ_RES_HIGH,
3382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* 10-16 */  FREQ_RES_HIGH, FREQ_RES_HIGH, FREQ_RES_HIGH, FREQ_RES_HIGH, FREQ_RES_HIGH,
3392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project             FREQ_RES_HIGH };
3402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void generateFixFixOnly ( HANDLE_SBR_FRAME_INFO hSbrFrameInfo,
3422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                 HANDLE_SBR_GRID hSbrGrid,
3432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                 int tranPosInternal,
3442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                 int numberTimeSlots
3452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                               );
3462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*!
3492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  Functionname: FDKsbrEnc_frameInfoGenerator
3502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  Description:  produces the FRAME_INFO struct for the current frame
3522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  Arguments:    hSbrEnvFrame          - pointer to sbr envelope handle
3542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                v_pre_transient_info  - pointer to transient info vector
3552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                v_transient_info      - pointer to previous transient info vector
3562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                v_tuning              - pointer to tuning vector
3572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Return:      frame_info        - pointer to SBR_FRAME_INFO struct
3592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project*******************************************************************************/
3612228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectHANDLE_SBR_FRAME_INFO
3622228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectFDKsbrEnc_frameInfoGenerator (HANDLE_SBR_ENVELOPE_FRAME hSbrEnvFrame,
3632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                    UCHAR *v_transient_info,
3642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                    UCHAR *v_transient_info_pre,
3652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                    int ldGrid,
3662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                    const int *v_tuning)
3672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{
3682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT numEnv, tranPosInternal=0, bmin=0, bmax=0, parts, d, i_cmon=0, i_tran=0, nL;
3692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT fmax = 0;
3702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT *v_bord = hSbrEnvFrame->v_bord;
3722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT *v_freq = hSbrEnvFrame->v_freq;
3732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT *v_bordFollow = hSbrEnvFrame->v_bordFollow;
3742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT *v_freqFollow = hSbrEnvFrame->v_freqFollow;
3752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT *length_v_bordFollow = &hSbrEnvFrame->length_v_bordFollow;
3782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT *length_v_freqFollow = &hSbrEnvFrame->length_v_freqFollow;
3792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT *length_v_bord = &hSbrEnvFrame->length_v_bord;
3802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT *length_v_freq = &hSbrEnvFrame->length_v_freq;
3812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT *spreadFlag = &hSbrEnvFrame->spreadFlag;
3822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT *i_tranFollow = &hSbrEnvFrame->i_tranFollow;
3832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT *i_fillFollow = &hSbrEnvFrame->i_fillFollow;
3842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  FRAME_CLASS *frameClassOld = &hSbrEnvFrame->frameClassOld;
3852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  FRAME_CLASS frameClass = FIXFIX;
3862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT allowSpread = hSbrEnvFrame->allowSpread;
3892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT numEnvStatic = hSbrEnvFrame->numEnvStatic;
3902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT staticFraming = hSbrEnvFrame->staticFraming;
3912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT dmin = hSbrEnvFrame->dmin;
3922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT dmax = hSbrEnvFrame->dmax;
3932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT bufferFrameStart = hSbrEnvFrame->SbrGrid.bufferFrameStart;
3952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT numberTimeSlots = hSbrEnvFrame->SbrGrid.numberTimeSlots;
3962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT frameMiddleSlot = hSbrEnvFrame->frameMiddleSlot;
3972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT tranPos = v_transient_info[0];
3992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT tranFlag = v_transient_info[1];
4002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
4012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  const int *v_tuningSegm = v_tuning;
4022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  const int *v_tuningFreq = v_tuning + 3;
4032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
4042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrEnvFrame->v_tuningSegm = v_tuningSegm;
4052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT freq_res_fixfix = hSbrEnvFrame->freq_res_fixfix;
4062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
4072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  if (ldGrid) {
4082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* in case there was a transient at the very end of the previous frame, start with a transient envelope */
4092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if(v_transient_info_pre[1] && (numberTimeSlots - v_transient_info_pre[0] < minFrameTranDistance)){
4102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      tranFlag = 1;
4112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      tranPos  = 0;
4122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
4132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
4142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
4152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  /*
4162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * Synopsis:
4172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   *
4182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * The frame generator creates the time-/frequency-grid for one SBR frame.
4192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * Input signals are provided by the transient detector and the frame
4202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * splitter (transientDetectNew() & FrameSplitter() in tran_det.c).  The
4212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * framing is controlled by adjusting tuning parameters stored in
4222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * FRAME_GEN_TUNING.  The parameter values are dependent on frame lengths
4232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * and bitrates, and may in the future be signal dependent.
4242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   *
4252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * The envelope borders are stored for frame generator internal use in
4262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * aBorders.  The contents of aBorders represent positions along the time
4272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * axis given in the figures in fram_gen.h (the "frame-generator" rows).
4282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * The unit is "time slot".  The figures in fram_gen.h also define the
4292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * detection ranges for the transient detector.  For every border in
4302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * aBorders, there is a corresponding entry in aFreqRes, which defines the
4312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * frequency resolution of the envelope following (delimited by) the
4322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * border.
4332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   *
4342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * When no transients are present, FIXFIX class frames are used.  The
4352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * frame splitter decides whether to use one or two envelopes in the
4362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * FIXFIX frame.  "Sparse transients" (separated by a few frames without
4372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * transients) are handeled by [FIXVAR, VARFIX] pairs or (depending on
4382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * tuning and transient position relative the nominal frame boundaries)
4392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * by [FIXVAR, VARVAR, VARFIX] triples.  "Tight transients" (in
4402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * consecutive frames) are handeled by [..., VARVAR, VARVAR, ...]
4412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * sequences.
4422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   *
4432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * The generator assumes that transients are "sparse", and designs
4442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * borders for [FIXVAR, VARFIX] pairs right away, where the first frame
4452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * corresponds to the present frame.  At the next call of the generator
4462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * it is known whether the transient actually is "sparse" or not.  If
4472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * 'yes', the already calculated VARFIX borders are used.  If 'no', new
4482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * borders, meeting the requirements of the "tight" transient, are
4492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * calculated.
4502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   *
4512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * The generator produces two outputs:  A "clear-text bitstream" stored in
4522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * SBR_GRID, and a straight-forward representation of the grid stored in
4532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * SBR_FRAME_INFO.  The former is subsequently converted to the actual
4542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * bitstream sbr_grid() (encodeSbrGrid() in bit_sbr.c).  The latter is
4552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * used by other encoder functions, such as the envelope estimator
4562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * (calculateSbrEnvelope() in env_est.c) and the noise floor and missing
4572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   * harmonics detector (TonCorrParamExtr() in nf_est.c).
4582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   */
4592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
4602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  if (staticFraming) {
4612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*--------------------------------------------------------------------------
4622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      Ignore transient detector
4632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    ---------------------------------------------------------------------------*/
4642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
4652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    frameClass = FIXFIX;
4662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    numEnv = numEnvStatic;      /* {1,2,4,8} */
4672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    *frameClassOld = FIXFIX;    /* for change to dyn */
4682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrEnvFrame->SbrGrid.bs_num_env = numEnv;
4692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrEnvFrame->SbrGrid.frameClass = frameClass;
4702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
4712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  else {
4722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*--------------------------------------------------------------------------
4732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      Calculate frame class to use
4742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    ---------------------------------------------------------------------------*/
4752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    calcFrameClass (&frameClass, frameClassOld, tranFlag, spreadFlag);
4762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
4772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* patch for new frame class FIXFIXonly for AAC LD */
4782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (tranFlag && ldGrid) {
4792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      frameClass     = FIXFIXonly;
4802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      *frameClassOld = FIXFIX;
4812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
4822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
4832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*
4842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project     * every transient is processed below by inserting
4852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project     *
4862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project     * - one border at the onset of the transient
4872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project     * - one or more "decay borders" (after the onset of the transient)
4882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project     * - optionally one "attack border" (before the onset of the transient)
4892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project     *
4902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project     * those borders are referred to as "mandatory borders" and are
4912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project     * defined by the 'segmentLength' array in FRAME_GEN_TUNING
4922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project     *
4932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project     * the frequency resolutions of the corresponding envelopes are
4942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project     * defined by the 'segmentRes' array in FRAME_GEN_TUNING
4952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project     */
4962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
4972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*--------------------------------------------------------------------------
4982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      Design frame (or follow-up old design)
4992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    ---------------------------------------------------------------------------*/
5002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (tranFlag) {             /* Always for FixVar, often but not always for VarVar */
5012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /*--------------------------------------------------------------------------
5022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        Design part of T/F-grid around the new transient
5032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      ---------------------------------------------------------------------------*/
5042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
5052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      tranPosInternal = frameMiddleSlot + tranPos + bufferFrameStart ;      /* FH 00-06-26 */
5062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /*
5072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        add mandatory borders around transient
5082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      */
5092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
5102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      fillFrameTran ( v_tuningSegm,
5112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                      v_tuningFreq,
5122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                      tranPosInternal,
5132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                      v_bord,
5142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                      length_v_bord,
5152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                      v_freq,
5162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                      length_v_freq,
5172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                     &bmin,
5182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                     &bmax );
5192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
5202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /* make sure we stay within the maximum SBR frame overlap */
5212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      fmax = calcFillLengthMax(tranPos, numberTimeSlots);
5222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
5232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
5242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    switch (frameClass) {
5252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
5262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case FIXFIXonly:
5272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDK_ASSERT(ldGrid);
5282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      tranPosInternal = tranPos;
5292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      generateFixFixOnly ( &(hSbrEnvFrame->SbrFrameInfo),
5302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                           &(hSbrEnvFrame->SbrGrid),
5312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                           tranPosInternal,
5322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                           numberTimeSlots
5332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                           );
5342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
5352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      return &(hSbrEnvFrame->SbrFrameInfo);
5362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
5372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case FIXVAR:
5382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
5392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /*--------------------------------------------------------------------------
5402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project         Design remaining parts of T/F-grid (assuming next frame is VarFix)
5412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      ---------------------------------------------------------------------------*/
5422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
5432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /*--------------------------------------------------------------------------
5442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        Fill region before new transient:
5452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      ---------------------------------------------------------------------------*/
5462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      fillFramePre (dmax, v_bord, length_v_bord, v_freq, length_v_freq,
5472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                    bmin, bmin - bufferFrameStart);     /* FH 00-06-26 */
5482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
5492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /*--------------------------------------------------------------------------
5502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        Fill region after new transient:
5512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      ---------------------------------------------------------------------------*/
5522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      fillFramePost (&parts, &d, dmax, v_bord, length_v_bord, v_freq,
5532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                     length_v_freq, bmax, bufferFrameStart, numberTimeSlots, fmax);
5542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
5552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /*--------------------------------------------------------------------------
5562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        Take care of special case:
5572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      ---------------------------------------------------------------------------*/
5582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      if (parts == 1 && d < dmin)       /* no fill, short last envelope */
5592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        specialCase (spreadFlag, allowSpread, v_bord, length_v_bord,
5602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                     v_freq, length_v_freq, &parts, d);
5612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
5622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /*--------------------------------------------------------------------------
5632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        Calculate common border (split-point)
5642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      ---------------------------------------------------------------------------*/
5652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      calcCmonBorder (&i_cmon, &i_tran, v_bord, length_v_bord, tranPosInternal,
5662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                      bufferFrameStart, numberTimeSlots);       /* FH 00-06-26 */
5672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
5682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /*--------------------------------------------------------------------------
5692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        Extract data for proper follow-up in next frame
5702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      ---------------------------------------------------------------------------*/
5712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      keepForFollowUp (v_bordFollow, length_v_bordFollow, v_freqFollow,
5722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                       length_v_freqFollow, i_tranFollow, i_fillFollow,
5732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                       v_bord, length_v_bord, v_freq, i_cmon, i_tran, parts, numberTimeSlots);  /* FH 00-06-26 */
5742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
5752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /*--------------------------------------------------------------------------
5762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        Calculate control signal
5772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      ---------------------------------------------------------------------------*/
5782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      calcCtrlSignal (&hSbrEnvFrame->SbrGrid, frameClass,
5792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                      v_bord, *length_v_bord, v_freq, *length_v_freq,
5802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                      i_cmon, i_tran, *spreadFlag, DC);
5812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
5822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case VARFIX:
5832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /*--------------------------------------------------------------------------
5842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        Follow-up old transient - calculate control signal
5852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      ---------------------------------------------------------------------------*/
5862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      calcCtrlSignal (&hSbrEnvFrame->SbrGrid, frameClass,
5872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                      v_bordFollow, *length_v_bordFollow, v_freqFollow,
5882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                      *length_v_freqFollow, DC, *i_tranFollow,
5892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                      *spreadFlag, DC);
5902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
5912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case VARVAR:
5922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      if (*spreadFlag) {        /* spread across three frames */
5932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        /*--------------------------------------------------------------------------
5942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          Follow-up old transient - calculate control signal
5952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        ---------------------------------------------------------------------------*/
5962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        calcCtrlSignal (&hSbrEnvFrame->SbrGrid,
5972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                        frameClass, v_bordFollow, *length_v_bordFollow,
5982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                        v_freqFollow, *length_v_freqFollow, DC,
5992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                        *i_tranFollow, *spreadFlag, DC);
6002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        *spreadFlag = 0;
6022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        /*--------------------------------------------------------------------------
6042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          Extract data for proper follow-up in next frame
6052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        ---------------------------------------------------------------------------*/
6062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        v_bordFollow[0] = hSbrEnvFrame->SbrGrid.bs_abs_bord_1 - numberTimeSlots; /* FH 00-06-26 */
6072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        v_freqFollow[0] = 1;
6082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        *length_v_bordFollow = 1;
6092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        *length_v_freqFollow = 1;
6102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        *i_tranFollow = -DC;
6122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        *i_fillFollow = -DC;
6132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      }
6142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      else {
6152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        /*--------------------------------------------------------------------------
6162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          Design remaining parts of T/F-grid (assuming next frame is VarFix)
6172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          adapt or fill region before new transient:
6182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        ---------------------------------------------------------------------------*/
6192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        fillFrameInter (&nL, v_tuningSegm, v_bord, length_v_bord, bmin,
6202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                        v_freq, length_v_freq, v_bordFollow,
6212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                        length_v_bordFollow, v_freqFollow,
6222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                        length_v_freqFollow, *i_fillFollow, dmin, dmax,
6232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                        numberTimeSlots);
6242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        /*--------------------------------------------------------------------------
6262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          Fill after transient:
6272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        ---------------------------------------------------------------------------*/
6282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        fillFramePost (&parts, &d, dmax, v_bord, length_v_bord, v_freq,
6292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                       length_v_freq, bmax, bufferFrameStart, numberTimeSlots, fmax);
6302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        /*--------------------------------------------------------------------------
6322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          Take care of special case:
6332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        ---------------------------------------------------------------------------*/
6342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        if (parts == 1 && d < dmin)     /*% no fill, short last envelope */
6352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          specialCase (spreadFlag, allowSpread, v_bord, length_v_bord,
6362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                       v_freq, length_v_freq, &parts, d);
6372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        /*--------------------------------------------------------------------------
6392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          Calculate common border (split-point)
6402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        ---------------------------------------------------------------------------*/
6412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        calcCmonBorder (&i_cmon, &i_tran, v_bord, length_v_bord, tranPosInternal,
6422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                        bufferFrameStart, numberTimeSlots);
6432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        /*--------------------------------------------------------------------------
6452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          Extract data for proper follow-up in next frame
6462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        ---------------------------------------------------------------------------*/
6472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        keepForFollowUp (v_bordFollow, length_v_bordFollow,
6482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                         v_freqFollow, length_v_freqFollow,
6492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                         i_tranFollow, i_fillFollow, v_bord,
6502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                         length_v_bord, v_freq, i_cmon, i_tran, parts, numberTimeSlots);
6512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        /*--------------------------------------------------------------------------
6532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          Calculate control signal
6542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        ---------------------------------------------------------------------------*/
6552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        calcCtrlSignal (&hSbrEnvFrame->SbrGrid,
6562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                        frameClass, v_bord, *length_v_bord, v_freq,
6572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                        *length_v_freq, i_cmon, i_tran, 0, nL);
6582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      }
6592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
6602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case FIXFIX:
6612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      if (tranPos == 0)
6622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        numEnv = 1;
6632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      else
6642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        numEnv = 2;
6652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrEnvFrame->SbrGrid.bs_num_env = numEnv;
6672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrEnvFrame->SbrGrid.frameClass = frameClass;
6682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
6702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    default:
6712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDK_ASSERT(0);
6722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
6732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
6742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  /*-------------------------------------------------------------------------
6762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    Convert control signal to frame info struct
6772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  ---------------------------------------------------------------------------*/
6782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  ctrlSignal2FrameInfo (&hSbrEnvFrame->SbrGrid,
6792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                        &hSbrEnvFrame->SbrFrameInfo,
6802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                        freq_res_fixfix);
6812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  return &hSbrEnvFrame->SbrFrameInfo;
6832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project}
6842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/***************************************************************************/
6872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*!
6882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  \brief    Gnerates frame info for FIXFIXonly frame class used for low delay version
6892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  \return   nothing
6912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ****************************************************************************/
6922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void generateFixFixOnly ( HANDLE_SBR_FRAME_INFO hSbrFrameInfo,
6932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                 HANDLE_SBR_GRID hSbrGrid,
6942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                 int tranPosInternal,
6952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                 int numberTimeSlots
6962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                               )
6972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{
6982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  int nEnv, i, k=0, tranIdx;
6992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  const int *pTable = NULL;
7002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  const FREQ_RES *freqResTable = NULL;
7012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  switch (numberTimeSlots) {
7032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      case 8:
7042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          pTable = envelopeTable_8[tranPosInternal];
7052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          freqResTable = freqRes_table_8;
7062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          break;
7072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      case 15:
7082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          pTable = envelopeTable_15[tranPosInternal];
7092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          freqResTable = freqRes_table_16;
7102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          break;
7112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      case 16:
7122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          pTable = envelopeTable_16[tranPosInternal];
7132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          freqResTable = freqRes_table_16;
7142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          break;
7152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
7162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  /* look number of envolpes in table */
7182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  nEnv = pTable[0];
7192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  /* look up envolpe distribution in table */
7202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  for (i=1; i<nEnv; i++)
7212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrFrameInfo->borders[i] = pTable[i+2];
7222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  /* open and close frame border */
7242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrFrameInfo->borders[0]    = 0;
7252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrFrameInfo->borders[nEnv] = numberTimeSlots;
7262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  /* adjust segment-frequency-resolution according to the segment-length */
7282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  for (i=0; i<nEnv; i++){
7292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    k = hSbrFrameInfo->borders[i+1] - hSbrFrameInfo->borders[i];
7302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrFrameInfo->freqRes[i] = freqResTable[k];
7312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrGrid->v_f[i] = freqResTable[k];
7322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
7332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrFrameInfo->nEnvelopes = nEnv;
7352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrFrameInfo->shortEnv   = pTable[2];
7362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  /* transient idx */
7372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  tranIdx = pTable[1];
7382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  /* add noise floors */
7402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrFrameInfo->bordersNoise[0] = 0;
7412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrFrameInfo->bordersNoise[1] = hSbrFrameInfo->borders[tranIdx?tranIdx:1];
7422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrFrameInfo->bordersNoise[2] = numberTimeSlots;
7432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrFrameInfo->nNoiseEnvelopes = 2;
7442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrGrid->frameClass = FIXFIXonly;
7462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrGrid->bs_abs_bord = tranPosInternal;
7472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrGrid->bs_num_env = nEnv;
7482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project}
7502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*******************************************************************************
7542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Functionname:  FDKsbrEnc_initFrameInfoGenerator
7552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *******************************************************************************
7562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Description:
7582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Arguments:   hSbrEnvFrame  - pointer to sbr envelope handle
7602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              allowSpread   - commandline parameter
7612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              numEnvStatic  - commandline parameter
7622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              staticFraming - commandline parameter
7632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Return:      none
7652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project*******************************************************************************/
7672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid
7682228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectFDKsbrEnc_initFrameInfoGenerator (HANDLE_SBR_ENVELOPE_FRAME  hSbrEnvFrame,
7692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                          INT allowSpread,
7702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                          INT numEnvStatic,
7712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                          INT staticFraming,
7722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                          INT timeSlots,
7732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                          INT freq_res_fixfix
7742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                          ,int ldGrid
7752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                          )
7762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{                               /* FH 00-06-26 */
7782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  FDKmemclear(hSbrEnvFrame,sizeof(SBR_ENVELOPE_FRAME ));
7802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  /* Initialisation */
7832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrEnvFrame->frameClassOld = FIXFIX;
7842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrEnvFrame->spreadFlag = 0;
7852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrEnvFrame->allowSpread = allowSpread;
7872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrEnvFrame->numEnvStatic = numEnvStatic;
7882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrEnvFrame->staticFraming = staticFraming;
7892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrEnvFrame->freq_res_fixfix = freq_res_fixfix;
7902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrEnvFrame->length_v_bord = 0;
7922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrEnvFrame->length_v_bordFollow = 0;
7932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrEnvFrame->length_v_freq = 0;
7952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrEnvFrame->length_v_freqFollow = 0;
7962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrEnvFrame->i_tranFollow = 0;
7982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrEnvFrame->i_fillFollow = 0;
7992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  hSbrEnvFrame->SbrGrid.numberTimeSlots = timeSlots;
8012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  if (ldGrid) {
8032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*case CODEC_AACLD:*/
8042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrEnvFrame->dmin = 2;
8052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrEnvFrame->dmax = 16;
8062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrEnvFrame->frameMiddleSlot = FRAME_MIDDLE_SLOT_512LD;
8072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  } else
8082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  switch(timeSlots){
8092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case NUMBER_TIME_SLOTS_1920:
8102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrEnvFrame->dmin = 4;
8112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrEnvFrame->dmax = 12;
8122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrEnvFrame->SbrGrid.bufferFrameStart = 0;
8132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrEnvFrame->frameMiddleSlot = FRAME_MIDDLE_SLOT_1920;
8142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    break;
8152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case NUMBER_TIME_SLOTS_2048:
8162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrEnvFrame->dmin = 4;
8172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrEnvFrame->dmax = 12;
8182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrEnvFrame->SbrGrid.bufferFrameStart = 0;
8192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrEnvFrame->frameMiddleSlot = FRAME_MIDDLE_SLOT_2048;
8202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    break;
8212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case NUMBER_TIME_SLOTS_1152:
8222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrEnvFrame->dmin = 2;
8232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrEnvFrame->dmax = 8;
8242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrEnvFrame->SbrGrid.bufferFrameStart = 0;
8252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrEnvFrame->frameMiddleSlot = FRAME_MIDDLE_SLOT_1152;
8262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    break;
8272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case NUMBER_TIME_SLOTS_2304:
8282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrEnvFrame->dmin = 4;
8292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrEnvFrame->dmax = 15;
8302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrEnvFrame->SbrGrid.bufferFrameStart = 0;
8312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrEnvFrame->frameMiddleSlot = FRAME_MIDDLE_SLOT_2304;
8322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    break;
8332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    default:
8342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDK_ASSERT(0);
8352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
8362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project}
8382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*******************************************************************************
8412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Functionname:  fillFrameTran
8422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *******************************************************************************
8432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Description:  Add mandatory borders, as described by the tuning vector
8452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               and the current transient position
8462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Arguments:
8482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      modified:
8492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_bord        - int pointer to v_bord vector
8502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              length_v_bord - length of v_bord vector
8512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_freq        - int pointer to v_freq vector
8522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              length_v_freq - length of v_freq vector
8532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              bmin          - int pointer to bmin (call by reference)
8542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              bmax          - int pointer to bmax (call by reference)
8552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      not modified:
8562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              tran          - position of transient
8572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_tuningSegm  - int pointer to v_tuningSegm vector
8582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_tuningFreq  - int pointer to v_tuningFreq vector
8592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Return:      none
8612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project*******************************************************************************/
8632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void
8642228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectfillFrameTran (const int *v_tuningSegm,      /*!< tuning: desired segment lengths */
8652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               const int *v_tuningFreq,      /*!< tuning: desired frequency resolutions */
8662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               int tran,                     /*!< input : position of transient */
8672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               int *v_bord,                  /*!< memNew: borders */
8682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               int *length_v_bord,           /*!< memNew: # borders */
8692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               int *v_freq,                  /*!< memNew: frequency resolutions */
8702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               int *length_v_freq,           /*!< memNew: # frequency resolutions */
8712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               int *bmin,                    /*!< hlpNew: first mandatory border */
8722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               int *bmax                     /*!< hlpNew: last  mandatory border */
8732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               )
8742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{
8752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  int bord, i;
8762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  *length_v_bord = 0;
8782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  *length_v_freq = 0;
8792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  /* add attack env leading border (optional) */
8812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  if (v_tuningSegm[0]) {
8822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* v_bord = [(Ba)] start of attack env */
8832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    FDKsbrEnc_AddRight (v_bord, length_v_bord, (tran - v_tuningSegm[0]));
8842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* v_freq = [(Fa)] res of attack env */
8862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    FDKsbrEnc_AddRight (v_freq, length_v_freq, v_tuningFreq[0]);
8872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
8882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  /* add attack env trailing border/first decay env leading border */
8902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  bord = tran;
8912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  FDKsbrEnc_AddRight (v_bord, length_v_bord, tran);   /* v_bord = [(Ba),Bd1] */
8922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  /* add first decay env trailing border/2:nd decay env leading border */
8942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  if (v_tuningSegm[1]) {
8952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    bord += v_tuningSegm[1];
8962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* v_bord = [(Ba),Bd1,Bd2] */
8982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    FDKsbrEnc_AddRight (v_bord, length_v_bord, bord);
8992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* v_freq = [(Fa),Fd1] */
9012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    FDKsbrEnc_AddRight (v_freq, length_v_freq, v_tuningFreq[1]);
9022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
9032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  /* add 2:nd decay env trailing border (optional) */
9052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  if (v_tuningSegm[2] != 0) {
9062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    bord += v_tuningSegm[2];
9072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* v_bord = [(Ba),Bd1, Bd2,(Bd3)] */
9092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    FDKsbrEnc_AddRight (v_bord, length_v_bord, bord);
9102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* v_freq = [(Fa),Fd1,(Fd2)] */
9122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    FDKsbrEnc_AddRight (v_freq, length_v_freq, v_tuningFreq[2]);
9132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
9142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  /*  v_freq = [(Fa),Fd1,(Fd2),1] */
9162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  FDKsbrEnc_AddRight (v_freq, length_v_freq, 1);
9172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  /*  calc min and max values of mandatory borders */
9202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  *bmin = v_bord[0];
9212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  for (i = 0; i < *length_v_bord; i++)
9222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (v_bord[i] < *bmin)
9232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      *bmin = v_bord[i];
9242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  *bmax = v_bord[0];
9262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  for (i = 0; i < *length_v_bord; i++)
9272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (v_bord[i] > *bmax)
9282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      *bmax = v_bord[i];
9292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project}
9312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*******************************************************************************
9352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Functionname:  fillFramePre
9362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *******************************************************************************
9372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Description: Add borders before mandatory borders, if needed
9392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Arguments:
9412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project       modified:
9422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_bord        - int pointer to v_bord vector
9432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              length_v_bord - length of v_bord vector
9442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_freq        - int pointer to v_freq vector
9452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              length_v_freq - length of v_freq vector
9462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project       not modified:
9472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              dmax          - int value
9482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              bmin          - int value
9492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              rest          - int value
9502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Return:      none
9522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project*******************************************************************************/
9542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void
9552228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectfillFramePre (INT dmax,
9562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              INT *v_bord, INT *length_v_bord,
9572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              INT *v_freq, INT *length_v_freq,
9582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              INT bmin, INT rest)
9592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{
9602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  /*
9612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    input state:
9622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    v_bord = [(Ba),Bd1, Bd2 ,(Bd3)]
9632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    v_freq = [(Fa),Fd1,(Fd2),1 ]
9642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  */
9652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT parts, d, j, S, s = 0, segm, bord;
9672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  /*
9692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    start with one envelope
9702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  */
9712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  parts = 1;
9732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  d = rest;
9742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  /*
9762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    calc # of additional envelopes and corresponding lengths
9772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  */
9782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  while (d > dmax) {
9802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    parts++;
9812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    segm = rest / parts;
9832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    S = (segm - 2)>>1;
9842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    s = fixMin (8, 2 * S + 2);
9852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    d = rest - (parts - 1) * s;
9862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
9872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  /*
9892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    add borders before mandatory borders
9902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  */
9912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  bord = bmin;
9932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  for (j = 0; j <= parts - 2; j++) {
9952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    bord = bord - s;
9962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* v_bord = [...,(Bf),(Ba),Bd1, Bd2 ,(Bd3)] */
9982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    FDKsbrEnc_AddLeft (v_bord, length_v_bord, bord);
9992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* v_freq = [...,(1 ),(Fa),Fd1,(Fd2), 1   ] */
10012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    FDKsbrEnc_AddLeft (v_freq, length_v_freq, 1);
10022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
10032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project}
10042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/***************************************************************************/
10062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*!
10072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  \brief Overlap control
10082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  Calculate max length of trailing fill segments, such that we always get a
10102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  border within the frame overlap region
10112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  \return void
10132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project****************************************************************************/
10152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic int
10162228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectcalcFillLengthMax (int tranPos,          /*!< input : transient position (ref: tran det) */
10172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   int numberTimeSlots   /*!< input : number of timeslots */
10182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   )
10192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{
10202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  int fmax;
10212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  /*
10232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    calculate transient position within envelope buffer
10242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  */
10252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  switch (numberTimeSlots)
10262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  {
10272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case NUMBER_TIME_SLOTS_2048:
10282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        if (tranPos < 4)
10292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          fmax = 6;
10302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        else if (tranPos == 4 || tranPos == 5)
10312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          fmax = 4;
10322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        else
10332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          fmax = 8;
10342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        break;
10352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case NUMBER_TIME_SLOTS_1920:
10372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        if (tranPos < 4)
10382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          fmax = 5;
10392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        else if (tranPos == 4 || tranPos == 5)
10402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          fmax = 3;
10412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        else
10422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          fmax = 7;
10432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        break;
10442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    default:
10462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        fmax = 8;
10472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        break;
10482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
10492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  return fmax;
10512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project}
10522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*******************************************************************************
10542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Functionname:  fillFramePost
10552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *******************************************************************************
10562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Description: -Add borders after mandatory borders, if needed
10582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               Make a preliminary design of next frame,
10592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               assuming no transient is present there
10602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Arguments:
10622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project       modified:
10632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              parts         - int pointer to parts (call by reference)
10642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              d             - int pointer to d (call by reference)
10652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_bord        - int pointer to v_bord vector
10662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              length_v_bord - length of v_bord vector
10672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_freq        - int pointer to v_freq vector
10682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              length_v_freq - length of v_freq vector
10692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        not modified:
10702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              bmax          - int value
10712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              dmax          - int value
10722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Return:      none
10742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project*******************************************************************************/
10762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void
10772228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectfillFramePost (INT *parts, INT *d, INT dmax, INT *v_bord, INT *length_v_bord,
10782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               INT *v_freq, INT *length_v_freq, INT bmax,
10792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project               INT bufferFrameStart, INT numberTimeSlots, INT fmax)
10802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{
10812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT j, rest, segm, S, s = 0, bord;
10822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  /*
10842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    input state:
10852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    v_bord = [...,(Bf),(Ba),Bd1, Bd2 ,(Bd3)]
10862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    v_freq = [...,(1 ),(Fa),Fd1,(Fd2),1    ]
10872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  */
10882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  rest = bufferFrameStart + 2 * numberTimeSlots - bmax;
10902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  *d = rest;
10912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  if (*d > 0) {
10932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    *parts = 1;           /* start with one envelope */
10942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* calc # of additional envelopes and corresponding lengths */
10962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    while (*d > dmax) {
10982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      *parts = *parts + 1;
10992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      segm = rest / (*parts);
11012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      S = (segm - 2)>>1;
11022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      s = fixMin (fmax, 2 * S + 2);
11032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      *d = rest - (*parts - 1) * s;
11042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
11052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* add borders after mandatory borders */
11072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    bord = bmax;
11092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    for (j = 0; j <= *parts - 2; j++) {
11102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      bord += s;
11112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /* v_bord =  [...,(Bf),(Ba),Bd1, Bd2 ,(Bd3),(Bf)] */
11132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKsbrEnc_AddRight (v_bord, length_v_bord, bord);
11142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /* v_freq =  [...,(1 ),(Fa),Fd1,(Fd2), 1   , 1! ,1] */
11162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKsbrEnc_AddRight (v_freq, length_v_freq, 1);
11172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
11182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
11192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  else {
11202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    *parts = 1;
11212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* remove last element from v_bord and v_freq */
11232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    *length_v_bord = *length_v_bord - 1;
11252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    *length_v_freq = *length_v_freq - 1;
11262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
11282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project}
11292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*******************************************************************************
11332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Functionname:  fillFrameInter
11342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *******************************************************************************
11352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Description:
11372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Arguments:   nL                  -
11392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_tuningSegm        -
11402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_bord              -
11412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              length_v_bord       -
11422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              bmin                -
11432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_freq              -
11442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              length_v_freq       -
11452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_bordFollow        -
11462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              length_v_bordFollow -
11472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_freqFollow        -
11482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              length_v_freqFollow -
11492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              i_fillFollow        -
11502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              dmin                -
11512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              dmax                -
11522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Return:      none
11542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project*******************************************************************************/
11562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void
11572228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectfillFrameInter (INT *nL, const int *v_tuningSegm, INT *v_bord, INT *length_v_bord,
11582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                INT bmin, INT *v_freq, INT *length_v_freq, INT *v_bordFollow,
11592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                INT *length_v_bordFollow, INT *v_freqFollow,
11602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                INT *length_v_freqFollow, INT i_fillFollow, INT dmin,
11612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                INT dmax, INT numberTimeSlots)
11622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{
11632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT middle, b_new, numBordFollow, bordMaxFollow, i;
11642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  if (numberTimeSlots != NUMBER_TIME_SLOTS_1152) {
11662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* % remove fill borders: */
11682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (i_fillFollow >= 1) {
11692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      *length_v_bordFollow = i_fillFollow;
11702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      *length_v_freqFollow = i_fillFollow;
11712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
11722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    numBordFollow = *length_v_bordFollow;
11742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    bordMaxFollow = v_bordFollow[numBordFollow - 1];
11752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* remove even more borders if needed */
11772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    middle = bmin - bordMaxFollow;
11782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    while (middle < 0) {
11792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      numBordFollow--;
11802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      bordMaxFollow = v_bordFollow[numBordFollow - 1];
11812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      middle = bmin - bordMaxFollow;
11822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
11832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    *length_v_bordFollow = numBordFollow;
11852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    *length_v_freqFollow = numBordFollow;
11862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    *nL = numBordFollow - 1;
11872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    b_new = *length_v_bord;
11892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (middle <= dmax) {
11922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      if (middle >= dmin) {       /* concatenate */
11932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        FDKsbrEnc_AddVecLeft (v_bord, length_v_bord, v_bordFollow, *length_v_bordFollow);
11942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        FDKsbrEnc_AddVecLeft (v_freq, length_v_freq, v_freqFollow, *length_v_freqFollow);
11952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      }
11962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      else {
11982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        if (v_tuningSegm[0] != 0) {       /* remove one new border and concatenate */
11992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          *length_v_bord = b_new - 1;
12002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          FDKsbrEnc_AddVecLeft (v_bord, length_v_bord, v_bordFollow,
12012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              *length_v_bordFollow);
12022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          *length_v_freq = b_new - 1;
12042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          FDKsbrEnc_AddVecLeft (v_freq + 1, length_v_freq, v_freqFollow,
12052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              *length_v_freqFollow);
12062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        }
12072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        else {
12082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          if (*length_v_bordFollow > 1) { /* remove one old border and concatenate */
12092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            FDKsbrEnc_AddVecLeft (v_bord, length_v_bord, v_bordFollow,
12102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                *length_v_bordFollow - 1);
12112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            FDKsbrEnc_AddVecLeft (v_freq, length_v_freq, v_freqFollow,
12122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                *length_v_bordFollow - 1);
12132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            *nL = *nL - 1;
12152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          }
12162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          else {                  /* remove new "transient" border and concatenate */
12172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            for (i = 0; i < *length_v_bord - 1; i++)
12192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_bord[i] = v_bord[i + 1];
12202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            for (i = 0; i < *length_v_freq - 1; i++)
12222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_freq[i] = v_freq[i + 1];
12232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            *length_v_bord = b_new - 1;
12252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            *length_v_freq = b_new - 1;
12262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            FDKsbrEnc_AddVecLeft (v_bord, length_v_bord, v_bordFollow,
12282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                *length_v_bordFollow);
12292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            FDKsbrEnc_AddVecLeft (v_freq, length_v_freq, v_freqFollow,
12302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                *length_v_freqFollow);
12312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          }
12322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        }
12332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      }
12342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
12352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    else {                        /* middle > dmax */
12362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      fillFramePre (dmax, v_bord, length_v_bord, v_freq, length_v_freq, bmin,
12382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          middle);
12392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKsbrEnc_AddVecLeft (v_bord, length_v_bord, v_bordFollow, *length_v_bordFollow);
12402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKsbrEnc_AddVecLeft (v_freq, length_v_freq, v_freqFollow, *length_v_freqFollow);
12412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
12422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
12452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  else { /* numberTimeSlots==NUMBER_TIME_SLOTS_1152 */
12462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    INT l,m;
12482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*------------------------------------------------------------------------
12512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      remove fill borders
12522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      ------------------------------------------------------------------------*/
12532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (i_fillFollow >= 1) {
12542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      *length_v_bordFollow = i_fillFollow;
12552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      *length_v_freqFollow = i_fillFollow;
12562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
12572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    numBordFollow = *length_v_bordFollow;
12592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    bordMaxFollow = v_bordFollow[numBordFollow - 1];
12602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*------------------------------------------------------------------------
12622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      remove more borders if necessary to eliminate overlap
12632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      ------------------------------------------------------------------------*/
12642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* check for overlap */
12662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    middle = bmin - bordMaxFollow;
12672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* intervals:
12692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project       i)             middle <  0     : overlap, must remove borders
12702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project       ii)       0 <= middle <  dmin  : no overlap but too tight, must remove borders
12712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project       iii)   dmin <= middle <= dmax  : ok, just concatenate
12722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project       iv)    dmax <= middle          : too wide, must add borders
12732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project     */
12742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* first remove old non-fill-borders... */
12762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    while (middle < 0) {
12772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /* ...but don't remove all of them */
12792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      if (numBordFollow == 1)
12802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        break;
12812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      numBordFollow--;
12832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      bordMaxFollow = v_bordFollow[numBordFollow - 1];
12842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      middle = bmin - bordMaxFollow;
12852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
12862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* if this isn't enough, remove new non-fill borders */
12882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (middle < 0)
12892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    {
12902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      for (l = 0, m = 0 ; l < *length_v_bord ; l++)
12912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      {
12922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        if(v_bord[l]> bordMaxFollow)
12932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        {
12942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          v_bord[m] = v_bord[l];
12952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          v_freq[m] = v_freq[l];
12962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          m++;
12972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        }
12982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      }
12992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      *length_v_bord = l;
13012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      *length_v_freq = l;
13022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      bmin = v_bord[0];
13042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
13062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*------------------------------------------------------------------------
13082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      update modified follow-up data
13092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      ------------------------------------------------------------------------*/
13102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    *length_v_bordFollow = numBordFollow;
13122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    *length_v_freqFollow = numBordFollow;
13132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* left relative borders correspond to follow-up */
13152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    *nL = numBordFollow - 1;
13162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*------------------------------------------------------------------------
13182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      take care of intervals ii through iv
13192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      ------------------------------------------------------------------------*/
13202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* now middle should be >= 0 */
13222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    middle = bmin - bordMaxFollow;
13232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (middle <= dmin)                                /* (ii) */
13252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    {
13262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      b_new = *length_v_bord;
13272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      if (v_tuningSegm[0] != 0)
13292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      {
13302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        /* remove new "luxury" border and concatenate */
13312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        *length_v_bord = b_new - 1;
13322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        FDKsbrEnc_AddVecLeft (v_bord, length_v_bord, v_bordFollow,
13332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            *length_v_bordFollow);
13342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        *length_v_freq = b_new - 1;
13362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        FDKsbrEnc_AddVecLeft (v_freq + 1, length_v_freq, v_freqFollow,
13372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            *length_v_freqFollow);
13382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      }
13402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      else if (*length_v_bordFollow > 1)
13412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      {
13422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        /* remove old border and concatenate */
13432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        FDKsbrEnc_AddVecLeft (v_bord, length_v_bord, v_bordFollow,
13442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            *length_v_bordFollow - 1);
13452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        FDKsbrEnc_AddVecLeft (v_freq, length_v_freq, v_freqFollow,
13462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            *length_v_bordFollow - 1);
13472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        *nL = *nL - 1;
13492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      }
13502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      else
13512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      {
13522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        /* remove new border and concatenate */
13532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        for (i = 0; i < *length_v_bord - 1; i++)
13542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          v_bord[i] = v_bord[i + 1];
13552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        for (i = 0; i < *length_v_freq - 1; i++)
13572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          v_freq[i] = v_freq[i + 1];
13582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        *length_v_bord = b_new - 1;
13602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        *length_v_freq = b_new - 1;
13612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        FDKsbrEnc_AddVecLeft (v_bord, length_v_bord, v_bordFollow,
13632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            *length_v_bordFollow);
13642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        FDKsbrEnc_AddVecLeft (v_freq, length_v_freq, v_freqFollow,
13652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project            *length_v_freqFollow);
13662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      }
13672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
13682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    else if ((middle >= dmin) && (middle <= dmax))      /* (iii) */
13692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    {
13702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /* concatenate */
13712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKsbrEnc_AddVecLeft (v_bord, length_v_bord, v_bordFollow, *length_v_bordFollow);
13722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKsbrEnc_AddVecLeft (v_freq, length_v_freq, v_freqFollow, *length_v_freqFollow);
13732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
13752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    else                           /* (iv) */
13762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    {
13772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      fillFramePre (dmax, v_bord, length_v_bord, v_freq, length_v_freq, bmin,
13782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project          middle);
13792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKsbrEnc_AddVecLeft (v_bord, length_v_bord, v_bordFollow, *length_v_bordFollow);
13802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKsbrEnc_AddVecLeft (v_freq, length_v_freq, v_freqFollow, *length_v_freqFollow);
13812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
13822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
13832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project}
13842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*******************************************************************************
13882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Functionname:  calcFrameClass
13892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *******************************************************************************
13902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Description:
13922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Arguments:  INT* frameClass, INT* frameClassOld, INT tranFlag, INT* spreadFlag)
13942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Return:      none
13962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
13972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project*******************************************************************************/
13982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void
13992228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectcalcFrameClass (FRAME_CLASS *frameClass, FRAME_CLASS *frameClassOld, INT tranFlag,
14002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                INT *spreadFlag)
14012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{
14022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
14032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  switch (*frameClassOld) {
14042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  case FIXFIXonly:
14052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  case FIXFIX:
14062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (tranFlag)  *frameClass = FIXVAR;
14072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    else           *frameClass = FIXFIX;
14082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    break;
14092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  case FIXVAR:
14102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (tranFlag) { *frameClass = VARVAR; *spreadFlag = 0; }
14112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    else {
14122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      if (*spreadFlag)  *frameClass = VARVAR;
14132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      else              *frameClass = VARFIX;
14142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
14152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    break;
14162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  case VARFIX:
14172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (tranFlag)  *frameClass = FIXVAR;
14182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    else           *frameClass = FIXFIX;
14192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    break;
14202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  case VARVAR:
14212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (tranFlag) { *frameClass = VARVAR; *spreadFlag = 0; }
14222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    else {
14232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      if (*spreadFlag)  *frameClass = VARVAR;
14242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      else              *frameClass = VARFIX;
14252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
14262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    break;
14272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  };
14282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
14292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  *frameClassOld = *frameClass;
14302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project}
14312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
14322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
14332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
14342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*******************************************************************************
14352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Functionname:  specialCase
14362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *******************************************************************************
14372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
14382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Description:
14392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
14402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Arguments:   spreadFlag
14412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              allowSpread
14422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_bord
14432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              length_v_bord
14442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_freq
14452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              length_v_freq
14462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              parts
14472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              d
14482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
14492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Return:      none
14502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
14512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project*******************************************************************************/
14522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void
14532228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectspecialCase (INT *spreadFlag, INT allowSpread, INT *v_bord,
14542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project             INT *length_v_bord, INT *v_freq, INT *length_v_freq, INT *parts,
14552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project             INT d)
14562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{
14572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT L;
14582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
14592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  L = *length_v_bord;
14602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
14612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  if (allowSpread) {            /* add one "step 8" */
14622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    *spreadFlag = 1;
14632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    FDKsbrEnc_AddRight (v_bord, length_v_bord, v_bord[L - 1] + 8);
14642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    FDKsbrEnc_AddRight (v_freq, length_v_freq, 1);
14652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    (*parts)++;
14662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
14672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  else {
14682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (d == 1) {               /*  stretch one slot */
14692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      *length_v_bord = L - 1;
14702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      *length_v_freq = L - 1;
14712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
14722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    else {
14732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      if ((v_bord[L - 1] - v_bord[L - 2]) > 2) {        /* compress one quant step */
14742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        v_bord[L - 1] = v_bord[L - 1] - 2;
14752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        v_freq[*length_v_freq - 1] = 0; /* use low res for short segment */
14762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      }
14772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
14782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
14792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project}
14802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
14812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
14822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
14832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*******************************************************************************
14842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Functionname:  calcCmonBorder
14852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *******************************************************************************
14862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
14872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Description:
14882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
14892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Arguments:   i_cmon
14902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              i_tran
14912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_bord
14922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              length_v_bord
14932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              tran
14942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
14952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Return:      none
14962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
14972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project*******************************************************************************/
14982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void
14992228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectcalcCmonBorder (INT *i_cmon, INT *i_tran, INT *v_bord, INT *length_v_bord,
15002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                INT tran, INT bufferFrameStart, INT numberTimeSlots)
15012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{                               /* FH 00-06-26 */
15022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT i;
15032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
15042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  for (i = 0; i < *length_v_bord; i++)
15052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (v_bord[i] >= bufferFrameStart + numberTimeSlots) {      /* FH 00-06-26 */
15062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      *i_cmon = i;
15072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
15082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
15092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
15102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  /* keep track of transient: */
15112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  for (i = 0; i < *length_v_bord; i++)
15122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (v_bord[i] >= tran) {
15132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      *i_tran = i;
15142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
15152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
15162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    else
15172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      *i_tran = EMPTY;
15182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project}
15192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
15202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*******************************************************************************
15212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Functionname:  keepForFollowUp
15222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *******************************************************************************
15232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
15242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Description:
15252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
15262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Arguments:   v_bordFollow
15272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              length_v_bordFollow
15282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_freqFollow
15292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              length_v_freqFollow
15302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              i_tranFollow
15312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              i_fillFollow
15322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_bord
15332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              length_v_bord
15342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_freq
15352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              i_cmon
15362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              i_tran
15372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              parts)
15382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
15392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Return:      none
15402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
15412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project*******************************************************************************/
15422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void
15432228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectkeepForFollowUp (INT *v_bordFollow, INT *length_v_bordFollow,
15442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                 INT *v_freqFollow, INT *length_v_freqFollow,
15452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                 INT *i_tranFollow, INT *i_fillFollow, INT *v_bord,
15462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                 INT *length_v_bord, INT *v_freq, INT i_cmon, INT i_tran,
15472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                 INT parts, INT numberTimeSlots)
15482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{                               /* FH 00-06-26 */
15492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT L, i, j;
15502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
15512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  L = *length_v_bord;
15522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
15532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  (*length_v_bordFollow) = 0;
15542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  (*length_v_freqFollow) = 0;
15552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
15562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  for (j = 0, i = i_cmon; i < L; i++, j++) {
15572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    v_bordFollow[j] = v_bord[i] - numberTimeSlots;      /* FH 00-06-26 */
15582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    v_freqFollow[j] = v_freq[i];
15592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    (*length_v_bordFollow)++;
15602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    (*length_v_freqFollow)++;
15612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
15622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  if (i_tran != EMPTY)
15632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    *i_tranFollow = i_tran - i_cmon;
15642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  else
15652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    *i_tranFollow = EMPTY;
15662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  *i_fillFollow = L - (parts - 1) - i_cmon;
15672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
15682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project}
15692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
15702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*******************************************************************************
15712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Functionname:  calcCtrlSignal
15722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *******************************************************************************
15732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
15742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Description:
15752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
15762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Arguments:   hSbrGrid
15772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              frameClass
15782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_bord
15792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              length_v_bord
15802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              v_freq
15812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              length_v_freq
15822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              i_cmon
15832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              i_tran
15842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              spreadFlag
15852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              nL
15862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
15872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Return:      none
15882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
15892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project*******************************************************************************/
15902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void
15912228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectcalcCtrlSignal (HANDLE_SBR_GRID hSbrGrid,
15922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                FRAME_CLASS frameClass, INT *v_bord, INT length_v_bord, INT *v_freq,
15932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                INT length_v_freq, INT i_cmon, INT i_tran, INT spreadFlag,
15942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                INT nL)
15952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{
15962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
15972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
15982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT i, r, a, n, p, b, aL, aR, ntot, nmax, nR;
15992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT *v_f = hSbrGrid->v_f;
16012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT *v_fLR = hSbrGrid->v_fLR;
16022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT *v_r = hSbrGrid->bs_rel_bord;
16032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT *v_rL = hSbrGrid->bs_rel_bord_0;
16042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT *v_rR = hSbrGrid->bs_rel_bord_1;
16052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT length_v_r = 0;
16072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT length_v_rR = 0;
16082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT length_v_rL = 0;
16092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  switch (frameClass) {
16112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  case FIXVAR:
16122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* absolute border: */
16132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    a = v_bord[i_cmon];
16152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* relative borders: */
16172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    length_v_r = 0;
16182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    i = i_cmon;
16192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    while (i >= 1) {
16212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      r = v_bord[i] - v_bord[i - 1];
16222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKsbrEnc_AddRight (v_r, &length_v_r, r);
16232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      i--;
16242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
16252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /*  number of relative borders: */
16282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    n = length_v_r;
16292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* freq res: */
16322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    for (i = 0; i < i_cmon; i++)
16332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      v_f[i] = v_freq[i_cmon - 1 - i];
16342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    v_f[i_cmon] = 1;
16352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* pointer: */
16372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    p = (i_cmon >= i_tran && i_tran != EMPTY) ? (i_cmon - i_tran + 1) : (0) ;
16382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrGrid->frameClass = frameClass;
16402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrGrid->bs_abs_bord = a;
16412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrGrid->n = n;
16422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrGrid->p = p;
16432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    break;
16452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  case VARFIX:
16462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* absolute border: */
16472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    a = v_bord[0];
16482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* relative borders: */
16502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    length_v_r = 0;
16512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    for (i = 1; i < length_v_bord; i++) {
16532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      r = v_bord[i] - v_bord[i - 1];
16542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKsbrEnc_AddRight (v_r, &length_v_r, r);
16552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
16562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* number of relative borders: */
16582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    n = length_v_r;
16592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* freq res: */
16612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    FDKmemcpy (v_f, v_freq, length_v_freq * sizeof (INT));
16622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* pointer: */
16652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    p = (i_tran >= 0 && i_tran != EMPTY) ? (i_tran + 1) : (0) ;
16662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrGrid->frameClass = frameClass;
16682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrGrid->bs_abs_bord = a;
16692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrGrid->n = n;
16702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrGrid->p = p;
16712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    break;
16732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  case VARVAR:
16742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (spreadFlag) {
16752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /* absolute borders: */
16762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      b = length_v_bord;
16772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      aL = v_bord[0];
16792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      aR = v_bord[b - 1];
16802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /* number of relative borders:    */
16832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      ntot = b - 2;
16842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      nmax = 2;                 /* n: {0,1,2} */
16862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      if (ntot > nmax) {
16872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        nL = nmax;
16882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        nR = ntot - nmax;
16892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      }
16902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      else {
16912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        nL = ntot;
16922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        nR = 0;
16932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      }
16942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
16952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /* relative borders: */
16962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      length_v_rL = 0;
16972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      for (i = 1; i <= nL; i++) {
16982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        r = v_bord[i] - v_bord[i - 1];
16992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        FDKsbrEnc_AddRight (v_rL, &length_v_rL, r);
17002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      }
17012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
17022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      length_v_rR = 0;
17032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      i = b - 1;
17042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      while (i >= b - nR) {
17052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        r = v_bord[i] - v_bord[i - 1];
17062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        FDKsbrEnc_AddRight (v_rR, &length_v_rR, r);
17072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        i--;
17082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      }
17092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
17102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /* pointer (only one due to constraint in frame info): */
17112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      p = (i_tran > 0 && i_tran != EMPTY) ? (b - i_tran) : (0) ;
17122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
17132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /* freq res: */
17142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
17152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      for (i = 0; i < b - 1; i++)
17162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        v_fLR[i] = v_freq[i];
17172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
17182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    else {
17192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
17202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      length_v_bord = i_cmon + 1;
17212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      length_v_freq = i_cmon + 1;
17222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
17232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
17242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /* absolute borders: */
17252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      b = length_v_bord;
17262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
17272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      aL = v_bord[0];
17282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      aR = v_bord[b - 1];
17292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
17302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /* number of relative borders:   */
17312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      ntot = b - 2;
17322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      nR = ntot - nL;
17332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
17342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /* relative borders: */
17352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      length_v_rL = 0;
17362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      for (i = 1; i <= nL; i++) {
17372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        r = v_bord[i] - v_bord[i - 1];
17382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        FDKsbrEnc_AddRight (v_rL, &length_v_rL, r);
17392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      }
17402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
17412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      length_v_rR = 0;
17422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      i = b - 1;
17432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      while (i >= b - nR) {
17442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        r = v_bord[i] - v_bord[i - 1];
17452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        FDKsbrEnc_AddRight (v_rR, &length_v_rR, r);
17462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        i--;
17472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      }
17482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
17492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /* pointer (only one due to constraint in frame info): */
17502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      p = (i_cmon >= i_tran && i_tran != EMPTY) ? (i_cmon - i_tran + 1) : (0) ;
17512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
17522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      /* freq res: */
17532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      for (i = 0; i < b - 1; i++)
17542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        v_fLR[i] = v_freq[i];
17552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
17562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
17572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrGrid->frameClass = frameClass;
17582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrGrid->bs_abs_bord_0 = aL;
17592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrGrid->bs_abs_bord_1 = aR;
17602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrGrid->bs_num_rel_0 = nL;
17612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrGrid->bs_num_rel_1 = nR;
17622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrGrid->p = p;
17632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
17642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    break;
17652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
17662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  default:
17672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* do nothing */
17682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    break;
17692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
17702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project}
17712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
17722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*******************************************************************************
17732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Functionname:  createDefFrameInfo
17742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *******************************************************************************
17752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
17762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Description: Copies the default (static) frameInfo structs to the frameInfo
17772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              passed by reference; only used for FIXFIX frames
17782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
17792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Arguments:   hFrameInfo             - HANLDE_SBR_FRAME_INFO
17802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              nEnv                   - INT
17812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              nTimeSlots             - INT
17822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
17832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Return:      none; hSbrFrameInfo contains a copy of the default frameInfo
17842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
17852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Written:     Andreas Schneider
17862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Revised:
17872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project*******************************************************************************/
17882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void
17892228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectcreateDefFrameInfo(HANDLE_SBR_FRAME_INFO hSbrFrameInfo, INT nEnv, INT nTimeSlots)
17902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{
17912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  switch (nEnv) {
17922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  case 1:
17932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    switch (nTimeSlots) {
17942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case NUMBER_TIME_SLOTS_1920:
17952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKmemcpy (hSbrFrameInfo, &frameInfo1_1920, sizeof (SBR_FRAME_INFO));
17962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
17972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case NUMBER_TIME_SLOTS_2048:
17982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKmemcpy (hSbrFrameInfo, &frameInfo1_2048, sizeof (SBR_FRAME_INFO));
17992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
18002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case NUMBER_TIME_SLOTS_1152:
18012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKmemcpy (hSbrFrameInfo, &frameInfo1_1152, sizeof (SBR_FRAME_INFO));
18022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
18032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case NUMBER_TIME_SLOTS_2304:
18042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKmemcpy (hSbrFrameInfo, &frameInfo1_2304, sizeof (SBR_FRAME_INFO));
18052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
18062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case NUMBER_TIME_SLOTS_512LD:
18072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKmemcpy (hSbrFrameInfo, &frameInfo1_512LD, sizeof (SBR_FRAME_INFO));
18082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
18092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    default:
18102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDK_ASSERT(0);
18112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
18122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    break;
18132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  case 2:
18142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    switch (nTimeSlots) {
18152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case NUMBER_TIME_SLOTS_1920:
18162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKmemcpy (hSbrFrameInfo, &frameInfo2_1920, sizeof (SBR_FRAME_INFO));
18172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
18182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case NUMBER_TIME_SLOTS_2048:
18192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKmemcpy (hSbrFrameInfo, &frameInfo2_2048, sizeof (SBR_FRAME_INFO));
18202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
18212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case NUMBER_TIME_SLOTS_1152:
18222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKmemcpy (hSbrFrameInfo, &frameInfo2_1152, sizeof (SBR_FRAME_INFO));
18232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
18242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case NUMBER_TIME_SLOTS_2304:
18252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKmemcpy (hSbrFrameInfo, &frameInfo2_2304, sizeof (SBR_FRAME_INFO));
18262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
18272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case NUMBER_TIME_SLOTS_512LD:
18282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKmemcpy (hSbrFrameInfo, &frameInfo2_512LD, sizeof (SBR_FRAME_INFO));
18292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
18302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    default:
18312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDK_ASSERT(0);
18322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
18332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    break;
18342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  case 4:
18352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    switch (nTimeSlots) {
18362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case NUMBER_TIME_SLOTS_1920:
18372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKmemcpy (hSbrFrameInfo, &frameInfo4_1920, sizeof (SBR_FRAME_INFO));
18382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
18392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case NUMBER_TIME_SLOTS_2048:
18402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKmemcpy (hSbrFrameInfo, &frameInfo4_2048, sizeof (SBR_FRAME_INFO));
18412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
18422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case NUMBER_TIME_SLOTS_1152:
18432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKmemcpy (hSbrFrameInfo, &frameInfo4_1152, sizeof (SBR_FRAME_INFO));
18442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
18452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case NUMBER_TIME_SLOTS_2304:
18462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKmemcpy (hSbrFrameInfo, &frameInfo4_2304, sizeof (SBR_FRAME_INFO));
18472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
18482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case NUMBER_TIME_SLOTS_512LD:
18492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDKmemcpy (hSbrFrameInfo, &frameInfo4_512LD, sizeof (SBR_FRAME_INFO));
18502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
18512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    default:
18522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      FDK_ASSERT(0);
18532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
18542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    break;
18552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  default:
18562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    FDK_ASSERT(0);
18572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
18582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project}
18592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
18602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
18612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*******************************************************************************
18622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Functionname:  ctrlSignal2FrameInfo
18632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *******************************************************************************
18642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
18652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Description: Calculates frame_info struct from control signal.
18662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
18672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Arguments:   hSbrGrid - source
18682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project              hSbrFrameInfo - destination
18692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
18702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Return:      void; hSbrFrameInfo contains the updated FRAME_INFO struct
18712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
18722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project*******************************************************************************/
18732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void
18742228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectctrlSignal2FrameInfo (HANDLE_SBR_GRID hSbrGrid,
18752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                      HANDLE_SBR_FRAME_INFO hSbrFrameInfo,
18762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                      INT freq_res_fixfix)
18772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{
18782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT nEnv = 0, border = 0, i, k, p /*?*/;
18792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT *v_r = hSbrGrid->bs_rel_bord;
18802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT *v_f = hSbrGrid->v_f;
18812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
18822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  FRAME_CLASS frameClass = hSbrGrid->frameClass;
18832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT bufferFrameStart   = hSbrGrid->bufferFrameStart;
18842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT numberTimeSlots    = hSbrGrid->numberTimeSlots;
18852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
18862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  switch (frameClass) {
18872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  case FIXFIX:
18882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    createDefFrameInfo(hSbrFrameInfo, hSbrGrid->bs_num_env, numberTimeSlots);
18892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
18902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* At this point all frequency resolutions are set to FREQ_RES_HIGH, so
18912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project     * only if freq_res_fixfix is set to FREQ_RES_LOW, they all have to be
18922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project     * changed.
18932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project     * snd */
18942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (freq_res_fixfix == FREQ_RES_LOW) {
18952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      for (i = 0; i < hSbrFrameInfo->nEnvelopes; i++) {
18962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        hSbrFrameInfo->freqRes[i] = FREQ_RES_LOW;
18972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      }
18982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
18992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* ELD: store current frequency resolution */
19002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrGrid->v_f[0] = hSbrFrameInfo->freqRes[0];
19012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    break;
19022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
19032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  case FIXVAR:
19042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  case VARFIX:
19052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    nEnv = hSbrGrid->n + 1;      /* read n [SBR_NUM_BITS bits] */ /*? snd*/
19062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    FDK_ASSERT(nEnv <= MAX_ENVELOPES_FIXVAR_VARFIX);
19072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
19082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrFrameInfo->nEnvelopes = nEnv;
19092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
19102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    border = hSbrGrid->bs_abs_bord; /* read the absolute border */
19112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
19122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (nEnv == 1)
19132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->nNoiseEnvelopes = 1;
19142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    else
19152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->nNoiseEnvelopes = 2;
19162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
19172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    break;
19182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
19192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  default:
19202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* do nothing */
19212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    break;
19222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
19232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
19242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  switch (frameClass) {
19252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  case FIXVAR:
19262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrFrameInfo->borders[0] = bufferFrameStart; /* start-position of 1st envelope */
19272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
19282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrFrameInfo->borders[nEnv] = border;
19292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
19302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    for (k = 0, i = nEnv - 1; k < nEnv - 1; k++, i--) {
19312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      border -= v_r[k];
19322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->borders[i] = border;
19332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
19342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
19352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* make either envelope nr. nEnv + 1 - p short; or don't shorten if p == 0 */
19362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    p = hSbrGrid->p;
19372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (p == 0) {
19382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->shortEnv = 0;
19392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    } else {
19402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->shortEnv = nEnv + 1 - p;
19412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
19422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
19432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    for (k = 0, i = nEnv - 1; k < nEnv; k++, i--) {
19442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->freqRes[i] = (FREQ_RES)v_f[k];
19452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
19462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
19472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* if either there is no short envelope or the last envelope is short... */
19482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (p == 0 || p == 1) {
19492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->bordersNoise[1] = hSbrFrameInfo->borders[nEnv - 1];
19502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    } else {
19512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->bordersNoise[1] = hSbrFrameInfo->borders[hSbrFrameInfo->shortEnv];
19522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
19532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
19542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    break;
19552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
19562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  case VARFIX:
19572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* in this case 'border' indicates the start of the 1st envelope */
19582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrFrameInfo->borders[0] = border;
19592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
19602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    for (k = 0; k < nEnv - 1; k++) {
19612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      border += v_r[k];
19622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->borders[k + 1] = border;
19632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
19642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
19652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrFrameInfo->borders[nEnv] = bufferFrameStart + numberTimeSlots;
19662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
19672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    p = hSbrGrid->p;
19682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (p == 0 || p == 1) {
19692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->shortEnv = 0;
19702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    } else {
19712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->shortEnv = p - 1;
19722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
19732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
19742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    for (k = 0; k < nEnv; k++) {
19752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->freqRes[k] = (FREQ_RES)v_f[k];
19762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
19772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
19782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    switch (p) {
19792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case 0:
19802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->bordersNoise[1] = hSbrFrameInfo->borders[1];
19812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
19822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    case 1:
19832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->bordersNoise[1] = hSbrFrameInfo->borders[nEnv - 1];
19842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
19852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    default:
19862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->bordersNoise[1] = hSbrFrameInfo->borders[hSbrFrameInfo->shortEnv];
19872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      break;
19882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
19892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    break;
19902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
19912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  case VARVAR:
19922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    nEnv = hSbrGrid->bs_num_rel_0 + hSbrGrid->bs_num_rel_1 + 1;
19932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    FDK_ASSERT(nEnv <= MAX_ENVELOPES_VARVAR); /* just to be sure */
19942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrFrameInfo->nEnvelopes = nEnv;
19952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
19962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrFrameInfo->borders[0] = border = hSbrGrid->bs_abs_bord_0;
19972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
19982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    for (k = 0, i = 1; k < hSbrGrid->bs_num_rel_0; k++, i++) {
19992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      border += hSbrGrid->bs_rel_bord_0[k];
20002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->borders[i] = border;
20012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
20022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
20032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    border = hSbrGrid->bs_abs_bord_1;
20042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrFrameInfo->borders[nEnv] = border;
20052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
20062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    for (k = 0, i = nEnv - 1; k < hSbrGrid->bs_num_rel_1; k++, i--) {
20072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      border -= hSbrGrid->bs_rel_bord_1[k];
20082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->borders[i] = border;
20092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
20102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
20112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    p = hSbrGrid->p;
20122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (p == 0) {
20132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->shortEnv = 0;
20142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    } else {
20152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->shortEnv = nEnv + 1 - p;
20162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
20172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
20182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    for (k = 0; k < nEnv; k++) {
20192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->freqRes[k] = (FREQ_RES)hSbrGrid->v_fLR[k];
20202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
20212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
20222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (nEnv == 1) {
20232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->nNoiseEnvelopes = 1;
20242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->bordersNoise[0] = hSbrGrid->bs_abs_bord_0;
20252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->bordersNoise[1] = hSbrGrid->bs_abs_bord_1;
20262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    } else {
20272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->nNoiseEnvelopes = 2;
20282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->bordersNoise[0] = hSbrGrid->bs_abs_bord_0;
20292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
20302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      if (p == 0 || p == 1) {
20312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        hSbrFrameInfo->bordersNoise[1] = hSbrFrameInfo->borders[nEnv - 1];
20322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      } else {
20332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        hSbrFrameInfo->bordersNoise[1] = hSbrFrameInfo->borders[hSbrFrameInfo->shortEnv];
20342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      }
20352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->bordersNoise[2] = hSbrGrid->bs_abs_bord_1;
20362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
20372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    break;
20382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
20392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  default:
20402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* do nothing */
20412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    break;
20422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
20432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
20442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  if (frameClass == VARFIX || frameClass == FIXVAR) {
20452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    hSbrFrameInfo->bordersNoise[0] = hSbrFrameInfo->borders[0];
20462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    if (nEnv == 1) {
20472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->bordersNoise[1] = hSbrFrameInfo->borders[nEnv];
20482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    } else {
20492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project      hSbrFrameInfo->bordersNoise[2] = hSbrFrameInfo->borders[nEnv];
20502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    }
20512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  }
20522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project}
20532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2054