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/*! 852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \file 862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \brief parametric stereo decoder 872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project*/ 882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#include "psdec.h" 902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#include "FDK_bitbuffer.h" 942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#include "psdec_hybrid.h" 952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#include "sbr_rom.h" 972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#include "sbr_ram.h" 982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#include "FDK_tools_rom.h" 1002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#include "genericStds.h" 1022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#include "FDK_trigFcts.h" 1042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/********************************************************************/ 1072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* MLQUAL DEFINES */ 1082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/********************************************************************/ 1092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project #define FRACT_ZERO FRACT_BITS-1 1112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/********************************************************************/ 1122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1132228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectSBR_ERROR ResetPsDec( HANDLE_PS_DEC h_ps_d ); 1142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid ResetPsDeCor( HANDLE_PS_DEC h_ps_d ); 1162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/***** HELPERS *****/ 1192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void assignTimeSlotsPS (FIXP_DBL *bufAdr, FIXP_DBL **bufPtr, const int numSlots, const int numChan); 1212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*******************/ 1252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define DIV3 FL2FXCONST_DBL(1.f/3.f) /* division 3.0 */ 1272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define DIV1_5 FL2FXCONST_DBL(2.f/3.f) /* division 1.5 */ 1282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/***************************************************************************/ 1302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*! 1312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \brief Creates one instance of the PS_DEC struct 1322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \return Error info 1342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project****************************************************************************/ 1362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectint 1372228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectCreatePsDec( HANDLE_PS_DEC *h_PS_DEC, /*!< pointer to the module state */ 1382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int aacSamplesPerFrame 1392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ) 1402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{ 1412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project SBR_ERROR errorInfo = SBRDEC_OK; 1422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HANDLE_PS_DEC h_ps_d; 1432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int i; 1442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if (*h_PS_DEC == NULL) { 1462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* Get ps dec ram */ 1472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d = GetRam_ps_dec(); 1482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if (h_ps_d == NULL) { 1492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project errorInfo = SBRDEC_MEM_ALLOC_FAILED; 1502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project goto bail; 1512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 1522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } else { 1532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* Reset an open instance */ 1542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d = *h_PS_DEC; 1552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 1562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* initialisation */ 1582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project switch (aacSamplesPerFrame) { 1592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project case 960: 1602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->noSubSamples = 30; /* col */ 1612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project break; 1622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project case 1024: 1632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->noSubSamples = 32; /* col */ 1642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project break; 1652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project default: 1662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->noSubSamples = -1; 1672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project break; 1682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 1692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if (h_ps_d->noSubSamples > MAX_NUM_COL 1712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project || h_ps_d->noSubSamples <= 0) 1722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project { 1732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project goto bail; 1742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 1752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->noChannels = NO_QMF_CHANNELS; /* row */ 1762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->psDecodedPrv = 0; 1782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->procFrameBased = -1; 1792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (i = 0; i < (1)+1; i++) { 1802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->bPsDataAvail[i] = ppt_none; 1812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 1822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (i = 0; i < (1)+1; i++) { 1852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear(&h_ps_d->bsData[i].mpeg, sizeof(MPEG_PS_BS_DATA)); 1862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 1872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project errorInfo = ResetPsDec( h_ps_d ); 1892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if ( errorInfo != SBRDEC_OK ) 1912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project goto bail; 1922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ResetPsDeCor( h_ps_d ); 1942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *h_PS_DEC = h_ps_d; 1962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project return 0; 2002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectbail: 2022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project DeletePsDec(&h_ps_d); 2032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project return -1; 2052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} /*END CreatePsDec */ 2062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/***************************************************************************/ 2082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*! 2092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \brief Delete one instance of the PS_DEC struct 2102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \return Error info 2122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project****************************************************************************/ 2142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectint 2152228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectDeletePsDec( HANDLE_PS_DEC *h_PS_DEC) /*!< pointer to the module state */ 2162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{ 2172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if (*h_PS_DEC == NULL) { 2182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project return -1; 2192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 2202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FreeRam_ps_dec(h_PS_DEC); 2232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project return 0; 2262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} /*END DeletePsDec */ 2272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/***************************************************************************/ 2292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*! 2302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \brief resets some values of the PS handle to default states 2312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \return 2332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project****************************************************************************/ 2352228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectSBR_ERROR ResetPsDec( HANDLE_PS_DEC h_ps_d ) /*!< pointer to the module state */ 2362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{ 2372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project SBR_ERROR errorInfo = SBRDEC_OK; 2382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT i; 2392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const UCHAR noQmfBandsInHybrid20 = 3; 2412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* const UCHAR noQmfBandsInHybrid34 = 5; */ 2422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const UCHAR aHybridResolution20[] = { HYBRID_8_CPLX, 2442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HYBRID_2_REAL, 2452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HYBRID_2_REAL }; 2462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.delayBufIndex = 0; 2482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* explicitly init state variables to safe values (until first ps header arrives) */ 2502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.lastUsb = 0; 2522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.scaleFactorPsDelayBuffer = -(DFRACT_BITS-1); 2542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear(h_ps_d->specificTo.mpeg.aDelayBufIndexDelayQmf, (NO_QMF_CHANNELS-FIRST_DELAY_SB)*sizeof(UCHAR)); 2562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.noSampleDelay = delayIndexQmf[0]; 2572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (i=0 ; i < NO_SERIAL_ALLPASS_LINKS; i++) { 2592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.aDelayRBufIndexSer[i] = 0; 2602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 2612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.pAaRealDelayBufferQmf[0] = h_ps_d->specificTo.mpeg.aaQmfDelayBufReal; 2632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project assignTimeSlotsPS ( h_ps_d->specificTo.mpeg.pAaRealDelayBufferQmf[0] + (NO_QMF_CHANNELS-FIRST_DELAY_SB), 2652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project &h_ps_d->specificTo.mpeg.pAaRealDelayBufferQmf[1], 2662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.noSampleDelay-1, 2672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project (NO_DELAY_BUFFER_BANDS-FIRST_DELAY_SB)); 2682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.pAaImagDelayBufferQmf[0] = h_ps_d->specificTo.mpeg.aaQmfDelayBufImag; 2702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project assignTimeSlotsPS ( h_ps_d->specificTo.mpeg.pAaImagDelayBufferQmf[0] + (NO_QMF_CHANNELS-FIRST_DELAY_SB), 2722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project &h_ps_d->specificTo.mpeg.pAaImagDelayBufferQmf[1], 2732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.noSampleDelay-1, 2742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project (NO_DELAY_BUFFER_BANDS-FIRST_DELAY_SB)); 2752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* Hybrid Filter Bank 1 creation. */ 2772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project errorInfo = InitHybridFilterBank ( &h_ps_d->specificTo.mpeg.hybrid, 2782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->noSubSamples, 2792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project noQmfBandsInHybrid20, 2802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aHybridResolution20 ); 2812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for ( i = 0; i < NO_IID_GROUPS; i++ ) 2832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project { 2842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.h11rPrev[i] = FL2FXCONST_DBL(0.5f); 2852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.h12rPrev[i] = FL2FXCONST_DBL(0.5f); 2862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 2872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear( h_ps_d->specificTo.mpeg.h21rPrev, sizeof( h_ps_d->specificTo.mpeg.h21rPrev ) ); 2892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear( h_ps_d->specificTo.mpeg.h22rPrev, sizeof( h_ps_d->specificTo.mpeg.h22rPrev ) ); 2902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project return errorInfo; 2922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} 2932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/***************************************************************************/ 2952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*! 2962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \brief clear some buffers used in decorrelation process 2972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \return 2992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project****************************************************************************/ 3012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid ResetPsDeCor( HANDLE_PS_DEC h_ps_d ) /*!< pointer to the module state */ 3022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{ 3032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT i; 3042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear(h_ps_d->specificTo.mpeg.aPeakDecayFastBin, NO_MID_RES_BINS*sizeof(FIXP_DBL)); 3062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear(h_ps_d->specificTo.mpeg.aPrevNrgBin, NO_MID_RES_BINS*sizeof(FIXP_DBL)); 3072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear(h_ps_d->specificTo.mpeg.aPrevPeakDiffBin, NO_MID_RES_BINS*sizeof(FIXP_DBL)); 3082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear(h_ps_d->specificTo.mpeg.aPowerPrevScal, NO_MID_RES_BINS*sizeof(SCHAR)); 3092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (i=0 ; i < FIRST_DELAY_SB ; i++) { 3112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear(h_ps_d->specificTo.mpeg.aaaRealDelayRBufferSerQmf[i], NO_DELAY_LENGTH_VECTORS*sizeof(FIXP_DBL)); 3122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear(h_ps_d->specificTo.mpeg.aaaImagDelayRBufferSerQmf[i], NO_DELAY_LENGTH_VECTORS*sizeof(FIXP_DBL)); 3132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 3142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (i=0 ; i < NO_SUB_QMF_CHANNELS ; i++) { 3152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear(h_ps_d->specificTo.mpeg.aaaRealDelayRBufferSerSubQmf[i], NO_DELAY_LENGTH_VECTORS*sizeof(FIXP_DBL)); 3162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear(h_ps_d->specificTo.mpeg.aaaImagDelayRBufferSerSubQmf[i], NO_DELAY_LENGTH_VECTORS*sizeof(FIXP_DBL)); 3172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 3182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} 3202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*******************************************************************************/ 3222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* slot based funcion prototypes */ 3242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void deCorrelateSlotBased( HANDLE_PS_DEC h_ps_d, 3262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *mHybridRealLeft, 3282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *mHybridImagLeft, 3292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project SCHAR sf_mHybridLeft, 3302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *rIntBufferLeft, 3322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *iIntBufferLeft, 3332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project SCHAR sf_IntBuffer, 3342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *mHybridRealRight, 3362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *mHybridImagRight, 3372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *rIntBufferRight, 3392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *iIntBufferRight ); 3402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void applySlotBasedRotation( HANDLE_PS_DEC h_ps_d, 3422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *mHybridRealLeft, 3442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *mHybridImagLeft, 3452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *QmfLeftReal, 3472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *QmfLeftImag, 3482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *mHybridRealRight, 3502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *mHybridImagRight, 3512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *QmfRightReal, 3532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *QmfRightImag 3542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ); 3552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/***************************************************************************/ 3582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*! 3592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \brief Get scale factor for all ps delay buffer. 3602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \return 3622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project****************************************************************************/ 3642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic 3652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectint getScaleFactorPsStatesBuffer(HANDLE_PS_DEC h_ps_d) 3662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{ 3672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT i; 3682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int scale = DFRACT_BITS-1; 3692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (i=0; i<NO_QMF_BANDS_HYBRID20; i++) { 3712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scale = fMin(scale, getScalefactor(h_ps_d->specificTo.mpeg.hybrid.mQmfBufferRealSlot[i], NO_SUB_QMF_CHANNELS)); 3722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scale = fMin(scale, getScalefactor(h_ps_d->specificTo.mpeg.hybrid.mQmfBufferImagSlot[i], NO_SUB_QMF_CHANNELS)); 3732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 3742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (i=0; i<NO_SAMPLE_DELAY_ALLPASS; i++) { 3762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scale = fMin(scale, getScalefactor(h_ps_d->specificTo.mpeg.aaRealDelayBufferQmf[i], FIRST_DELAY_SB)); 3772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scale = fMin(scale, getScalefactor(h_ps_d->specificTo.mpeg.aaImagDelayBufferQmf[i], FIRST_DELAY_SB)); 3782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 3792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (i=0; i<NO_SAMPLE_DELAY_ALLPASS; i++) { 3812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scale = fMin(scale, getScalefactor(h_ps_d->specificTo.mpeg.aaRealDelayBufferSubQmf[i], NO_SUB_QMF_CHANNELS)); 3822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scale = fMin(scale, getScalefactor(h_ps_d->specificTo.mpeg.aaImagDelayBufferSubQmf[i], NO_SUB_QMF_CHANNELS)); 3832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 3842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (i=0; i<FIRST_DELAY_SB; i++) { 3862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scale = fMin(scale, getScalefactor(h_ps_d->specificTo.mpeg.aaaRealDelayRBufferSerQmf[i], NO_DELAY_LENGTH_VECTORS)); 3872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scale = fMin(scale, getScalefactor(h_ps_d->specificTo.mpeg.aaaImagDelayRBufferSerQmf[i], NO_DELAY_LENGTH_VECTORS)); 3882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 3892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (i=0; i<NO_SUB_QMF_CHANNELS; i++) { 3912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scale = fMin(scale, getScalefactor(h_ps_d->specificTo.mpeg.aaaRealDelayRBufferSerSubQmf[i], NO_DELAY_LENGTH_VECTORS)); 3922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scale = fMin(scale, getScalefactor(h_ps_d->specificTo.mpeg.aaaImagDelayRBufferSerSubQmf[i], NO_DELAY_LENGTH_VECTORS)); 3932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 3942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (i=0; i<MAX_DELAY_BUFFER_SIZE; i++) 3962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project { 3972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT len; 3982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if (i==0) 3992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project len = NO_QMF_CHANNELS-FIRST_DELAY_SB; 4002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project else 4012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project len = NO_DELAY_BUFFER_BANDS-FIRST_DELAY_SB; 4022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scale = fMin(scale, getScalefactor(h_ps_d->specificTo.mpeg.pAaRealDelayBufferQmf[i], len)); 4042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scale = fMin(scale, getScalefactor(h_ps_d->specificTo.mpeg.pAaImagDelayBufferQmf[i], len)); 4052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 4062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project return (scale); 4082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} 4092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/***************************************************************************/ 4112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*! 4122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \brief Rescale all ps delay buffer. 4132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \return 4152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project****************************************************************************/ 4172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic 4182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid scalePsStatesBuffer(HANDLE_PS_DEC h_ps_d, 4192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int scale) 4202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{ 4212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT i; 4222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if (scale < 0) 4242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scale = fixMax((INT)scale,(INT)-(DFRACT_BITS-1)); 4252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project else 4262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scale = fixMin((INT)scale,(INT)DFRACT_BITS-1); 4272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (i=0; i<NO_QMF_BANDS_HYBRID20; i++) { 4292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( h_ps_d->specificTo.mpeg.hybrid.mQmfBufferRealSlot[i], NO_SUB_QMF_CHANNELS, scale ); 4302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( h_ps_d->specificTo.mpeg.hybrid.mQmfBufferImagSlot[i], NO_SUB_QMF_CHANNELS, scale ); 4312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 4322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (i=0; i<NO_SAMPLE_DELAY_ALLPASS; i++) { 4342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( h_ps_d->specificTo.mpeg.aaRealDelayBufferQmf[i], FIRST_DELAY_SB, scale ); 4352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( h_ps_d->specificTo.mpeg.aaImagDelayBufferQmf[i], FIRST_DELAY_SB, scale ); 4362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 4372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (i=0; i<NO_SAMPLE_DELAY_ALLPASS; i++) { 4392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( h_ps_d->specificTo.mpeg.aaRealDelayBufferSubQmf[i], NO_SUB_QMF_CHANNELS, scale ); 4402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( h_ps_d->specificTo.mpeg.aaImagDelayBufferSubQmf[i], NO_SUB_QMF_CHANNELS, scale ); 4412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 4422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (i=0; i<FIRST_DELAY_SB; i++) { 4442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( h_ps_d->specificTo.mpeg.aaaRealDelayRBufferSerQmf[i], NO_DELAY_LENGTH_VECTORS, scale ); 4452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( h_ps_d->specificTo.mpeg.aaaImagDelayRBufferSerQmf[i], NO_DELAY_LENGTH_VECTORS, scale ); 4462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 4472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (i=0; i<NO_SUB_QMF_CHANNELS; i++) { 4492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( h_ps_d->specificTo.mpeg.aaaRealDelayRBufferSerSubQmf[i], NO_DELAY_LENGTH_VECTORS, scale ); 4502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( h_ps_d->specificTo.mpeg.aaaImagDelayRBufferSerSubQmf[i], NO_DELAY_LENGTH_VECTORS, scale ); 4512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 4522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (i=0; i<MAX_DELAY_BUFFER_SIZE; i++) { 4542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT len; 4552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if (i==0) 4562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project len = NO_QMF_CHANNELS-FIRST_DELAY_SB; 4572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project else 4582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project len = NO_DELAY_BUFFER_BANDS-FIRST_DELAY_SB; 4592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( h_ps_d->specificTo.mpeg.pAaRealDelayBufferQmf[i], len, scale ); 4612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( h_ps_d->specificTo.mpeg.pAaImagDelayBufferQmf[i], len, scale ); 4622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 4632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scale <<= 1; 4652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( h_ps_d->specificTo.mpeg.aPeakDecayFastBin, NO_MID_RES_BINS, scale ); 4672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( h_ps_d->specificTo.mpeg.aPrevPeakDiffBin, NO_MID_RES_BINS, scale ); 4682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( h_ps_d->specificTo.mpeg.aPrevNrgBin, NO_MID_RES_BINS, scale ); 4692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} 4702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/***************************************************************************/ 4722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*! 4732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \brief Scale input channel to the same scalefactor and rescale hybrid 4742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project filterbank values 4752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \return 4772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project****************************************************************************/ 4792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid scalFilterBankValues( HANDLE_PS_DEC h_ps_d, 4812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL **fixpQmfReal, 4822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL **fixpQmfImag, 4832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int lsb, 4842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int scaleFactorLowBandSplitLow, 4852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int scaleFactorLowBandSplitHigh, 4862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project SCHAR *scaleFactorLowBand_lb, 4872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project SCHAR *scaleFactorLowBand_hb, 4882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int scaleFactorHighBands, 4892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT *scaleFactorHighBand, 4902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT noCols 4912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ) 4922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{ 4932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT maxScal; 4942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT i; 4962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleFactorHighBands = -scaleFactorHighBands; 4982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleFactorLowBandSplitLow = -scaleFactorLowBandSplitLow; 4992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleFactorLowBandSplitHigh = -scaleFactorLowBandSplitHigh; 5002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* get max scale factor */ 5022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project maxScal = fixMax(scaleFactorHighBands,fixMax(scaleFactorLowBandSplitLow, scaleFactorLowBandSplitHigh )); 5032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project { 5052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int headroom = getScaleFactorPsStatesBuffer(h_ps_d); 5062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project maxScal = fixMax(maxScal,(INT)(h_ps_d->specificTo.mpeg.scaleFactorPsDelayBuffer-headroom)); 5072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project maxScal += 1; 5082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 5092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* scale whole left channel to the same scale factor */ 5112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* low band ( overlap buffer ) */ 5132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if ( maxScal != scaleFactorLowBandSplitLow ) { 5142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT scale = scaleFactorLowBandSplitLow - maxScal; 5152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for ( i=0; i<(6); i++ ) { 5162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( fixpQmfReal[i], lsb, scale ); 5172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( fixpQmfImag[i], lsb, scale ); 5182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 5192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 5202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* low band ( current frame ) */ 5212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if ( maxScal != scaleFactorLowBandSplitHigh ) { 5222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT scale = scaleFactorLowBandSplitHigh - maxScal; 5232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* for ( i=(6); i<(6)+MAX_NUM_COL; i++ ) { */ 5242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for ( i=(6); i<(6)+noCols; i++ ) { 5252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( fixpQmfReal[i], lsb, scale ); 5262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( fixpQmfImag[i], lsb, scale ); 5272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 5282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 5292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* high band */ 5302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if ( maxScal != scaleFactorHighBands ) { 5312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT scale = scaleFactorHighBands - maxScal; 5322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* for ( i=0; i<MAX_NUM_COL; i++ ) { */ 5332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for ( i=0; i<noCols; i++ ) { 5342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( &fixpQmfReal[i][lsb], (64)-lsb, scale ); 5352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( &fixpQmfImag[i][lsb], (64)-lsb, scale ); 5362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 5372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 5382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if ( maxScal != h_ps_d->specificTo.mpeg.scaleFactorPsDelayBuffer ) 5402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scalePsStatesBuffer(h_ps_d,(h_ps_d->specificTo.mpeg.scaleFactorPsDelayBuffer-maxScal)); 5412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.hybrid.sf_mQmfBuffer = maxScal; 5432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.scaleFactorPsDelayBuffer = maxScal; 5442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *scaleFactorHighBand += maxScal - scaleFactorHighBands; 5462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->rescal = maxScal - scaleFactorLowBandSplitHigh; 5482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->sf_IntBuffer = maxScal; 5492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *scaleFactorLowBand_lb += maxScal - scaleFactorLowBandSplitLow; 5512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *scaleFactorLowBand_hb += maxScal - scaleFactorLowBandSplitHigh; 5522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} 5532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid rescalFilterBankValues( HANDLE_PS_DEC h_ps_d, /* parametric stereo decoder handle */ 5552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL **QmfBufferReal, /* qmf filterbank values */ 5562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL **QmfBufferImag, /* qmf filterbank values */ 5572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int lsb, /* sbr start subband */ 5582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT noCols) 5592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{ 5602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int i; 5612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* scale back 6 timeslots look ahead for hybrid filterbank to original value */ 5622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for ( i=noCols; i<noCols + (6); i++ ) { 5632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( QmfBufferReal[i], lsb, h_ps_d->rescal ); 5642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( QmfBufferImag[i], lsb, h_ps_d->rescal ); 5652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 5662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} 5672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/***************************************************************************/ 5692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*! 5702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \brief Generate decorrelated side channel using allpass/delay 5712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \return 5732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project****************************************************************************/ 5752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void 5762228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectdeCorrelateSlotBased( HANDLE_PS_DEC h_ps_d, /*!< pointer to the module state */ 5772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *mHybridRealLeft, /*!< left (mono) hybrid values real */ 5792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *mHybridImagLeft, /*!< left (mono) hybrid values imag */ 5802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project SCHAR sf_mHybridLeft, /*!< scalefactor for left (mono) hybrid bands */ 5812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *rIntBufferLeft, /*!< real qmf bands left (mono) (38x64) */ 5832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *iIntBufferLeft, /*!< real qmf bands left (mono) (38x64) */ 5842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project SCHAR sf_IntBuffer, /*!< scalefactor for all left and right qmf bands */ 5852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *mHybridRealRight, /*!< right (decorrelated) hybrid values real */ 5872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *mHybridImagRight, /*!< right (decorrelated) hybrid values imag */ 5882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *rIntBufferRight, /*!< real qmf bands right (decorrelated) (38x64) */ 5902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *iIntBufferRight ) /*!< real qmf bands right (decorrelated) (38x64) */ 5912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{ 5922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT i, m, sb, gr, bin; 5942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL peakDiff, nrg, transRatio; 5962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *RESTRICT aaLeftReal; 5982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *RESTRICT aaLeftImag; 5992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *RESTRICT aaRightReal; 6012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *RESTRICT aaRightImag; 6022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *RESTRICT pRealDelayBuffer; 6042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *RESTRICT pImagDelayBuffer; 6052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project C_ALLOC_SCRATCH_START(aaPowerSlot, FIXP_DBL, NO_MID_RES_BINS); 6072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project C_ALLOC_SCRATCH_START(aaTransRatioSlot, FIXP_DBL, NO_MID_RES_BINS); 6082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*! 6102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project<pre> 6112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project parameter index qmf bands hybrid bands 6122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ---------------------------------------------------------------------------- 6132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 0 0 0,7 6142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1 0 1,6 6152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2 0 2 6162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3 0 3 HYBRID BANDS 6172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4 1 9 6182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5 1 8 6192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6 2 10 6202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7 2 11 6212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ---------------------------------------------------------------------------- 6222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8 3 6232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9 4 6242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10 5 6252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 11 6 6262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 12 7 6272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13 8 6282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 14 9,10 (2 ) QMF BANDS 6292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 15 11 - 13 (3 ) 6302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 16 14 - 17 (4 ) 6312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 17 18 - 22 (5 ) 6322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 18 23 - 34 (12) 6332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 19 35 - 63 (29) 6342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ---------------------------------------------------------------------------- 6352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project</pre> 6362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project*/ 6372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project #define FLTR_SCALE 3 6392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* hybrid bands (parameter index 0 - 7) */ 6412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaLeftReal = mHybridRealLeft; 6422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaLeftImag = mHybridImagLeft; 6432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaPowerSlot[0] = ( fMultAddDiv2( fMultDiv2(aaLeftReal[0], aaLeftReal[0]), aaLeftImag[0], aaLeftImag[0] ) >> FLTR_SCALE ) + 6452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ( fMultAddDiv2( fMultDiv2(aaLeftReal[7], aaLeftReal[7]), aaLeftImag[7], aaLeftImag[7] ) >> FLTR_SCALE ); 6462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaPowerSlot[1] = ( fMultAddDiv2( fMultDiv2(aaLeftReal[1], aaLeftReal[1]), aaLeftImag[1], aaLeftImag[1] ) >> FLTR_SCALE ) + 6482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ( fMultAddDiv2( fMultDiv2(aaLeftReal[6], aaLeftReal[6]), aaLeftImag[6], aaLeftImag[6] ) >> FLTR_SCALE ); 6492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaPowerSlot[2] = fMultAddDiv2( fMultDiv2(aaLeftReal[2], aaLeftReal[2]), aaLeftImag[2], aaLeftImag[2] ) >> FLTR_SCALE; 6512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaPowerSlot[3] = fMultAddDiv2( fMultDiv2(aaLeftReal[3], aaLeftReal[3]), aaLeftImag[3], aaLeftImag[3] ) >> FLTR_SCALE; 6522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaPowerSlot[4] = fMultAddDiv2( fMultDiv2(aaLeftReal[9], aaLeftReal[9]), aaLeftImag[9], aaLeftImag[9] ) >> FLTR_SCALE; 6542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaPowerSlot[5] = fMultAddDiv2( fMultDiv2(aaLeftReal[8], aaLeftReal[8]), aaLeftImag[8], aaLeftImag[8] ) >> FLTR_SCALE; 6552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaPowerSlot[6] = fMultAddDiv2( fMultDiv2(aaLeftReal[10], aaLeftReal[10]), aaLeftImag[10], aaLeftImag[10] ) >> FLTR_SCALE; 6572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaPowerSlot[7] = fMultAddDiv2( fMultDiv2(aaLeftReal[11], aaLeftReal[11]), aaLeftImag[11], aaLeftImag[11] ) >> FLTR_SCALE; 6582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* qmf bands (parameter index 8 - 19) */ 6602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for ( bin = 8; bin < NO_MID_RES_BINS; bin++ ) { 6612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL slotNrg = FL2FXCONST_DBL(0.f); 6622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for ( i = groupBorders20[bin+2]; i < groupBorders20[bin+3]; i++ ) { /* max loops: 29 */ 6642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project slotNrg += fMultAddDiv2 ( fMultDiv2(rIntBufferLeft[i], rIntBufferLeft[i]), iIntBufferLeft[i], iIntBufferLeft[i]) >> FLTR_SCALE; 6652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 6662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaPowerSlot[bin] = slotNrg; 6672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 6692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* calculation of transient ratio */ 6722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (bin=0; bin < NO_MID_RES_BINS; bin++) { /* noBins = 20 ( BASELINE_PS ) */ 6732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.aPeakDecayFastBin[bin] = fMult( h_ps_d->specificTo.mpeg.aPeakDecayFastBin[bin], PEAK_DECAY_FACTOR ); 6752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if (h_ps_d->specificTo.mpeg.aPeakDecayFastBin[bin] < aaPowerSlot[bin]) { 6772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.aPeakDecayFastBin[bin] = aaPowerSlot[bin]; 6782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 6792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* calculate PSmoothPeakDecayDiffNrg */ 6812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project peakDiff = fMultAdd ( (h_ps_d->specificTo.mpeg.aPrevPeakDiffBin[bin]>>1), 6822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT_FILTER_COEFF, h_ps_d->specificTo.mpeg.aPeakDecayFastBin[bin] - aaPowerSlot[bin] - h_ps_d->specificTo.mpeg.aPrevPeakDiffBin[bin]); 6832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* save peakDiff for the next frame */ 6852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.aPrevPeakDiffBin[bin] = peakDiff; 6862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project nrg = h_ps_d->specificTo.mpeg.aPrevNrgBin[bin] + fMult( INT_FILTER_COEFF, aaPowerSlot[bin] - h_ps_d->specificTo.mpeg.aPrevNrgBin[bin] ); 6882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* Negative energies don't exist. But sometimes they appear due to rounding. */ 6902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project nrg = fixMax(nrg,FL2FXCONST_DBL(0.f)); 6922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* save nrg for the next frame */ 6942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.aPrevNrgBin[bin] = nrg; 6952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project nrg = fMult( nrg, TRANSIENT_IMPACT_FACTOR ); 6972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 6982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* save transient impact factor */ 6992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if ( peakDiff <= nrg || peakDiff == FL2FXCONST_DBL(0.0) ) { 7002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaTransRatioSlot[bin] = (FIXP_DBL)MAXVAL_DBL /* FL2FXCONST_DBL(1.0f)*/; 7012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 7022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project else if ( nrg <= FL2FXCONST_DBL(0.0f) ) { 7032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaTransRatioSlot[bin] = FL2FXCONST_DBL(0.f); 7042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 7052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project else { 7062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* scale to denominator */ 7072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT scale_left = fixMax(0, CntLeadingZeros(peakDiff) - 1); 7082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaTransRatioSlot[bin] = schur_div( nrg<<scale_left, peakDiff<<scale_left, 16); 7092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 7102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } /* bin */ 7112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project #define DELAY_GROUP_OFFSET 20 7162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project #define NR_OF_DELAY_GROUPS 2 7172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL rTmp, iTmp, rTmp0, iTmp0, rR0, iR0; 7192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT TempDelay = h_ps_d->specificTo.mpeg.delayBufIndex; /* set delay indices */ 7212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project pRealDelayBuffer = h_ps_d->specificTo.mpeg.aaRealDelayBufferSubQmf[TempDelay]; 7232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project pImagDelayBuffer = h_ps_d->specificTo.mpeg.aaImagDelayBufferSubQmf[TempDelay]; 7242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaLeftReal = mHybridRealLeft; 7262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaLeftImag = mHybridImagLeft; 7272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaRightReal = mHybridRealRight; 7282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaRightImag = mHybridImagRight; 7292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /************************/ 7312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* ICC groups : 0 - 9 */ 7322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /************************/ 7332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* gr = ICC groups */ 7352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (gr=0; gr < SUBQMF_GROUPS; gr++) { 7362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project transRatio = aaTransRatioSlot[bins2groupMap20[gr]]; 7382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* sb = subQMF/QMF subband */ 7402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project sb = groupBorders20[gr]; 7412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* Update delay buffers, sample delay allpass = 2 */ 7432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project rTmp0 = pRealDelayBuffer[sb]; 7442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project iTmp0 = pImagDelayBuffer[sb]; 7452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project pRealDelayBuffer[sb] = aaLeftReal[sb]; 7472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project pImagDelayBuffer[sb] = aaLeftImag[sb]; 7482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* delay by fraction */ 7502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project cplxMultDiv2(&rR0, &iR0, rTmp0, iTmp0, aaFractDelayPhaseFactorReSubQmf20[sb], aaFractDelayPhaseFactorImSubQmf20[sb]); 7512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project rR0<<=1; 7522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project iR0<<=1; 7532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *pAaaRealDelayRBufferSerSubQmf = h_ps_d->specificTo.mpeg.aaaRealDelayRBufferSerSubQmf[sb]; 7552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *pAaaImagDelayRBufferSerSubQmf = h_ps_d->specificTo.mpeg.aaaImagDelayRBufferSerSubQmf[sb]; 7562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (m=0; m<NO_SERIAL_ALLPASS_LINKS ; m++) { 7582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT tmpDelayRSer = h_ps_d->specificTo.mpeg.aDelayRBufIndexSer[m]; 7602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* get delayed values from according buffer : m(0)=3; m(1)=4; m(2)=5; */ 7622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project rTmp0 = pAaaRealDelayRBufferSerSubQmf[tmpDelayRSer]; 7632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project iTmp0 = pAaaImagDelayRBufferSerSubQmf[tmpDelayRSer]; 7642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* delay by fraction */ 7662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project cplxMultDiv2(&rTmp, &iTmp, rTmp0, iTmp0, aaFractDelayPhaseFactorSerReSubQmf20[sb][m], aaFractDelayPhaseFactorSerImSubQmf20[sb][m]); 7672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project rTmp = (rTmp - fMultDiv2(aAllpassLinkDecaySer[m], rR0)) << 1; 7692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project iTmp = (iTmp - fMultDiv2(aAllpassLinkDecaySer[m], iR0)) << 1; 7702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project pAaaRealDelayRBufferSerSubQmf[tmpDelayRSer] = rR0 + fMult(aAllpassLinkDecaySer[m], rTmp); 7722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project pAaaImagDelayRBufferSerSubQmf[tmpDelayRSer] = iR0 + fMult(aAllpassLinkDecaySer[m], iTmp); 7732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project rR0 = rTmp; 7752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project iR0 = iTmp; 7762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project pAaaRealDelayRBufferSerSubQmf += aAllpassLinkDelaySer[m]; 7782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project pAaaImagDelayRBufferSerSubQmf += aAllpassLinkDelaySer[m]; 7792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } /* m */ 7812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* duck if a past transient is found */ 7832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaRightReal[sb] = fMult(transRatio, rR0); 7842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaRightImag[sb] = fMult(transRatio, iR0); 7852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } /* gr */ 7872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( mHybridRealLeft, NO_SUB_QMF_CHANNELS, -SCAL_HEADROOM ); 7902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( mHybridImagLeft, NO_SUB_QMF_CHANNELS, -SCAL_HEADROOM ); 7912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( mHybridRealRight, NO_SUB_QMF_CHANNELS, -SCAL_HEADROOM ); 7922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( mHybridImagRight, NO_SUB_QMF_CHANNELS, -SCAL_HEADROOM ); 7932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /************************/ 7962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 7972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaLeftReal = rIntBufferLeft; 7982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaLeftImag = iIntBufferLeft; 7992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaRightReal = rIntBufferRight; 8002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaRightImag = iIntBufferRight; 8012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project pRealDelayBuffer = h_ps_d->specificTo.mpeg.aaRealDelayBufferQmf[TempDelay]; 8032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project pImagDelayBuffer = h_ps_d->specificTo.mpeg.aaImagDelayBufferQmf[TempDelay]; 8042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /************************/ 8062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* ICC groups : 10 - 19 */ 8072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /************************/ 8082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* gr = ICC groups */ 8112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (gr=SUBQMF_GROUPS; gr < NO_IID_GROUPS - NR_OF_DELAY_GROUPS; gr++) { 8122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project transRatio = aaTransRatioSlot[bins2groupMap20[gr]]; 8142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* sb = subQMF/QMF subband */ 8162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (sb = groupBorders20[gr]; sb < groupBorders20[gr+1]; sb++) { 8172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL resR, resI; 8182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* decayScaleFactor = 1.0f + decay_cutoff * DECAY_SLOPE - DECAY_SLOPE * sb; DECAY_SLOPE = 0.05 */ 8202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL decayScaleFactor = decayScaleFactTable[sb]; 8212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* Update delay buffers, sample delay allpass = 2 */ 8232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project rTmp0 = pRealDelayBuffer[sb]; 8242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project iTmp0 = pImagDelayBuffer[sb]; 8252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project pRealDelayBuffer[sb] = aaLeftReal[sb]; 8272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project pImagDelayBuffer[sb] = aaLeftImag[sb]; 8282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* delay by fraction */ 8302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project cplxMultDiv2(&rR0, &iR0, rTmp0, iTmp0, aaFractDelayPhaseFactorReQmf[sb], aaFractDelayPhaseFactorImQmf[sb]); 8312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project rR0<<=1; 8322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project iR0<<=1; 8332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project resR = fMult(decayScaleFactor, rR0); 8352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project resI = fMult(decayScaleFactor, iR0); 8362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *pAaaRealDelayRBufferSerQmf = h_ps_d->specificTo.mpeg.aaaRealDelayRBufferSerQmf[sb]; 8382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *pAaaImagDelayRBufferSerQmf = h_ps_d->specificTo.mpeg.aaaImagDelayRBufferSerQmf[sb]; 8392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (m=0; m<NO_SERIAL_ALLPASS_LINKS ; m++) { 8412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT tmpDelayRSer = h_ps_d->specificTo.mpeg.aDelayRBufIndexSer[m]; 8432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* get delayed values from according buffer : m(0)=3; m(1)=4; m(2)=5; */ 8452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project rTmp0 = pAaaRealDelayRBufferSerQmf[tmpDelayRSer]; 8462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project iTmp0 = pAaaImagDelayRBufferSerQmf[tmpDelayRSer]; 8472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* delay by fraction */ 8492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project cplxMultDiv2(&rTmp, &iTmp, rTmp0, iTmp0, aaFractDelayPhaseFactorSerReQmf[sb][m], aaFractDelayPhaseFactorSerImQmf[sb][m]); 8502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project rTmp = (rTmp - fMultDiv2(aAllpassLinkDecaySer[m], resR))<<1; 8522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project iTmp = (iTmp - fMultDiv2(aAllpassLinkDecaySer[m], resI))<<1; 8532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project resR = fMult(decayScaleFactor, rTmp); 8552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project resI = fMult(decayScaleFactor, iTmp); 8562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project pAaaRealDelayRBufferSerQmf[tmpDelayRSer] = rR0 + fMult(aAllpassLinkDecaySer[m], resR); 8582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project pAaaImagDelayRBufferSerQmf[tmpDelayRSer] = iR0 + fMult(aAllpassLinkDecaySer[m], resI); 8592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project rR0 = rTmp; 8612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project iR0 = iTmp; 8622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project pAaaRealDelayRBufferSerQmf += aAllpassLinkDelaySer[m]; 8642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project pAaaImagDelayRBufferSerQmf += aAllpassLinkDelaySer[m]; 8652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } /* m */ 8672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* duck if a past transient is found */ 8692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaRightReal[sb] = fMult(transRatio, rR0); 8702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaRightImag[sb] = fMult(transRatio, iR0); 8712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } /* sb */ 8732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } /* gr */ 8742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /************************/ 8762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* ICC groups : 20, 21 */ 8772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /************************/ 8782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* gr = ICC groups */ 8812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (gr=DELAY_GROUP_OFFSET; gr < NO_IID_GROUPS; gr++) { 8822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT sbStart = groupBorders20[gr]; 8842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT sbStop = groupBorders20[gr+1]; 8852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project UCHAR *pDelayBufIdx = &h_ps_d->specificTo.mpeg.aDelayBufIndexDelayQmf[sbStart-FIRST_DELAY_SB]; 8872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project transRatio = aaTransRatioSlot[bins2groupMap20[gr]]; 8892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* sb = subQMF/QMF subband */ 8912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (sb = sbStart; sb < sbStop; sb++) { 8922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* Update delay buffers */ 8942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project rR0 = h_ps_d->specificTo.mpeg.pAaRealDelayBufferQmf[*pDelayBufIdx][sb-FIRST_DELAY_SB]; 8952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project iR0 = h_ps_d->specificTo.mpeg.pAaImagDelayBufferQmf[*pDelayBufIdx][sb-FIRST_DELAY_SB]; 8962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 8972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.pAaRealDelayBufferQmf[*pDelayBufIdx][sb-FIRST_DELAY_SB] = aaLeftReal[sb]; 8982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.pAaImagDelayBufferQmf[*pDelayBufIdx][sb-FIRST_DELAY_SB] = aaLeftImag[sb]; 8992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* duck if a past transient is found */ 9012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaRightReal[sb] = fMult(transRatio, rR0); 9022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project aaRightImag[sb] = fMult(transRatio, iR0); 9032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if (++(*pDelayBufIdx) >= delayIndexQmf[sb]) { 9052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *pDelayBufIdx = 0; 9062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 9072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project pDelayBufIdx++; 9082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } /* sb */ 9102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } /* gr */ 9112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* Update delay buffer index */ 9142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if (++h_ps_d->specificTo.mpeg.delayBufIndex >= NO_SAMPLE_DELAY_ALLPASS) 9152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.delayBufIndex = 0; 9162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (m=0; m<NO_SERIAL_ALLPASS_LINKS ; m++) { 9182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if (++h_ps_d->specificTo.mpeg.aDelayRBufIndexSer[m] >= aAllpassLinkDelaySer[m]) 9192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.aDelayRBufIndexSer[m] = 0; 9202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 9212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( &rIntBufferLeft[NO_QMF_BANDS_HYBRID20], NO_QMF_CHANNELS-NO_QMF_BANDS_HYBRID20, -SCAL_HEADROOM ); 9242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( &iIntBufferLeft[NO_QMF_BANDS_HYBRID20], NO_QMF_CHANNELS-NO_QMF_BANDS_HYBRID20, -SCAL_HEADROOM ); 9252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( &rIntBufferRight[NO_QMF_BANDS_HYBRID20], NO_QMF_CHANNELS-NO_QMF_BANDS_HYBRID20, -SCAL_HEADROOM ); 9262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleValues( &iIntBufferRight[NO_QMF_BANDS_HYBRID20], NO_QMF_CHANNELS-NO_QMF_BANDS_HYBRID20, -SCAL_HEADROOM ); 9272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* free memory on scratch */ 9292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project C_ALLOC_SCRATCH_END(aaTransRatioSlot, FIXP_DBL, NO_MID_RES_BINS); 9302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project C_ALLOC_SCRATCH_END(aaPowerSlot, FIXP_DBL, NO_MID_RES_BINS); 9312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} 9322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid initSlotBasedRotation( HANDLE_PS_DEC h_ps_d, /*!< pointer to the module state */ 9352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int env, 9362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int usb 9372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ) { 9382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT group = 0; 9402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT bin = 0; 9412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT noIidSteps; 9422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* const UCHAR *pQuantizedIIDs;*/ 9442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_SGL invL; 9462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL ScaleL, ScaleR; 9472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL Alpha, Beta; 9482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL h11r, h12r, h21r, h22r; 9492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const FIXP_DBL *PScaleFactors; 9512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* Overwrite old values in delay buffers when upper subband is higher than in last frame */ 9532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if (env == 0) { 9542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if ((usb > h_ps_d->specificTo.mpeg.lastUsb) && h_ps_d->specificTo.mpeg.lastUsb) { 9562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT i,k,length; 9582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (i=h_ps_d->specificTo.mpeg.lastUsb ; i < FIRST_DELAY_SB; i++) { 9602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear(h_ps_d->specificTo.mpeg.aaaRealDelayRBufferSerQmf[i], NO_DELAY_LENGTH_VECTORS*sizeof(FIXP_DBL)); 9612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear(h_ps_d->specificTo.mpeg.aaaImagDelayRBufferSerQmf[i], NO_DELAY_LENGTH_VECTORS*sizeof(FIXP_DBL)); 9622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 9632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (k=0 ; k<NO_SAMPLE_DELAY_ALLPASS; k++) { 9652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear(h_ps_d->specificTo.mpeg.pAaRealDelayBufferQmf[k], FIRST_DELAY_SB*sizeof(FIXP_DBL)); 9662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 9672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project length = (usb-FIRST_DELAY_SB)*sizeof(FIXP_DBL); 9682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if(length>0) { 9692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear(h_ps_d->specificTo.mpeg.pAaRealDelayBufferQmf[0], length); 9702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear(h_ps_d->specificTo.mpeg.pAaImagDelayBufferQmf[0], length); 9712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 9722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project length = (fixMin(NO_DELAY_BUFFER_BANDS,(INT)usb)-FIRST_DELAY_SB)*sizeof(FIXP_DBL); 9732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if(length>0) { 9742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (k=1 ; k < h_ps_d->specificTo.mpeg.noSampleDelay; k++) { 9752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear(h_ps_d->specificTo.mpeg.pAaRealDelayBufferQmf[k], length); 9762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear(h_ps_d->specificTo.mpeg.pAaImagDelayBufferQmf[k], length); 9772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 9782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 9792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 9802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.lastUsb = usb; 9812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } /* env == 0 */ 9822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if (h_ps_d->bsData[h_ps_d->processSlot].mpeg.bFineIidQ) 9842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project { 9852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project PScaleFactors = ScaleFactorsFine; /* values are shiftet right by one */ 9862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project noIidSteps = NO_IID_STEPS_FINE; 9872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /*pQuantizedIIDs = quantizedIIDsFine;*/ 9882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 9892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project else 9912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project { 9922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project PScaleFactors = ScaleFactors; /* values are shiftet right by one */ 9932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project noIidSteps = NO_IID_STEPS; 9942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /*pQuantizedIIDs = quantizedIIDs;*/ 9952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 9962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 9982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* dequantize and decode */ 9992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for ( group = 0; group < NO_IID_GROUPS; group++ ) { 10002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project bin = bins2groupMap20[group]; 10022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /*! 10042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project <h3> type 'A' rotation </h3> 10052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project mixing procedure R_a, used in baseline version<br> 10062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Scale-factor vectors c1 and c2 are precalculated in initPsTables () and stored in 10082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project scaleFactors[] and scaleFactorsFine[] = pScaleFactors []. 10092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project From the linearized IID parameters (intensity differences), two scale factors are 10102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project calculated. They are used to obtain the coefficients h11... h22. 10112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 10122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* ScaleR and ScaleL are scaled by 1 shift right */ 10142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ScaleR = PScaleFactors[noIidSteps + h_ps_d->specificTo.mpeg.coef.aaIidIndexMapped[env][bin]]; 10162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ScaleL = PScaleFactors[noIidSteps - h_ps_d->specificTo.mpeg.coef.aaIidIndexMapped[env][bin]]; 10172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Beta = fMult (fMult( Alphas[h_ps_d->specificTo.mpeg.coef.aaIccIndexMapped[env][bin]], ( ScaleR - ScaleL )), FIXP_SQRT05); 10192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Alpha = Alphas[h_ps_d->specificTo.mpeg.coef.aaIccIndexMapped[env][bin]]>>1; 10202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* Alpha and Beta are now both scaled by 2 shifts right */ 10222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* calculate the coefficients h11... h22 from scale-factors and ICC parameters */ 10242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* h values are scaled by 1 shift right */ 10262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project { 10272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL trigData[4]; 10282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project inline_fixp_cos_sin(Beta + Alpha, Beta - Alpha, 2, trigData); 10302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h11r = fMult( ScaleL, trigData[0]); 10312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h12r = fMult( ScaleR, trigData[2]); 10322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h21r = fMult( ScaleL, trigData[1]); 10332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h22r = fMult( ScaleR, trigData[3]); 10342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 10352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /*****************************************************************************************/ 10362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* Interpolation of the matrices H11... H22: */ 10372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* */ 10382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* H11(k,n) = H11(k,n[e]) + (n-n[e]) * (H11(k,n[e+1] - H11(k,n[e])) / (n[e+1] - n[e]) */ 10392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* ... */ 10402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /*****************************************************************************************/ 10412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* invL = 1/(length of envelope) */ 10432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project invL = FX_DBL2FX_SGL(GetInvInt(h_ps_d->bsData[h_ps_d->processSlot].mpeg.aEnvStartStop[env + 1] - h_ps_d->bsData[h_ps_d->processSlot].mpeg.aEnvStartStop[env])); 10442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.coef.H11r[group] = h_ps_d->specificTo.mpeg.h11rPrev[group]; 10462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.coef.H12r[group] = h_ps_d->specificTo.mpeg.h12rPrev[group]; 10472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.coef.H21r[group] = h_ps_d->specificTo.mpeg.h21rPrev[group]; 10482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.coef.H22r[group] = h_ps_d->specificTo.mpeg.h22rPrev[group]; 10492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.coef.DeltaH11r[group] = fMult ( h11r - h_ps_d->specificTo.mpeg.coef.H11r[group], invL ); 10512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.coef.DeltaH12r[group] = fMult ( h12r - h_ps_d->specificTo.mpeg.coef.H12r[group], invL ); 10522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.coef.DeltaH21r[group] = fMult ( h21r - h_ps_d->specificTo.mpeg.coef.H21r[group], invL ); 10532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.coef.DeltaH22r[group] = fMult ( h22r - h_ps_d->specificTo.mpeg.coef.H22r[group], invL ); 10542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* update prev coefficients for interpolation in next envelope */ 10562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.h11rPrev[group] = h11r; 10582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.h12rPrev[group] = h12r; 10592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.h21rPrev[group] = h21r; 10602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.h22rPrev[group] = h22r; 10612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } /* group loop */ 10632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} 10642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void applySlotBasedRotation( HANDLE_PS_DEC h_ps_d, /*!< pointer to the module state */ 10672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *mHybridRealLeft, /*!< hybrid values real left */ 10692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *mHybridImagLeft, /*!< hybrid values imag left */ 10702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *QmfLeftReal, /*!< real bands left qmf channel */ 10722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *QmfLeftImag, /*!< imag bands left qmf channel */ 10732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *mHybridRealRight, /*!< hybrid values real right */ 10752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *mHybridImagRight, /*!< hybrid values imag right */ 10762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *QmfRightReal, /*!< real bands right qmf channel */ 10782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *QmfRightImag /*!< imag bands right qmf channel */ 10792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ) 10802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{ 10812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT group; 10822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT subband; 10832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *RESTRICT HybrLeftReal; 10852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *RESTRICT HybrLeftImag; 10862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *RESTRICT HybrRightReal; 10872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *RESTRICT HybrRightImag; 10882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL tmpLeft, tmpRight; 10902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /**********************************************************************************************/ 10932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /*! 10942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project <h2> Mapping </h2> 10952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project The number of stereo bands that is actually used depends on the number of availble 10972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project parameters for IID and ICC: 10982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project <pre> 10992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project nr. of IID para.| nr. of ICC para. | nr. of Stereo bands 11002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ----------------|------------------|------------------- 11012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10,20 | 10,20 | 20 11022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 10,20 | 34 | 34 11032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 34 | 10,20 | 34 11042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 34 | 34 | 34 11052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project </pre> 11062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project In the case the number of parameters for IIS and ICC differs from the number of stereo 11072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project bands, a mapping from the lower number to the higher number of parameters is applied. 11082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Index mapping of IID and ICC parameters is already done in psbitdec.cpp. Further mapping is 11092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project not needed here in baseline version. 11102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project **********************************************************************************************/ 11112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 11122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /************************************************************************************************/ 11132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /*! 11142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project <h2> Mixing </h2> 11152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 11162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project To generate the QMF subband signals for the subband samples n = n[e]+1 ,,, n_[e+1] the 11172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project parameters at position n[e] and n[e+1] are required as well as the subband domain signals 11182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project s_k(n) and d_k(n) for n = n[e]+1... n_[e+1]. n[e] represents the start position for 11192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project envelope e. The border positions n[e] are handled in DecodePS(). 11202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 11212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project The stereo sub subband signals are constructed as: 11222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project <pre> 11232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project l_k(n) = H11(k,n) s_k(n) + H21(k,n) d_k(n) 11242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project r_k(n) = H21(k,n) s_k(n) + H22(k,n) d_k(n) 11252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project </pre> 11262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project In order to obtain the matrices H11(k,n)... H22 (k,n), the vectors h11(b)... h22(b) need to 11272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project be calculated first (b: parameter index). Depending on ICC mode either mixing procedure R_a 11282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project or R_b is used for that. For both procedures, the parameters for parameter position n[e+1] 11292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project is used. 11302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ************************************************************************************************/ 11312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 11322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 11332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /************************************************************************************************/ 11342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /*! 11352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project <h2>Phase parameters </h2> 11362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project With disabled phase parameters (which is the case in baseline version), the H-matrices are 11372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project just calculated by: 11382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 11392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project <pre> 11402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project H11(k,n[e+1] = h11(b(k)) 11412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project (...) 11422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project b(k): parameter index according to mapping table 11432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project </pre> 11442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 11452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project <h2>Processing of the samples in the sub subbands </h2> 11462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project this loop includes the interpolation of the coefficients Hxx 11472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ************************************************************************************************/ 11482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 11492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 11502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* loop thru all groups ... */ 11512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HybrLeftReal = mHybridRealLeft; 11522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HybrLeftImag = mHybridImagLeft; 11532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HybrRightReal = mHybridRealRight; 11542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HybrRightImag = mHybridImagRight; 11552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 11562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /******************************************************/ 11572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* construct stereo sub subband signals according to: */ 11582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* */ 11592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* l_k(n) = H11(k,n) s_k(n) + H21(k,n) d_k(n) */ 11602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* r_k(n) = H12(k,n) s_k(n) + H22(k,n) d_k(n) */ 11612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /******************************************************/ 11622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for ( group = 0; group < SUBQMF_GROUPS; group++ ) { 11632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 11642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.coef.H11r[group] += h_ps_d->specificTo.mpeg.coef.DeltaH11r[group]; 11652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.coef.H12r[group] += h_ps_d->specificTo.mpeg.coef.DeltaH12r[group]; 11662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.coef.H21r[group] += h_ps_d->specificTo.mpeg.coef.DeltaH21r[group]; 11672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.coef.H22r[group] += h_ps_d->specificTo.mpeg.coef.DeltaH22r[group]; 11682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 11692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project subband = groupBorders20[group]; 11702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 11712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project tmpLeft = fMultAddDiv2( fMultDiv2(h_ps_d->specificTo.mpeg.coef.H11r[group], HybrLeftReal[subband]), h_ps_d->specificTo.mpeg.coef.H21r[group], HybrRightReal[subband]); 11722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project tmpRight = fMultAddDiv2( fMultDiv2(h_ps_d->specificTo.mpeg.coef.H12r[group], HybrLeftReal[subband]), h_ps_d->specificTo.mpeg.coef.H22r[group], HybrRightReal[subband]); 11732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HybrLeftReal [subband] = tmpLeft<<1; 11742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HybrRightReal[subband] = tmpRight<<1; 11752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 11762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project tmpLeft = fMultAdd( fMultDiv2(h_ps_d->specificTo.mpeg.coef.H11r[group], HybrLeftImag[subband]), h_ps_d->specificTo.mpeg.coef.H21r[group], HybrRightImag[subband]); 11772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project tmpRight = fMultAdd( fMultDiv2(h_ps_d->specificTo.mpeg.coef.H12r[group], HybrLeftImag[subband]), h_ps_d->specificTo.mpeg.coef.H22r[group], HybrRightImag[subband]); 11782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HybrLeftImag [subband] = tmpLeft; 11792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HybrRightImag[subband] = tmpRight; 11802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 11812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 11822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* continue in the qmf buffers */ 11832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HybrLeftReal = QmfLeftReal; 11842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HybrLeftImag = QmfLeftImag; 11852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HybrRightReal = QmfRightReal; 11862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HybrRightImag = QmfRightImag; 11872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 11882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for (; group < NO_IID_GROUPS; group++ ) { 11892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 11902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.coef.H11r[group] += h_ps_d->specificTo.mpeg.coef.DeltaH11r[group]; 11912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.coef.H12r[group] += h_ps_d->specificTo.mpeg.coef.DeltaH12r[group]; 11922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.coef.H21r[group] += h_ps_d->specificTo.mpeg.coef.DeltaH21r[group]; 11932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->specificTo.mpeg.coef.H22r[group] += h_ps_d->specificTo.mpeg.coef.DeltaH22r[group]; 11942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 11952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for ( subband = groupBorders20[group]; subband < groupBorders20[group + 1]; subband++ ) 11962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project { 11972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project tmpLeft = fMultAdd( fMultDiv2(h_ps_d->specificTo.mpeg.coef.H11r[group], HybrLeftReal[subband]), h_ps_d->specificTo.mpeg.coef.H21r[group], HybrRightReal[subband]); 11982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project tmpRight = fMultAdd( fMultDiv2(h_ps_d->specificTo.mpeg.coef.H12r[group], HybrLeftReal[subband]), h_ps_d->specificTo.mpeg.coef.H22r[group], HybrRightReal[subband]); 11992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HybrLeftReal [subband] = tmpLeft; 12002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HybrRightReal[subband] = tmpRight; 12012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 12022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project tmpLeft = fMultAdd( fMultDiv2(h_ps_d->specificTo.mpeg.coef.H11r[group], HybrLeftImag[subband]), h_ps_d->specificTo.mpeg.coef.H21r[group], HybrRightImag[subband]); 12032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project tmpRight = fMultAdd( fMultDiv2(h_ps_d->specificTo.mpeg.coef.H12r[group], HybrLeftImag[subband]), h_ps_d->specificTo.mpeg.coef.H22r[group], HybrRightImag[subband]); 12042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HybrLeftImag [subband] = tmpLeft; 12052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HybrRightImag[subband] = tmpRight; 12062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 12072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } /* subband */ 12082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 12092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} 12102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 12112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 12122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/***************************************************************************/ 12132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*! 12142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \brief Applies IID, ICC, IPD and OPD parameters to the current frame. 12152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 12162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \return none 12172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 12182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project****************************************************************************/ 12192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid 12202228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectApplyPsSlot( HANDLE_PS_DEC h_ps_d, /*!< handle PS_DEC*/ 12212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL **rIntBufferLeft, /*!< real bands left qmf channel (38x64) */ 12222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL **iIntBufferLeft, /*!< imag bands left qmf channel (38x64) */ 12232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *rIntBufferRight, /*!< real bands right qmf channel (38x64) */ 12242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *iIntBufferRight /*!< imag bands right qmf channel (38x64) */ 12252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ) 12262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{ 12272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 12282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /*! 12292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project The 64-band QMF representation of the monaural signal generated by the SBR tool 12302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project is used as input of the PS tool. After the PS processing, the outputs of the left 12312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project and right hybrid synthesis filterbanks are used to generate the stereo output 12322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project signal. 12332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 12342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project <pre> 12352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 12362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ------------- ---------- ------------- 12372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project | Hybrid | M_n[k,m] | | L_n[k,m] | Hybrid | l[n] 12382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project m[n] --->| analysis |--------->| |--------->| synthesis |-----> 12392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project | filter bank | | | | filter bank | 12402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ------------- | Stereo | ------------- 12412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project | | recon- | 12422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project | | stuction | 12432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \|/ | | 12442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ------------- | | 12452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project | De- | D_n[k,m] | | 12462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project | correlation |--------->| | 12472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ------------- | | ------------- 12482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project | | R_n[k,m] | Hybrid | r[n] 12492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project | |--------->| synthesis |-----> 12502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project IID, ICC ------------------------>| | | filter bank | 12512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project (IPD, OPD) ---------- ------------- 12522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 12532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project m[n]: QMF represantation of the mono input 12542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project M_n[k,m]: (sub-)sub-band domain signals of the mono input 12552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project D_n[k,m]: decorrelated (sub-)sub-band domain signals 12562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project L_n[k,m]: (sub-)sub-band domain signals of the left output 12572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project R_n[k,m]: (sub-)sub-band domain signals of the right output 12582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project l[n],r[n]: left/right output signals 12592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 12602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project </pre> 12612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 12622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 12632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* get temporary hybrid qmf values of one timeslot */ 12642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project C_ALLOC_SCRATCH_START(hybridRealLeft, FIXP_DBL, NO_SUB_QMF_CHANNELS); 12652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project C_ALLOC_SCRATCH_START(hybridImagLeft, FIXP_DBL, NO_SUB_QMF_CHANNELS); 12662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project C_ALLOC_SCRATCH_START(hybridRealRight, FIXP_DBL, NO_SUB_QMF_CHANNELS); 12672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project C_ALLOC_SCRATCH_START(hybridImagRight, FIXP_DBL, NO_SUB_QMF_CHANNELS); 12682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 12692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project SCHAR sf_IntBuffer = h_ps_d->sf_IntBuffer; 12702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 12712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* clear workbuffer */ 12722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear(hybridRealLeft, NO_SUB_QMF_CHANNELS*sizeof(FIXP_DBL)); 12732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear(hybridImagLeft, NO_SUB_QMF_CHANNELS*sizeof(FIXP_DBL)); 12742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear(hybridRealRight, NO_SUB_QMF_CHANNELS*sizeof(FIXP_DBL)); 12752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FDKmemclear(hybridImagRight, NO_SUB_QMF_CHANNELS*sizeof(FIXP_DBL)); 12762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 12772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 12782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /*! 12792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Hybrid analysis filterbank: 12802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project The lower 3 (5) of the 64 QMF subbands are further split to provide better frequency resolution. 12812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for PS processing. 12822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project For the 10 and 20 stereo bands configuration, the QMF band H_0(w) is split 12832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project up into 8 (sub-) sub-bands and the QMF bands H_1(w) and H_2(w) are spit into 2 (sub-) 12842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4th. (See figures 8.20 and 8.22 of ISO/IEC 14496-3:2001/FDAM 2:2004(E) ) 12852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 12862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 12872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 12882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if (h_ps_d->procFrameBased == 1) /* If we have switched from frame to slot based processing */ 12892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project { /* fill hybrid delay buffer. */ 12902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project h_ps_d->procFrameBased = 0; 12912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 12922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project fillHybridDelayLine( rIntBufferLeft, 12932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project iIntBufferLeft, 12942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project hybridRealLeft, 12952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project hybridImagLeft, 12962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project hybridRealRight, 12972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project hybridImagRight, 12982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project &h_ps_d->specificTo.mpeg.hybrid ); 12992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 13002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project slotBasedHybridAnalysis ( rIntBufferLeft[HYBRID_FILTER_DELAY], /* qmf filterbank values */ 13022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project iIntBufferLeft[HYBRID_FILTER_DELAY], /* qmf filterbank values */ 13032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project hybridRealLeft, /* hybrid filterbank values */ 13042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project hybridImagLeft, /* hybrid filterbank values */ 13052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project &h_ps_d->specificTo.mpeg.hybrid); /* hybrid filterbank handle */ 13062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project SCHAR hybridScal = h_ps_d->specificTo.mpeg.hybrid.sf_mQmfBuffer; 13092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /*! 13122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Decorrelation: 13132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project By means of all-pass filtering and delaying, the (sub-)sub-band samples s_k(n) are 13142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project converted into de-correlated (sub-)sub-band samples d_k(n). 13152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project - k: frequency in hybrid spectrum 13162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project - n: time index 13172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 13182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project deCorrelateSlotBased( h_ps_d, /* parametric stereo decoder handle */ 13202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project hybridRealLeft, /* left hybrid time slot */ 13212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project hybridImagLeft, 13222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project hybridScal, /* scale factor of left hybrid time slot */ 13232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project rIntBufferLeft[0], /* left qmf time slot */ 13242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project iIntBufferLeft[0], 13252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project sf_IntBuffer, /* scale factor of left and right qmf time slot */ 13262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project hybridRealRight, /* right hybrid time slot */ 13272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project hybridImagRight, 13282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project rIntBufferRight, /* right qmf time slot */ 13292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project iIntBufferRight ); 13302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /*! 13342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Stereo Processing: 13352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project The sets of (sub-)sub-band samples s_k(n) and d_k(n) are processed according to 13362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project the stereo cues which are defined per stereo band. 13372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 13382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project applySlotBasedRotation( h_ps_d, /* parametric stereo decoder handle */ 13412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project hybridRealLeft, /* left hybrid time slot */ 13422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project hybridImagLeft, 13432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project rIntBufferLeft[0], /* left qmf time slot */ 13442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project iIntBufferLeft[0], 13452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project hybridRealRight, /* right hybrid time slot */ 13462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project hybridImagRight, 13472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project rIntBufferRight, /* right qmf time slot */ 13482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project iIntBufferRight ); 13492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /*! 13542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Hybrid synthesis filterbank: 13552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project The stereo processed hybrid subband signals l_k(n) and r_k(n) are fed into the hybrid synthesis 13562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project filterbanks which are identical to the 64 complex synthesis filterbank of the SBR tool. The 13572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project input to the filterbank are slots of 64 QMF samples. For each slot the filterbank outputs one 13582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project block of 64 samples of one reconstructed stereo channel. The hybrid synthesis filterbank is 13592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project computed seperatly for the left and right channel. 13602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 13612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* left channel */ 13642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project slotBasedHybridSynthesis ( hybridRealLeft, /* one timeslot of hybrid filterbank values */ 13652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project hybridImagLeft, 13662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project rIntBufferLeft[0], /* one timeslot of qmf filterbank values */ 13672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project iIntBufferLeft[0], 13682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project &h_ps_d->specificTo.mpeg.hybrid ); /* hybrid filterbank handle */ 13692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* right channel */ 13712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project slotBasedHybridSynthesis ( hybridRealRight, /* one timeslot of hybrid filterbank values */ 13722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project hybridImagRight, 13732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project rIntBufferRight, /* one timeslot of qmf filterbank values */ 13742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project iIntBufferRight, 13752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project &h_ps_d->specificTo.mpeg.hybrid ); /* hybrid filterbank handle */ 13762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* free temporary hybrid qmf values of one timeslot */ 13842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project C_ALLOC_SCRATCH_END(hybridImagRight, FIXP_DBL, NO_SUB_QMF_CHANNELS); 13852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project C_ALLOC_SCRATCH_END(hybridRealRight, FIXP_DBL, NO_SUB_QMF_CHANNELS); 13862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project C_ALLOC_SCRATCH_END(hybridImagLeft, FIXP_DBL, NO_SUB_QMF_CHANNELS); 13872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project C_ALLOC_SCRATCH_END(hybridRealLeft, FIXP_DBL, NO_SUB_QMF_CHANNELS); 13882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project}/* END ApplyPsSlot */ 13902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/***************************************************************************/ 13932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*! 13942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \brief assigns timeslots to an array 13962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \return 13982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 13992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project****************************************************************************/ 14002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 14012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic void assignTimeSlotsPS (FIXP_DBL *bufAdr, 14022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL **bufPtr, 14032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const int numSlots, 14042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const int numChan) 14052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{ 14062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *ptr; 14072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int slot; 14082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ptr = bufAdr; 14092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project for(slot=0; slot < numSlots; slot++) { 14102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project bufPtr [slot] = ptr; 14112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ptr += numChan; 14122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 14132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} 14142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1415