1dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/* ------------------------------------------------------------------ 2dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Copyright (C) 1998-2009 PacketVideo 3dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 4dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * you may not use this file except in compliance with the License. 6dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * You may obtain a copy of the License at 7dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 8dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 10dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Unless required by applicable law or agreed to in writing, software 11dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * express or implied. 14dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * See the License for the specific language governing permissions 15dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * and limitations under the License. 16dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * ------------------------------------------------------------------- 17dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 18dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/* 19dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 20dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Pathname: pns_intensity_right.c 21dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 22dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 23dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber INPUT AND OUTPUT DEFINITIONS 24dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 25dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Inputs: 26dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 27dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber hasmask = mask status for the frame. Enumerated. 28dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 29dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pFrameInfo = Pointer to structure that holds information about each group. 30dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (long block flag, number of windows, scalefactor bands 31dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber per group, etc.) 32dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber [const pFrameInfo * const] 33dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 34dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber group = Array that contains indexes of the 35dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber first window in the next group. 36dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber [const Int *, length num_win] 37dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 38dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber mask_map = Array that denotes whether M/S stereo is turned on for 39dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber each grouped scalefactor band. 40dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber [const Int *, length MAX_SFB] 41dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 42dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber codebook_map = Array that denotes which Huffman codebook was used for 43dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber the encoding of each grouped scalefactor band. 44dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber [const Int *, length MAX_SFB] 45dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 46dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber factorsL = Array of grouped scalefactors for left chan. 47dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber [const Int *, length MAX_SFB] 48dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 49dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber factorsR = Array of scalefactors for right chan. 50dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber [const Int *, length MAX_SFB] 51dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 52dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber sfb_prediction_used = Flag that denotes the activation of long term prediction 53dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber on a per-scalefactor band, non-grouped basis. 54dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber [const Int *, length MAX_SFB] 55dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 56dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ltp_data_present = Flag that indicates whether LTP is enbaled for this frame. 57dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber [const Bool] 58dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 59dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber coefLeft = Array containing the fixed-point spectral coefficients 60dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for the left channel. 61dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber [Int32 *, length 1024] 62dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 63dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber coefRight = Array containing the fixed-point spectral coefficients 64dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for the right channel. 65dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber [Int32 *, length 1024] 66dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 67dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber q_formatLeft = The Q-format for the left channel's fixed-point spectral 68dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber coefficients, on a per-scalefactor band, non-grouped basis. 69dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber [Int *, length MAX_SFB] 70dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 71dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber q_formatRight = The Q-format for the right channel's fixed-point spectral 72dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber coefficients, on a per-scalefactor band, non-grouped basis. 73dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber [Int *, length MAX_SFB] 74dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 75dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pCurrentSeed = Pointer to the current seed for the random number 76dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber generator in the function gen_rand_vector(). 77dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber [Int32 * const] 78dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 79dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Local Stores/Buffers/Pointers Needed: 80dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber None 81dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 82dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Global Stores/Buffers/Pointers Needed: 83dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber None 84dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 85dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Outputs: 86dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber None 87dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 88dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Pointers and Buffers Modified: 89dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber coefLeft = Contains the new spectral information. 90dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 91dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber coefRight = Contains the new spectral information. 92dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 93dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber q_formatLeft = Q-format may be updated with changed to fixed-point 94dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber data in coefLeft. 95dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 96dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber q_formatRight = Q-format may be updated with changed to fixed-point 97dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber data in coefRight. 98dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 99dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pCurrentSeed = Value pointed to by pCurrentSeed updated by calls 100dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber to gen_rand_vector(). 101dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 102dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Local Stores Modified: 103dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber None 104dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 105dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Global Stores Modified: 106dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber None 107dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 108dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 109dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber FUNCTION DESCRIPTION 110dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 111dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber This function steps through all of the scalefactor bands, looking for 112dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber either PNS or IS to be enabled on the right channel. 113dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 114dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber If the codebook used is >= NOISE_HCB, the code then checks for the use 115dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber of Huffman codebooks NOISE_HCB, INTENSITY_HCB, or INTENSITY_HCB2. 116dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 117dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber When a SFB utilizing the codebook NOISE_HCB is detected, a check is made to 118dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber see if M/S has also been enabled for that SFB. 119dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 120dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber If M/S is not enabled, the band's spectral information is filled with 121dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber scaled random data. The scaled random data is generated by the function 122dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber gen_rand_vector. This is done across all windows in the group. 123dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 124dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber If M/S is enabled, the band's spectral information is derived from the data 125dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber residing in the same band on the left channel. The information on the right 126dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber channel has independent scaling, so this is a bit more involved than a 127dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber direct copy of the information on the left channel. This is done by calling 128dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber the inline function pns_corr(). 129dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 130dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber When a SFB utilizing an intensity codebook is detected, the band's spectral 131dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber information is generated from the information on the left channel. 132dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber This is done across all windows in the group. M/S being enabled has the 133dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber effect of reversing the sign of the data on the right channel. This code 134dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber resides in the inline function intensity_right(). 135dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 136dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 137dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REQUIREMENTS 138dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 139dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 140dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 141dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REFERENCES 142dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 143dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (1) ISO/IEC 14496-3:1999(E) 144dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Part 3 145dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Subpart 4.6.7.1 M/S stereo 146dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Subpart 4.6.7.2.3 Decoding Process (Intensity Stereo) 147dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Subpart 4.6.12.3 Decoding Process (PNS) 148dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Subpart 4.6.2 ScaleFactors 149dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 150dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (2) MPEG-2 NBC Audio Decoder 151dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber "This software module was originally developed by AT&T, Dolby 152dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Laboratories, Fraunhofer Gesellschaft IIS in the course of development 153dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber of the MPEG-2 NBC/MPEG-4 Audio standard ISO/IEC 13818-7, 14496-1,2 and 154dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 3. This software module is an implementation of a part of one or more 155dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MPEG-2 NBC/MPEG-4 Audio tools as specified by the MPEG-2 NBC/MPEG-4 156dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Audio standard. ISO/IEC gives users of the MPEG-2 NBC/MPEG-4 Audio 157dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber standards free license to this software module or modifications thereof 158dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for use in hardware or software products claiming conformance to the 159dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MPEG-2 NBC/MPEG-4 Audio standards. Those intending to use this software 160dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber module in hardware or software products are advised that this use may 161dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber infringe existing patents. The original developer of this software 162dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber module and his/her company, the subsequent editors and their companies, 163dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber and ISO/IEC have no liability for use of this software module or 164dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber modifications thereof in an implementation. Copyright is not released 165dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for non MPEG-2 NBC/MPEG-4 Audio conforming products.The original 166dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber developer retains full right to use the code for his/her own purpose, 167dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber assign or donate the code to a third party and to inhibit third party 168dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber from using the code for non MPEG-2 NBC/MPEG-4 Audio conforming products. 169dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber This copyright notice must be included in all copies or derivative 170dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber works." 171dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Copyright(c)1996. 172dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 173dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 174dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber PSEUDO-CODE 175dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pCoefRight = coefRight; 176dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pCoefLeft = coefLeft; 177dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 178dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber window_start = 0; 179dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tot_sfb = 0; 180dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber start_indx = 0; 181dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 182dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber coef_per_win = pFrameInfo->coef_per_win[0]; 183dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 184dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber sfb_per_win = pFrameInfo->sfb_per_win[0]; 185dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 186dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber DO 187dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pBand = pFrameInfo->win_sfb_top[window_start]; 188dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 189dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber partition = *pGroup; 190dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pGroup = pGroup + 1; 191dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 192dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber band_start = 0; 193dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 194dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber wins_in_group = (partition - window_start); 195dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 196dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber FOR (sfb = sfb_per_win; sfb > 0; sfb--) 197dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 198dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber band_stop = *(pBand); 199dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pBand = pBand + 1; 200dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 201dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber codebook = *(pCodebookMap); 202dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pCodebookMap = pCodebookMap + 1; 203dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 204dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber mask_enabled = *(pMaskMap); 205dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pMaskMap = pMaskMap + 1; 206dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 207dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber band_length = band_stop - band_start; 208dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 209dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber IF (codebook == NOISE_HCB) 210dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 211dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber sfb_prediction_used[tot_sfb] &= ltp_data_present; 212dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 213dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber IF (sfb_prediction_used[tot_sfb] == FALSE) 214dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 215dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber mask_enabled = mask_enabled AND hasmask; 216dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 217dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber IF (mask_enabled == FALSE) 218dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 219dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pWindow_CoefR = &(pCoefRight[band_start]); 220dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 221dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber start_indx = tot_sfb; 222dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 223dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber FOR (win_indx = wins_in_group; 224dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber win_indx > 0; 225dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber win_indx--) 226dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 227dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber CALL 228dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber q_formatRight[start_indx] = 229dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber gen_rand_vector( 230dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pWindow_CoefR, 231dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber band_length, 232dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pCurrentSeed, 233dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(pFactorsRight)); 234dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MODIFYING 235dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pCoefRight[band_start] 236dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber RETURNING 237dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber q_formatRight[start_indx] 238dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 239dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pWindow_CoefR += coef_per_win; 240dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 241dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber start_indx = start_indx + sfb_per_win; 242dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 243dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ENDFOR 244dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 245dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ELSE 246dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber CALL 247dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pns_corr( 248dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (*(pFactorsRight) - 249dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(pFactorsLeft) ), 250dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber coef_per_win, 251dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber sfb_per_win, 252dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber wins_in_group, 253dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber band_length, 254dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber q_formatLeft[tot_sfb], 255dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &(q_formatRight[tot_sfb]), 256dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &(pCoefLeft[band_start]), 257dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &(pCoefRight[band_start])); 258dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 259dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MODIFYING 260dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pCoefRightt[band_start] 261dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber q_formatRight[tot_sfb] 262dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber RETURNING 263dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber NONE 264dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ENDIF 265dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 266dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ENDIF 267dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 268dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ELSE IF (codebook >= INTENSITY_HCB2) 269dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 270dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber mask_enabled = mask_enabled AND hasmask; 271dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 272dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber CALL 273dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber intensity_right( 274dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(pFactorsRight), 275dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber coef_per_win, 276dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber sfb_per_win, 277dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber wins_in_group, 278dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber band_length, 279dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber codebook, 280dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber mask_enabled, 281dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &(q_formatLeft[tot_sfb]), 282dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &(q_formatRight[tot_sfb]), 283dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &(pCoefLeft[band_start]), 284dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &(pCoefRight[band_start])); 285dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 286dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MODIFYING 287dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pCoefRightt[band_start] 288dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber q_formatRight[tot_sfb] 289dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber RETURNING 290dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber NONE 291dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 292dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ENDIF 293dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 294dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber band_start = band_stop; 295dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 296dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tot_sfb = tot_sfb + 1; 297dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 298dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ENDFOR 299dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 300dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber coef_per_win = coef_per_win * (wins_in_group); 301dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 302dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber wins_in_group = wins_in_group - 1; 303dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 304dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tot_sfb = tot_sfb + sfb_per_win * wins_in_group; 305dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pFactorsRight = pFactorsRight + sfb_per_win * wins_in_group; 306dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pFactorsLeft = pFactorsLeft + sfb_per_win * wins_in_group; 307dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 308dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pCoefRight = pCoefRight + coef_per_win; 309dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pCoefLeft = pCoefLeft + coef_per_win; 310dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 311dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber window_start = partition; 312dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 313dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber WHILE (partition < pFrameInfo->num_win); 314dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 315dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return; 316dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 317dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 318dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber RESOURCES USED 319dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber When the code is written for a specific target processor the 320dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber resources used should be documented below. 321dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 322dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber STACK USAGE: [stack count for this module] + [variable to represent 323dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber stack usage for each subroutine called] 324dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 325dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber where: [stack usage variable] = stack usage for [subroutine 326dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber name] (see [filename].ext) 327dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 328dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber DATA MEMORY USED: x words 329dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 330dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber PROGRAM MEMORY USED: x words 331dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 332dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber CLOCK CYCLES: [cycle count equation for this module] + [variable 333dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber used to represent cycle count for each subroutine 334dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber called] 335dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 336dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber where: [cycle count variable] = cycle count for [subroutine 337dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber name] (see [filename].ext) 338dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 339dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 340dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber*/ 341dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 342dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 343dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 344dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; INCLUDES 345dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 346dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "pv_audio_type_defs.h" 347dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "pns_intensity_right.h" 348dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "e_huffmanconst.h" 349dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "gen_rand_vector.h" 350dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "intensity_right.h" 351dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "pns_corr.h" 352dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 353dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 354dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; MACROS 355dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Define module specific macros here 356dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 357dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 358dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 359dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; DEFINES 360dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Include all pre-processor statements here. Include conditional 361dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; compile variables also. 362dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 363dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 364dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 365dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; LOCAL FUNCTION DEFINITIONS 366dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Function Prototype declaration 367dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 368dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 369dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 370dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS 371dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Variable declaration - defined here and used outside this module 372dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 373dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 374dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 375dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; EXTERNAL FUNCTION REFERENCES 376dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Declare functions defined elsewhere and referenced in this module 377dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 378dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 379dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 380dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 381dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 382dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Declare variables used in this module but defined elsewhere 383dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 384dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 385dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 386dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; FUNCTION CODE 387dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 388dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 389dacaa73ae5010b66f4224d70a520945e5b653544Andreas Hubervoid pns_intensity_right( 390dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber const Int hasmask, 391dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber const FrameInfo * const pFrameInfo, 392dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber const Int group[], 393dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber const Bool mask_map[], 394dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber const Int codebook_map[], 395dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber const Int factorsL[], 396dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber const Int factorsR[], 397dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int sfb_prediction_used[], 398dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber const Bool ltp_data_present, 399dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 coefLeft[], 400dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 coefRight[], 401dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int q_formatLeft[MAXBANDS], 402dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int q_formatRight[MAXBANDS], 403dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 * const pCurrentSeed) 404dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber{ 405dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 406dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 *pCoefRight; 407dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 *pWindow_CoefR; 408dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 409dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 *pCoefLeft; 410dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 411dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int tot_sfb; 412dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int start_indx; 413dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int sfb; 414dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 415dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int band_length; 416dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int band_start; 417dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int band_stop; 418dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int coef_per_win; 419dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 420dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int codebook; 421dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int partition; 422dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int window_start; 423dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 424dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int sfb_per_win; 425dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int wins_in_group; 426dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int win_indx; 427dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 428dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber const Int16 *pBand; 429dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber const Int *pFactorsLeft = factorsL; 430dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber const Int *pFactorsRight = factorsR; 431dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber const Int *pCodebookMap = codebook_map; 432dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber const Int *pGroup = group; 433dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber const Bool *pMaskMap = mask_map; 434dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 435dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Bool mask_enabled; 436dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 437dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pCoefRight = coefRight; 438dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pCoefLeft = coefLeft; 439dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 440dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber window_start = 0; 441dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tot_sfb = 0; 442dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber start_indx = 0; 443dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 444dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 445dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Each window in the frame should have the same number of coef's, 446dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * so coef_per_win is constant in all the loops 447dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 448dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber coef_per_win = pFrameInfo->coef_per_win[0]; 449dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 450dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 451dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Because the number of scalefactor bands per window should be 452dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * constant for each frame, sfb_per_win can be determined outside 453dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * of the loop. 454dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 455dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * For 44.1 kHz sampling rate sfb_per_win = 14 for short windows 456dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * sfb_per_win = 49 for long windows 457dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 458dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 459dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber sfb_per_win = pFrameInfo->sfb_per_win[0]; 460dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 461dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber do 462dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 463dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pBand = pFrameInfo->win_sfb_top[window_start]; 464dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 465dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /*---------------------------------------------------------- 466dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Partition is equal to the first window in the next group 467dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 468dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { Group 0 }{ Group 1 }{ Group 2 }{Group 3} 469dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber [win 0][win 1][win 2][win 3][win 4][win 5][win 6][win 7] 470dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 471dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pGroup[0] = 2 472dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pGroup[1] = 5 473dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pGroup[2] = 7 474dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pGroup[3] = 8 475dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber -----------------------------------------------------------*/ 476dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber partition = *(pGroup++); 477dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 478dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber band_start = 0; 479dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 480dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber wins_in_group = (partition - window_start); 481dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 482dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for (sfb = sfb_per_win; sfb > 0; sfb--) 483dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 484dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* band is offset table, band_stop is last coef in band */ 485dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber band_stop = *(pBand++); 486dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 487dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber codebook = *(pCodebookMap++); 488dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 489dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber mask_enabled = *(pMaskMap++); 490dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 491dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 492dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * When a tool utilizing sfb is found, apply the correct tool 493dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * to that sfb in each window in the group 494dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 495dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Example... sfb[3] == NOISE_HCB 496dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 497dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * [ Group 1 ] 498dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * [win 0 ][win 1 ] 499dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * [0][1][2][X][4][5][6][7][0][1][2][X][4][5][6][7] 500dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 501dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * The for(sfb) steps through the sfb's 0-7 in win 0. 502dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 503dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Finding sfb[3]'s codebook == NOISE_HCB, the code 504dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * steps through all the windows in the group (they share 505dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * the same scalefactors) and replaces that sfb with noise. 506dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 507dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 508dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 509dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Experimental results suggest that ms_synt is the most 510dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * commonly used tool, so check for it first. 511dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 512dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 513dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 514dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber band_length = band_stop - band_start; 515dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 516dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber if (codebook == NOISE_HCB) 517dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 518dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber sfb_prediction_used[tot_sfb] &= ltp_data_present; 519dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 520dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber if (sfb_prediction_used[tot_sfb] == FALSE) 521dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 522dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 523dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * The branch and the logical AND interact in the 524dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * following manner... 525dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 526dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * mask_enabled == 0 hasmask == X -- gen_rand_vector 527dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * mask_enabled == 1 hasmask == 1 -- pns_corr 528dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * mask_enabled == 0 hasmask == 1 -- gen_rand_vector 529dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * mask_enabled == 1 hasmask == 2 -- gen_rand_vector 530dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * mask_enabled == 0 hasmask == 2 -- gen_rand_vector 531dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 532dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 533dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber mask_enabled &= hasmask; 534dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 535dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber if (mask_enabled == FALSE) 536dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 537dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pWindow_CoefR = &(pCoefRight[band_start]); 538dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 539dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 540dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Step through all the windows in this group, 541dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * replacing this band in each window's 542dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * spectrum with random noise 543dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 544dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber start_indx = tot_sfb; 545dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 546dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for (win_indx = wins_in_group; 547dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber win_indx > 0; 548dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber win_indx--) 549dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 550dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 551dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* generate random noise */ 552dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber q_formatRight[start_indx] = 553dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber gen_rand_vector( 554dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pWindow_CoefR, 555dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber band_length, 556dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pCurrentSeed, 557dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(pFactorsRight)); 558dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 559dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pWindow_CoefR += coef_per_win; 560dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 561dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber start_indx += sfb_per_win; 562dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 563dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 564dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 565dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber else 566dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 567dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pns_corr( 568dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (*(pFactorsRight) - 569dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(pFactorsLeft)), 570dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber coef_per_win, 571dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber sfb_per_win, 572dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber wins_in_group, 573dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber band_length, 574dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber q_formatLeft[tot_sfb], 575dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &(q_formatRight[tot_sfb]), 576dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &(pCoefLeft[band_start]), 577dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &(pCoefRight[band_start])); 578dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 579dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } /* if (mask_map == FALSE) */ 580dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 581dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } /* if (sfb_prediction_used[tot_sfb] == FALSE) */ 582dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 583dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } /* if (codebook == 0) */ 584dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber else if (codebook >= INTENSITY_HCB2) 585dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 586dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 587dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * The logical AND flags the inversion of intensity 588dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * in the following manner. 589dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 590dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * mask_enabled == X hasmask == 0 -- DO NOT INVERT 591dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * mask_enabled == 0 hasmask == X -- DO NOT INVERT 592dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * mask_enabled == 1 hasmask == 1 -- DO INVERT 593dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * mask_enabled == 0 hasmask == 1 -- DO NOT INVERT 594dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * mask_enabled == 1 hasmask == 2 -- DO NOT INVERT 595dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * mask_enabled == 0 hasmask == 2 -- DO NOT INVERT 596dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 597dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 598dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber mask_enabled &= hasmask; 599dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 600dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber intensity_right( 601dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(pFactorsRight), 602dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber coef_per_win, 603dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber sfb_per_win, 604dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber wins_in_group, 605dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber band_length, 606dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber codebook, 607dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber mask_enabled, 608dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &(q_formatLeft[tot_sfb]), 609dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &(q_formatRight[tot_sfb]), 610dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &(pCoefLeft[band_start]), 611dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &(pCoefRight[band_start])); 612dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 613dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } /* END else codebook must be INTENSITY_HCB or ... */ 614dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 615dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber band_start = band_stop; 616dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 617dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tot_sfb++; 618dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 619dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pFactorsLeft++; 620dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pFactorsRight++; 621dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 622dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } /* for (sfb) */ 623dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 624dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 625dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Increment pCoefRight and pCoefLeft by 626dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * coef_per_win * the number of windows 627dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 628dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 629dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pCoefRight += coef_per_win * wins_in_group; 630dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pCoefLeft += coef_per_win * wins_in_group--; 631dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 632dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 633dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Increase tot_sfb by sfb_per_win times the number of windows minus 1. 634dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * The minus 1 comes from the fact that tot_sfb is already pointing 635dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * to the first sfb in the 2nd window of the group. 636dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 637dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tot_sfb += sfb_per_win * wins_in_group; 638dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 639dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pFactorsRight += sfb_per_win * wins_in_group; 640dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pFactorsLeft += sfb_per_win * wins_in_group; 641dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 642dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber window_start = partition; 643dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 644dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 645dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber while (partition < pFrameInfo->num_win); 646dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 647dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* pFrameInfo->num_win = 1 for long windows, 8 for short_windows */ 648dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 649dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return; 650dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 651dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber} /* pns_intensity_right() */ 652dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 653dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 654