band_nrg.c revision e2e838afcf03e603a41a0455846eaf9614537c16
1a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik/* 2a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik ** Copyright 2003-2010, VisualOn, Inc. 3a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik ** 4a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik ** Licensed under the Apache License, Version 2.0 (the "License"); 5a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik ** you may not use this file except in compliance with the License. 6a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik ** You may obtain a copy of the License at 7a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik ** 8a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik ** http://www.apache.org/licenses/LICENSE-2.0 9a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik ** 10a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik ** Unless required by applicable law or agreed to in writing, software 11a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik ** distributed under the License is distributed on an "AS IS" BASIS, 12a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik ** See the License for the specific language governing permissions and 14a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik ** limitations under the License. 15a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik */ 16a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik/******************************************************************************* 17a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik File: band_nrg.c 18a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik 19a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik Content: Band/Line energy calculations functions 20a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik 21a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik*******************************************************************************/ 22a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik 23a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik#include "basic_op.h" 24a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik#include "band_nrg.h" 25a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik 26a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik#ifndef ARMV5E 27a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik/******************************************************************************** 28a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik* 29a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik* function name: CalcBandEnergy 30a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik* description: Calc sfb-bandwise mdct-energies for left and right channel 31a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik* 32a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik**********************************************************************************/ 33a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craikvoid CalcBandEnergy(const Word32 *mdctSpectrum, 34a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik const Word16 *bandOffset, 35a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik const Word16 numBands, 36a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik Word32 *bandEnergy, 37a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik Word32 *bandEnergySum) 38a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik{ 39a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik Word32 i, j; 40e36c5d675c8c2f900ef186a55edf71ce36ca9fa0Chris Craik Word32 accuSum = 0; 41e36c5d675c8c2f900ef186a55edf71ce36ca9fa0Chris Craik 42e36c5d675c8c2f900ef186a55edf71ce36ca9fa0Chris Craik for (i=0; i<numBands; i++) { 43e36c5d675c8c2f900ef186a55edf71ce36ca9fa0Chris Craik Word32 accu = 0; 44a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik for (j=bandOffset[i]; j<bandOffset[i+1]; j++) 45a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik accu = L_add(accu, MULHIGH(mdctSpectrum[j], mdctSpectrum[j])); 46a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik 47a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik accu = L_add(accu, accu); 48e36c5d675c8c2f900ef186a55edf71ce36ca9fa0Chris Craik accuSum = L_add(accuSum, accu); 49e36c5d675c8c2f900ef186a55edf71ce36ca9fa0Chris Craik bandEnergy[i] = accu; 50a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik } 51a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik *bandEnergySum = accuSum; 526a61141137c7a46d747aa611c9caf62436bc119fChris Craik} 536a61141137c7a46d747aa611c9caf62436bc119fChris Craik 546a61141137c7a46d747aa611c9caf62436bc119fChris Craik/******************************************************************************** 556a61141137c7a46d747aa611c9caf62436bc119fChris Craik* 56a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik* function name: CalcBandEnergyMS 57a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik* description: Calc sfb-bandwise mdct-energies for left add or minus right channel 58a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik* 59a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik**********************************************************************************/ 60a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craikvoid CalcBandEnergyMS(const Word32 *mdctSpectrumLeft, 61a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik const Word32 *mdctSpectrumRight, 62a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik const Word16 *bandOffset, 63a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik const Word16 numBands, 64a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik Word32 *bandEnergyMid, 65e36c5d675c8c2f900ef186a55edf71ce36ca9fa0Chris Craik Word32 *bandEnergyMidSum, 66a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik Word32 *bandEnergySide, 67a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik Word32 *bandEnergySideSum) 68a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik{ 69a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik 70a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik Word32 i, j; 71a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik Word32 accuMidSum = 0; 72a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik Word32 accuSideSum = 0; 73a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik 74a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik 75a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik for(i=0; i<numBands; i++) { 76a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik Word32 accuMid = 0; 77a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik Word32 accuSide = 0; 78a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik for (j=bandOffset[i]; j<bandOffset[i+1]; j++) { 79a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik Word32 specm, specs; 80a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik Word32 l, r; 81a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik 82a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik l = mdctSpectrumLeft[j] >> 1; 83a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik r = mdctSpectrumRight[j] >> 1; 84a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik specm = l + r; 85a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik specs = l - r; 86a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik accuMid = L_add(accuMid, MULHIGH(specm, specm)); 87a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik accuSide = L_add(accuSide, MULHIGH(specs, specs)); 88a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik } 89a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik 90a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik accuMid = L_add(accuMid, accuMid); 91a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik accuSide = L_add(accuSide, accuSide); 92a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik bandEnergyMid[i] = accuMid; 93a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik accuMidSum = L_add(accuMidSum, accuMid); 94 bandEnergySide[i] = accuSide; 95 accuSideSum = L_add(accuSideSum, accuSide); 96 97 } 98 *bandEnergyMidSum = accuMidSum; 99 *bandEnergySideSum = accuSideSum; 100} 101 102#endif