107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch/* ----------------------------------------------------------------------------------------------------------- 307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochSoftware License for The Fraunhofer FDK AAC Codec Library for Android 407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch� Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur F�rderung der angewandten Forschung e.V. 607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch All rights reserved. 707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 1. INTRODUCTION 9a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben MurdochThe Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements 10a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdochthe MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. 11a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben MurdochThis FDK AAC Codec software is intended to be used on a wide variety of Android devices. 1207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 1307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochAAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual 1407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochaudio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by 15a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdochindependent studies and is widely deployed. AAC has been standardized by ISO and IEC as part 16a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdochof the MPEG specifications. 1707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 1807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochPatent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) 1907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochmay be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners 2007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochindividually for the purpose of encoding or decoding bit streams in products that are compliant with 2107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochthe ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license 2207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochthese patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec 2307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochsoftware may already be covered under those patent licenses when it is used for those licensed purposes only. 2407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 2507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochCommercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, 2607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochare also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional 2707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochapplications information and documentation. 2807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 2907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch2. COPYRIGHT LICENSE 30f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 3107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochRedistribution and use in source and binary forms, with or without modification, are permitted without 3207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochpayment of copyright license fees provided that you satisfy the following conditions: 3307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 3407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochYou must retain the complete text of this software license in redistributions of the FDK AAC Codec or 3507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochyour modifications thereto in source code form. 3607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 3707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochYou must retain the complete text of this software license in the documentation and/or other materials 3807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochprovided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. 3907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochYou must make available free of charge copies of the complete source code of the FDK AAC Codec and your 4007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochmodifications thereto to recipients of copies in binary form. 4107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 4207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochThe name of Fraunhofer may not be used to endorse or promote products derived from this library without 4307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochprior written permission. 4407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 4507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochYou may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec 4607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochsoftware or your modifications thereto. 4707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 4807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochYour modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software 4907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochand the date of any change. For modified versions of the FDK AAC Codec, the term 5007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term 5107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." 5207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 5307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch3. NO PATENT LICENSE 5407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 5507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochNO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, 5607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with 5707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochrespect to this software. 5807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 59a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben MurdochYou may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized 6007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochby appropriate patent licenses. 6107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 6207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch4. DISCLAIMER 6307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 6407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochThis FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors 6507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties 6607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochof merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 6707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochCONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, 6807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochincluding but not limited to procurement of substitute goods or services; loss of use, data, or profits, 6907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochor business interruption, however caused and on any theory of liability, whether in contract, strict 7007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochliability, or tort (including negligence), arising in any way out of the use of this software, even if 7107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochadvised of the possibility of such damage. 7207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 7307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch5. CONTACT INFORMATION 7407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 7507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochFraunhofer Institute for Integrated Circuits IIS 7607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochAttention: Audio and Multimedia Departments - FDK AAC LL 7707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochAm Wolfsmantel 33 7807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch91058 Erlangen, Germany 7907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 8007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochwww.iis.fraunhofer.de/amm 81a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdochamm-info@iis.fraunhofer.de 8207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch----------------------------------------------------------------------------------------------------------- */ 8307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 8407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch/******************************** MPEG Audio Encoder ************************** 8507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 8607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch Initial author: M. Werner 8707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch contents/description: Perceptual entropie module 8807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 8907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch******************************************************************************/ 9007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 9107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#include "line_pe.h" 9207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#include "sf_estim.h" 9307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#include "bit_cnt.h" 9407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 9507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#include "genericStds.h" 96323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 9707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochstatic const FIXP_DBL C1LdData = FL2FXCONST_DBL(3.0/LD_DATA_SCALING); /* C1 = 3.0 = log(8.0)/log(2) */ 9807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochstatic const FIXP_DBL C2LdData = FL2FXCONST_DBL(1.3219281/LD_DATA_SCALING); /* C2 = 1.3219281 = log(2.5)/log(2) */ 9907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochstatic const FIXP_DBL C3LdData = FL2FXCONST_DBL(0.5593573); /* 1-C2/C1 */ 10007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 10107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 10207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch/* constants that do not change during successive pe calculations */ 10307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochvoid FDKaacEnc_prepareSfbPe(PE_CHANNEL_DATA *peChanData, 10407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch const FIXP_DBL *sfbEnergyLdData, 10507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch const FIXP_DBL *sfbThresholdLdData, 10607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch const FIXP_DBL *sfbFormFactorLdData, 10707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch const INT *sfbOffset, 10807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch const INT sfbCnt, 10907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch const INT sfbPerGroup, 11007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch const INT maxSfbPerGroup) 11107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 11207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch INT sfbGrp,sfb; 11307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch INT sfbWidth; 11407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch FIXP_DBL avgFormFactorLdData; 11507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch const FIXP_DBL formFacScaling = FL2FXCONST_DBL((float)FORM_FAC_SHIFT/LD_DATA_SCALING); 11607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 11707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch for (sfbGrp = 0;sfbGrp < sfbCnt;sfbGrp+=sfbPerGroup) { 11807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch for (sfb=0; sfb<maxSfbPerGroup; sfb++) { 11907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if ((FIXP_DBL)sfbEnergyLdData[sfbGrp+sfb] > (FIXP_DBL)sfbThresholdLdData[sfbGrp+sfb]) { 12007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch sfbWidth = sfbOffset[sfbGrp+sfb+1] - sfbOffset[sfbGrp+sfb]; 12107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch /* estimate number of active lines */ 12207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch avgFormFactorLdData = ((-sfbEnergyLdData[sfbGrp+sfb]>>1) + (CalcLdInt(sfbWidth)>>1))>>1; 12307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch peChanData->sfbNLines[sfbGrp+sfb] = 12407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch (INT)CalcInvLdData( (sfbFormFactorLdData[sfbGrp+sfb] + formFacScaling) + avgFormFactorLdData); 12507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch /* Make sure sfbNLines is never greater than sfbWidth due to unaccuracies (e.g. sfbEnergyLdData[sfbGrp+sfb] = 0x80000000) */ 12607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch peChanData->sfbNLines[sfbGrp+sfb] = fMin(sfbWidth, peChanData->sfbNLines[sfbGrp+sfb]); 12707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch } 12807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch else { 12907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch peChanData->sfbNLines[sfbGrp+sfb] = 0; 13007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch } 131323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) } 13207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch } 13307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 13407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 13507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch/* 13607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch formula for one sfb: 13707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch pe = n * ld(en/thr), if ld(en/thr) >= C1 13807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch pe = n * (C2 + C3 * ld(en/thr)), if ld(en/thr) < C1 13907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch n: estimated number of lines in sfb, 14007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch ld(x) = log(x)/log(2) 14107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 14207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch constPart is sfbPe without the threshold part n*ld(thr) or n*C3*ld(thr) 14307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch*/ 144f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)void FDKaacEnc_calcSfbPe(PE_CHANNEL_DATA *RESTRICT peChanData, 14507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch const FIXP_DBL *RESTRICT sfbEnergyLdData, 14607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch const FIXP_DBL *RESTRICT sfbThresholdLdData, 14707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch const INT sfbCnt, 14807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch const INT sfbPerGroup, 14907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch const INT maxSfbPerGroup, 15007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch const INT *isBook, 15107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch const INT *isScale) 15207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 15307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch INT sfbGrp,sfb; 15407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch INT nLines; 155d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) FIXP_DBL logDataRatio; 15607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch INT lastValIs = 0; 1576f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 15807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch peChanData->pe = 0; 159a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch peChanData->constPart = 0; 16007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch peChanData->nActiveLines = 0; 16107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 16207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch for(sfbGrp = 0;sfbGrp < sfbCnt;sfbGrp+=sfbPerGroup){ 16307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch for (sfb=0; sfb<maxSfbPerGroup; sfb++) { 16407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if ((FIXP_DBL)sfbEnergyLdData[sfbGrp+sfb] > (FIXP_DBL)sfbThresholdLdData[sfbGrp+sfb]) { 16507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch logDataRatio = (FIXP_DBL)(sfbEnergyLdData[sfbGrp+sfb] - sfbThresholdLdData[sfbGrp+sfb]); 16607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch nLines = peChanData->sfbNLines[sfbGrp+sfb]; 16707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (logDataRatio >= C1LdData) { 16810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch /* scale sfbPe and sfbConstPart with PE_CONSTPART_SHIFT */ 16907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch peChanData->sfbPe[sfbGrp+sfb] = fMultDiv2(logDataRatio, (FIXP_DBL)(nLines<<(LD_DATA_SHIFT+PE_CONSTPART_SHIFT+1))); 17007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch peChanData->sfbConstPart[sfbGrp+sfb] = 17107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch fMultDiv2(sfbEnergyLdData[sfbGrp+sfb], (FIXP_DBL)(nLines<<(LD_DATA_SHIFT+PE_CONSTPART_SHIFT+1))); ; 17207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 17307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch } 17407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch else { 17507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch /* scale sfbPe and sfbConstPart with PE_CONSTPART_SHIFT */ 17607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch peChanData->sfbPe[sfbGrp+sfb] = 17707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch fMultDiv2(((FIXP_DBL)C2LdData + fMult(C3LdData,logDataRatio)), (FIXP_DBL)(nLines<<(LD_DATA_SHIFT+PE_CONSTPART_SHIFT+1))); 17807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 17907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch peChanData->sfbConstPart[sfbGrp+sfb] = 18007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch fMultDiv2(((FIXP_DBL)C2LdData + fMult(C3LdData,sfbEnergyLdData[sfbGrp+sfb])), 18107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch (FIXP_DBL)(nLines<<(LD_DATA_SHIFT+PE_CONSTPART_SHIFT+1))) ; 18207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 18307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch nLines = fMultI(C3LdData, nLines); 18407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch } 18507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch peChanData->sfbNActiveLines[sfbGrp+sfb] = nLines; 18607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch } 18707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch else if( isBook[sfbGrp+sfb] ) { 18807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch /* provide for cost of scale factor for Intensity */ 18907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch INT delta = isScale[sfbGrp+sfb] - lastValIs; 19007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch lastValIs = isScale[sfbGrp+sfb]; 19107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch peChanData->sfbPe[sfbGrp+sfb] = FDKaacEnc_bitCountScalefactorDelta(delta)<<PE_CONSTPART_SHIFT; 19207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch peChanData->sfbConstPart[sfbGrp+sfb] = 0; 19307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch peChanData->sfbNActiveLines[sfbGrp+sfb] = 0; 19407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch } 19507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch else { 19607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch peChanData->sfbPe[sfbGrp+sfb] = 0; 19707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch peChanData->sfbConstPart[sfbGrp+sfb] = 0; 19807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch peChanData->sfbNActiveLines[sfbGrp+sfb] = 0; 19907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch } 20007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch /* sum up peChanData values */ 20107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch peChanData->pe += peChanData->sfbPe[sfbGrp+sfb]; 20207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch peChanData->constPart += peChanData->sfbConstPart[sfbGrp+sfb]; 20307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch peChanData->nActiveLines += peChanData->sfbNActiveLines[sfbGrp+sfb]; 20407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch } 20507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch } 20607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch /* correct scaled pe and constPart values */ 20707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch peChanData->pe>>=PE_CONSTPART_SHIFT; 20807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch peChanData->constPart>>=PE_CONSTPART_SHIFT; 20907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 21007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch