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: huffdecode.c 21dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 22dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 23dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REVISION HISTORY 24dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 25dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Modified from original shareware code 26dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 27dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Modified to pass variables by reference to eliminate use 28dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber of global variables. 29dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 30dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Change variable types. 31dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 32dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: (1) Modified to bring in-line with PV standards. 33dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (2) Eliminated global_gain on stack, 34dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber getics() has to define this parameter on its stack. 35dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (3) Eliminated multiple returns 36dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (4) Altered return logic of getics() 37dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (5) Convert Real coef -> Int32 coef 38dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (6) Move BITS *pInputStream to 2nd parameter of huffdecode.c 39dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber and getics.c 40dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (7) Pass pFrameInfo per channel, because two channels can have 41dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber different windows 42dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 43dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: (1) Eliminated function call to chn_config 44dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (2) Eliminate widx calculation 45dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (3) copy channel info from left to right when common_window 46dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber is enabled 47dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (4) add error checking of getmask return value 48dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 49dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Change default_position to current_program 50dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 51dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Remove prstflag 52dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 53dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Modify call to get_ics_info 54dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 55dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Modified so getmask is NOT called if the status returned 56dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber from get_ics_info indicates an error. 57dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 58dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: 59dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (1) Added include of "e_ElementId.h" 60dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Previously, this function was relying on another include file 61dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber to include e_ElementId.h 62dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 63dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (2) Updated the copyright header. 64dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 65dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Modified to include usage of the new "shared memory" structures 66dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber defined in s_tDec_Int_File.h and s_tDec_Int_Chan.h 67dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 68dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: 69dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (1) Updated to reflect the fact that the temporary FrameInfo used by getics.c 70dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber was moved into the region of memory shared with fxpCoef. 71dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 72dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: 73dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (1) Removed first parameter to getics. The temporary FrameInfo was 74dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber unnecessary. 75dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 76dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Replace some instances of getbits to get9_n_lessbits 77dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber when the number of bits read is 9 or less and get1bits 78dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber when only 1 bit is read. 79dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 80dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Relaxed tag verification. Some encoder do not match the tag 81dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber to the channel ID (as the standard request to differentiate 82dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber different channel), in our wireless work, with only mono 83dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber or stereo channel, this become restrictive to some encoders 84dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 85dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 86dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: 87dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 88dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 89dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber INPUT AND OUTPUT DEFINITIONS 90dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 91dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Inputs: 92dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 93dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber id_syn_ele = identification flag for channel syntactic element, Int 94dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 95dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pInputStream= pointer to input bitstream, BITS. 96dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 97dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pVars = pointer to structure that holds information for decoding, 98dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tDec_Int_File 99dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 100dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[] = pointer to structure that holds channel information, 101dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tDec_Int_Chan 102dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 103dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 104dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Local Stores/Buffers/Pointers Needed: 105dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber None 106dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 107dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Global Stores/Buffers/Pointers Needed: 108dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber None 109dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 110dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Outputs: 111dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber status = 0 if success 112dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber non-zero otherwise 113dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 114dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Pointers and Buffers Modified: 115dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars->sect contents updated by newly decoded section information 116dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber of current frame 117dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 118dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars->factors contents updated by newly decoded scalefactors 119dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 120dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars->ch_coef contents updated by newly decoded spectral coefficients 121dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 122dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber PChVars->tns contents updated by newly decoded TNS information 123dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 124dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pVars->hasmask contents updated by newly decoded Mid/Side mask 125dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber information 126dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 127dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pVars->pulseInfo contents updated by newly decoded pulse data information 128dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 129dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Local Stores Modified: 130dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber None 131dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 132dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Global Stores Modified: 133dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber None 134dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 135dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 136dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber FUNCTION DESCRIPTION 137dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 138dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber This function offers a framework for decoding the data of the next 1024 139dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber samples. It maps the channel configuration according to the id_syn_ele flag, 140dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber configures the channel information, and calls getics to do huffman decoding 141dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber The function returns 1 if there was an error 142dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 143dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 144dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REQUIREMENTS 145dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 146dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber This function should set up the channel configuration for huffman decoding 147dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 148dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 149dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REFERENCES 150dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 151dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (1) MPEG-2 NBC Audio Decoder 152dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber "This software module was originally developed by AT&T, Dolby 153dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Laboratories, Fraunhofer Gesellschaft IIS in the course of development 154dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber of the MPEG-2 NBC/MPEG-4 Audio standard ISO/IEC 13818-7, 14496-1,2 and 155dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 3. This software module is an implementation of a part of one or more 156dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MPEG-2 NBC/MPEG-4 Audio tools as specified by the MPEG-2 NBC/MPEG-4 157dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Audio standard. ISO/IEC gives users of the MPEG-2 NBC/MPEG-4 Audio 158dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber standards free license to this software module or modifications thereof 159dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for use in hardware or software products claiming conformance to the 160dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MPEG-2 NBC/MPEG-4 Audio standards. Those intending to use this software 161dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber module in hardware or software products are advised that this use may 162dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber infringe existing patents. The original developer of this software 163dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber module and his/her company, the subsequent editors and their companies, 164dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber and ISO/IEC have no liability for use of this software module or 165dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber modifications thereof in an implementation. Copyright is not released 166dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for non MPEG-2 NBC/MPEG-4 Audio conforming products.The original 167dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber developer retains full right to use the code for his/her own purpose, 168dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber assign or donate the code to a third party and to inhibit third party 169dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber from using the code for non MPEG-2 NBC/MPEG-4 Audio conforming products. 170dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber This copyright notice must be included in all copies or derivative 171dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber works." 172dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Copyright(c)1996. 173dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 174dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (2) ISO/IEC 14496-3: 1999(E) 175dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Subpart 4 p15 (single_channel_element, channel_pair_element) 176dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber p15 (Table 4.4.5 getmask) 177dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber p16 (Table 4.4.6 get_ics_info) 178dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber p24 (Table 4.4.24 getics) 179dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 180dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 181dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber PSEUDO-CODE 182dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 183dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tag = CALL getbits(LEN_TAG,pInputStream) 184dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MODIFYING(pInputStream) 185dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber RETURNING(tag) 186dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 187dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber common_window = 0; 188dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 189dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber IF (id_syn_ele == ID_CPE) 190dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber THEN 191dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber common_window = CALL getbits(LEN_COM_WIN,pInputStream); 192dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MODIFYING(pInputStream) 193dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber RETURNING(common_window) 194dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ENDIF 195dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 196dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pMcInfo = &pVars->mc_info; 197dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 198dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber IF ( (pMcInfo->ch_info[0].cpe != id_syn_ele) OR 199dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (pMcInfo->ch_info[0].tag != tag) ) 200dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber THEN 201dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber status = 1; 202dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ENDIF 203dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 204dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 205dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber IF (status == SUCCESS) 206dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber THEN 207dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber IF (id_syn_ele == ID_SCE) 208dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber THEN 209dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 210dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber leftCh = 0; 211dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber RIGHT = 0; 212dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[leftCh]->hasmask = 0; 213dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ELSEIF (id_syn_ele == ID_CPE) 214dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 215dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber leftCh = 0; 216dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber rightCh = 1; 217dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 218dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber IF (common_window != FALSE) 219dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber THEN 220dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 221dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber CALL get_ics_info( 222dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber audioObjectType = pVars->mc_info.audioObjectType, 223dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pInputStream = pInputStream, 224dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber common_window = common_window, 225dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pWindowSequence = &pChVars[leftCh]->wnd, 226dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &pChVars[leftCh]->wnd_shape_this_bk, 227dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[leftCh]->group, 228dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &pChVars[leftCh]->max_sfb, 229dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pVars->winmap, 230dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &pChVars[leftCh]->lt_status, 231dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &pChVars[rightCh]->lt_status); 232dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MODIFYING(pInputStream, wnd, wnd_shape_this_bk,group, 233dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber max_sfb, lt_status) 234dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber RETURNING(status) 235dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 236dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber IF (status == SUCCESS) 237dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber THEN 238dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 239dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[rightCh]->wnd = pChVars[leftCh]->wnd; 240dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[rightCh]->wnd_shape_this_bk = 241dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[leftCh]->wnd_shape_this_bk; 242dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[rightCh]->max_sfb = pChVars[leftCh]->max_sfb; 243dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pv_memcpy( 244dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[rightCh]->group, 245dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[leftCh]->group, 246dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber NSHORT*sizeof(pChVars[leftCh]->group[0])); 247dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 248dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber hasmask = CALL getmask( 249dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pVars->winmap[pChVars[leftCh]->wnd], 250dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pInputStream, 251dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[leftCh]->group, 252dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[leftCh]->max_sfb, 253dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[leftCh]->mask); 254dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MODIFYING(pInputStream, mask) 255dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber RETURNING(hasmask) 256dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 257dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber IF (hasmask == MASK_ERROR) 258dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber THEN 259dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber status = 1; 260dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ENDIF 261dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[leftCh]->hasmask = hasmask; 262dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[rightCh]->hasmask = hasmask; 263dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 264dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ENDIF 265dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 266dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ELSE 267dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 268dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[leftCh]->hasmask = 0; 269dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[rightCh]->hasmask = 0; 270dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ENDIF(common_window) 271dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 272dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ENDIF(id_syn_ele) 273dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 274dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ENDIF (status) 275dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 276dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ch = leftCh; 277dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 278dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber WHILE((ch <= rightCh) AND (status == SUCCESS)) 279dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 280dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber status = CALL getics( 281dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pInputStream, 282dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber common_window, 283dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pVars, 284dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[ch], 285dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[ch]->group, 286dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &pChVars[ch]->max_sfb, 287dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[ch]->cb_map, 288dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &pChVars[ch]->tns, 289dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pVars->winmap, 290dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &pVars->pulseInfo, 291dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[ch]->sect); 292dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MODIFYING(pInputStream,pVarsp,ChVars[ch],group, 293dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber max_sfb,tns,pulseInfo,sect) 294dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber RETURNING(status) 295dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 296dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ch++; 297dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 298dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ENDWHILE 299dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 300dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber RETURN status; 301dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 302dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 303dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber RESOURCES USED 304dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber When the code is written for a specific target processor the 305dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber the resources used should be documented below. 306dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 307dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber STACK USAGE: [stack count for this module] + [variable to represent 308dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber stack usage for each subroutine called] 309dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 310dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber where: [stack usage variable] = stack usage for [subroutine 311dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber name] (see [filename].ext) 312dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 313dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber DATA MEMORY USED: x words 314dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 315dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber PROGRAM MEMORY USED: x words 316dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 317dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber CLOCK CYCLES: [cycle count equation for this module] + [variable 318dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber used to represent cycle count for each subroutine 319dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber called] 320dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 321dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber where: [cycle count variable] = cycle count for [subroutine 322dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber name] (see [filename].ext) 323dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 324dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 325dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber*/ 326dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 327dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 328dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 329dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; INCLUDES 330dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 331dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "pv_audio_type_defs.h" 332dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "aac_mem_funcs.h" 333dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "huffman.h" 334dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "e_maskstatus.h" 335dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "e_elementid.h" 336dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "get_ics_info.h" 337dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 338dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 339dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; MACROS 340dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Define module specific macros here 341dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 342dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 343dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 344dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; DEFINES 345dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Include all pre-processor statements here. Include conditional 346dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; compile variables also. 347dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 348dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#define LEFT (0) 349dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#define RIGHT (1) 350dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 351dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; LOCAL FUNCTION DEFINITIONS 352dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Function Prototype declaration 353dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 354dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 355dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 356dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS 357dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Variable declaration - defined here and used outside this module 358dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 359dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 360dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 361dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; EXTERNAL FUNCTION REFERENCES 362dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Declare functions defined elsewhere and referenced in this module 363dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 364dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 365dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 366dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 367dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Declare variables used in this module but defined elsewhere 368dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 369dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 370dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 371dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; FUNCTION CODE 372dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 373dacaa73ae5010b66f4224d70a520945e5b653544Andreas HuberInt huffdecode( 374dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int id_syn_ele, 375dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber BITS *pInputStream, 376dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tDec_Int_File *pVars, 377dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tDec_Int_Chan *pChVars[]) 378dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 379dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber{ 380dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /*---------------------------------------------------------------------------- 381dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ; Define all local variables 382dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ----------------------------------------------------------------------------*/ 383dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int ch; 384dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int common_window; 385dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int hasmask; 386dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int status = SUCCESS; 387dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int num_channels = 0; 388dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MC_Info *pMcInfo; 389dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 390dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber per_chan_share_w_fxpCoef *pChLeftShare; /* Helper pointer */ 391dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber per_chan_share_w_fxpCoef *pChRightShare; /* Helper pointer */ 392dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /*---------------------------------------------------------------------------- 393dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ; Function body here 394dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ----------------------------------------------------------------------------*/ 395dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 396dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber get9_n_lessbits( 397dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber LEN_TAG, 398dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pInputStream); 399dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 400dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* suppose an un-supported id_syn_ele will never be passed */ 401dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 402dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber common_window = 0; 403dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 404dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber if (id_syn_ele == ID_CPE) 405dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 406dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber common_window = 407dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber get1bits(pInputStream); 408dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 409dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 410dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pMcInfo = &pVars->mc_info; 411dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 412dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 413dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * check if provided info (num of channels) on audio config, 414dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * matches read bitstream data, if not, allow update only once. 415dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * In almost all cases it should match. 416dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 417dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber if ((pMcInfo->ch_info[0].cpe != id_syn_ele)) 418dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 419dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber if (pVars->mc_info.implicit_channeling) /* check done only once */ 420dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 421dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pMcInfo->ch_info[0].cpe = id_syn_ele & 1; /* collect info from bitstream 422dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * implicit_channeling flag is locked 423dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * after 1st frame, to avoid toggling 424dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * parameter in the middle of the clip 425dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 426dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pMcInfo->nch = (id_syn_ele & 1) + 1; /* update number of channels */ 427dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 428dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber else 429dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 430dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber status = 1; /* ERROR break if syntax error persist */ 431dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 432dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 433dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 434dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber if (status == SUCCESS) 435dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 436dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber if (id_syn_ele == ID_SCE) 437dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 438dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 439dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber num_channels = 1; 440dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pVars->hasmask = 0; 441dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 442dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber else if (id_syn_ele == ID_CPE) 443dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 444dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChLeftShare = pChVars[LEFT]->pShareWfxpCoef; 445dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChRightShare = pChVars[RIGHT]->pShareWfxpCoef; 446dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber num_channels = 2; 447dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 448dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber if (common_window != FALSE) 449dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 450dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 451dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber status = get_ics_info( 452dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (tMP4AudioObjectType) pVars->mc_info.audioObjectType, 453dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pInputStream, 454dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (Bool)common_window, 455dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (WINDOW_SEQUENCE *) & pChVars[LEFT]->wnd, 456dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (WINDOW_SHAPE *) & pChVars[LEFT]->wnd_shape_this_bk, 457dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChLeftShare->group, 458dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (Int *) & pChLeftShare->max_sfb, 459dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pVars->winmap, 460dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (LT_PRED_STATUS *) & pChLeftShare->lt_status, 461dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (LT_PRED_STATUS *) & pChRightShare->lt_status); 462dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 463dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber if (status == SUCCESS) 464dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 465dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* copy left channel info to right channel */ 466dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[RIGHT]->wnd = pChVars[LEFT]->wnd; 467dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[RIGHT]->wnd_shape_this_bk = 468dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[LEFT]->wnd_shape_this_bk; 469dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChRightShare->max_sfb = pChLeftShare->max_sfb; 470dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pv_memcpy( 471dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChRightShare->group, 472dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChLeftShare->group, 473dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber NSHORT*sizeof(pChLeftShare->group[0])); 474dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 475dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber hasmask = getmask( 476dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pVars->winmap[pChVars[LEFT]->wnd], 477dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pInputStream, 478dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChLeftShare->group, 479dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChLeftShare->max_sfb, 480dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pVars->mask); 481dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 482dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber if (hasmask == MASK_ERROR) 483dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 484dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber status = 1; /* ERROR code */ 485dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 486dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pVars->hasmask = hasmask; 487dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 488dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } /* if (status == 0) */ 489dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 490dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber else 491dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 492dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pVars->hasmask = 0; 493dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } /* if (common_window) */ 494dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 495dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } /* if (id_syn_ele) */ 496dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 497dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } /* if (status) */ 498dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 499dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ch = 0; 500dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber while ((ch < num_channels) && (status == SUCCESS)) 501dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 502dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChLeftShare = pChVars[ch]->pShareWfxpCoef; 503dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 504dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber status = getics( 505dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pInputStream, 506dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber common_window, 507dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pVars, 508dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChVars[ch], 509dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChLeftShare->group, 510dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &pChLeftShare->max_sfb, 511dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pChLeftShare->cb_map, 512dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &pChLeftShare->tns, 513dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pVars->winmap, 514dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber &pVars->share.a.pulseInfo, 515dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pVars->share.a.sect); 516dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 517dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ch++; 518dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 519dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } /* while (ch) */ 520dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 521dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /*---------------------------------------------------------------------------- 522dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ; Return status 523dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ----------------------------------------------------------------------------*/ 524dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 525dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return status; 526dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 527dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber} /* huffdecode */ 528dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 529