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