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: get_prog_config.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:  Move functionality from get_adif_header for when to change
31dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber               the current program configuration, add a temporary config
32dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber               to read into, clean up code, change function prototype.
33dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
34dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description:  Clean up
35dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
36dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description:  Update per review comments
37dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
38dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description:  Fix double 'could'
39dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
40dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description:  change enter_mc_info to set_mc_info
41dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
42dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description:  update comments
43dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
44dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Replace some instances of getbits to get9_n_lessbits
45dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber              when the number of bits read is 9 or less and get1bits
46dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber              when only 1 bit is read.
47dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
48dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Who:                                   Date:
49dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description:
50dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
51dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------
52dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber INPUT AND OUTPUT DEFINITIONS
53dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
54dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Inputs:
55dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pVars      = pointer to the structure that holds all information for
56dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                 this instance of the library. pVars->prog_config is directly
57dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                 used, and pVars->mc_info, pVars->prog_config, pVars->winmap,
58dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                 pVars->SFBWidth128 are needed indirectly for calling
59dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                 set_mc_info. Data type  pointer to tDec_Int_File structure.
60dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
61dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pScratchPCE = pointer to a temporary ProgConfig structure to be used
62dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                  to read in the program configuration element.
63dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
64dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Local Stores/Buffers/Pointers Needed: None
65dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
66dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Global Stores/Buffers/Pointers Needed: None
67dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
68dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Outputs:
69dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    status     = zero if no error was found, non-zero otherwise.
70dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
71dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Pointers and Buffers Modified:
72dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pVars->prog_config contents are updated with the PCE read in.
73dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pVars->mc_info contents are updated with channel information.
74dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pVars->winmap contents are updated with window information.
75dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pVars->SFBWidth128 contents are updated with scale factor band width data.
76dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
77dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Local Stores Modified: None
78dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
79dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Global Stores Modified: None
80dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
81dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------
82dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber FUNCTION DESCRIPTION
83dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
84dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber This function reads from the input stream to memory for a temporary
85dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber program configuration element (PCE). If the PCE read is the first
86dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber encountered it is saved. Or, if the tag of the PCE read matches the tag of
87dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber the first PCE encounted, it is saved as well. This is a mechanism for
88dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber changing the sampling rate.
89dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
90dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------
91dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REQUIREMENTS
92dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
93dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber This function shall not use static or global variables.
94dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
95dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------
96dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REFERENCES
97dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
98dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (1) ISO/IEC 13818-7:1997 Titled "Information technology - Generic coding
99dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   of moving pictures and associated audio information - Part 7: Advanced
100dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   Audio Coding (AAC)", Table 6.21 - Syntax of program_config_element(),
101dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   page 16, and section 8.5 "Program Config Element (PCE)", page 30.
102dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
103dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (2) MPEG-2 NBC Audio Decoder
104dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   "This software module was originally developed by AT&T, Dolby
105dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   Laboratories, Fraunhofer Gesellschaft IIS in the course of development
106dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   of the MPEG-2 NBC/MPEG-4 Audio standard ISO/IEC 13818-7, 14496-1,2 and
107dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   3. This software module is an implementation of a part of one or more
108dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   MPEG-2 NBC/MPEG-4 Audio tools as specified by the MPEG-2 NBC/MPEG-4
109dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   Audio standard. ISO/IEC gives users of the MPEG-2 NBC/MPEG-4 Audio
110dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   standards free license to this software module or modifications thereof
111dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   for use in hardware or software products claiming conformance to the
112dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   MPEG-2 NBC/MPEG-4 Audio  standards. Those intending to use this software
113dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   module in hardware or software products are advised that this use may
114dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   infringe existing patents. The original developer of this software
115dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   module and his/her company, the subsequent editors and their companies,
116dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   and ISO/IEC have no liability for use of this software module or
117dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   modifications thereof in an implementation. Copyright is not released
118dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   for non MPEG-2 NBC/MPEG-4 Audio conforming products.The original
119dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   developer retains full right to use the code for his/her own purpose,
120dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   assign or donate the code to a third party and to inhibit third party
121dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   from using the code for non MPEG-2 NBC/MPEG-4 Audio conforming products.
122dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   This copyright notice must be included in all copies or derivative
123dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   works."
124dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   Copyright(c)1996.
125dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
126dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
127dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------
128dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber PSEUDO-CODE
129dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
130dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    status          = SUCCESS;
131dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pInputStream   = &(pVars->inputStream);
132dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
133dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
134dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    CALL getbits(
135dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        neededBits = LEN_TAG,
136dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream = pInputStream )
137dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pInputStream )
138dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    RETURNING( tag = returnValue )
139dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
140dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    CALL getbits(
141dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        neededBits = LEN_PROFILE,
142dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream = pInputStream )
143dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pInputStream )
144dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    RETURNING( pScratchPCE->profile = returnValue )
145dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
146dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    CALL getbits(
147dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        neededBits = LEN_PROFILE,
148dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream = pInputStream )
149dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pInputStream )
150dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    RETURNING( pScratchPCE->sampling_rate_idx = returnValue )
151dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
152dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    CALL getbits(
153dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        neededBits = LEN_NUM_ELE,
154dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream = pInputStream )
155dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pInputStream )
156dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    RETURNING( temp = returnValue )
157dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
158dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pScratchPCE->front.num_ele = temp;
159dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
160dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    CALL getbits(
161dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        neededBits = LEN_NUM_ELE,
162dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream = pInputStream )
163dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pInputStream )
164dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    RETURNING( temp = returnValue )
165dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
166dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pScratchPCE->side.num_ele = temp;
167dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
168dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    CALL getbits(
169dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        neededBits = LEN_NUM_ELE,
170dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream = pInputStream )
171dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pInputStream )
172dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    RETURNING( temp = returnValue )
173dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
174dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pScratchPCE->back.num_ele = temp;
175dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
176dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    CALL getbits(
177dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        neededBits = LEN_NUM_LFE,
178dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream = pInputStream )
179dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pInputStream )
180dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    RETURNING( temp = returnValue )
181dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
182dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pScratchPCE->lfe.num_ele = temp;
183dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
184dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    CALL getbits(
185dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        neededBits = LEN_NUM_DAT,
186dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream = pInputStream )
187dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pInputStream )
188dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    RETURNING( temp = returnValue )
189dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
190dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pScratchPCE->data.num_ele = temp;
191dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
192dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    CALL getbits(
193dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        neededBits = LEN_NUM_CCE,
194dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream = pInputStream )
195dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pInputStream )
196dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    RETURNING( temp = returnValue )
197dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
198dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pScratchPCE->coupling.num_ele = temp;
199dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
200dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    CALL getbits(
201dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        neededBits = LEN_MIX_PRES,
202dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream = pInputStream )
203dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pInputStream )
204dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    RETURNING( flag = returnValue )
205dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
206dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pScratchPCE->mono_mix.present = flag;
207dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
208dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    IF (flag != FALSE)
209dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    THEN
210dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        CALL getbits(
211dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            neededBits = LEN_TAG,
212dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pInputStream = pInputStream )
213dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        MODIFYING( pInputStream )
214dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        RETURNING( temp = returnValue )
215dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
216dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pScratchPCE->mono_mix.ele_tag = temp;
217dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
218dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ENDIF
219dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
220dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    CALL getbits(
221dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        neededBits = LEN_MIX_PRES,
222dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream = pInputStream )
223dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pInputStream )
224dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    RETURNING( flag = returnValue )
225dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
226dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pScratchPCE->stereo_mix.present = flag;
227dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
228dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    IF (flag != FALSE)
229dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    THEN
230dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
231dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        CALL getbits(
232dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            neededBits = LEN_TAG,
233dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pInputStream = pInputStream )
234dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        MODIFYING( pInputStream )
235dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        RETURNING( temp = returnValue )
236dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
237dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pScratchPCE->stereo_mix.ele_tag = temp;
238dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
239dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ENDIF
240dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
241dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    CALL getbits(
242dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        neededBits = LEN_MIX_PRES,
243dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream = pInputStream )
244dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pInputStream )
245dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    RETURNING( flag = returnValue )
246dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
247dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    flag =
248dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        getbits(
249dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            LEN_MIX_PRES,
250dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pInputStream);
251dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
252dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pScratchPCE->matrix_mix.present = flag;
253dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
254dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    IF (flag != FALSE)
255dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    THEN
256dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        CALL getbits(
257dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            neededBits = LEN_MMIX_IDX,
258dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pInputStream = pInputStream )
259dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        MODIFYING( pInputStream )
260dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        RETURNING( temp = returnValue )
261dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
262dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pScratchPCE->matrix_mix.ele_tag = temp;
263dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
264dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        CALL getbits(
265dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            neededBits = LEN_PSUR_ENAB,
266dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pInputStream = pInputStream )
267dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        MODIFYING( pInputStream )
268dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        RETURNING( temp = returnValue )
269dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
270dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pScratchPCE->matrix_mix.pseudo_enab = temp;
271dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
272dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ENDIF
273dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
274dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
275dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    CALL get_ele_list(
276dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pElementList = &pScratchPCE->front,
277dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream = pInputStream,
278dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        enableCPE    = TRUE )
279dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pInputStream )
280dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pScratchPCE->front )
281dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    RETURNING( nothing )
282dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
283dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    CALL get_ele_list(
284dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pElementList = &pScratchPCE->side,
285dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream = pInputStream,
286dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        enableCPE    = TRUE )
287dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pInputStream )
288dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pScratchPCE->side )
289dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    RETURNING( nothing )
290dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
291dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    CALL get_ele_list(
292dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pElementList = &pScratchPCE->back,
293dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream = pInputStream,
294dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        enableCPE    = TRUE )
295dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pInputStream )
296dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pScratchPCE->back )
297dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    RETURNING( nothing )
298dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
299dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    CALL get_ele_list(
300dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pElementList = &pScratchPCE->lfe,
301dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream = pInputStream,
302dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        enableCPE    = FALSE )
303dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pInputStream )
304dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pScratchPCE->lfe )
305dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    RETURNING( nothing )
306dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
307dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    CALL get_ele_list(
308dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pElementList = &pScratchPCE->data,
309dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream = pInputStream,
310dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        enableCPE    = FALSE )
311dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pInputStream )
312dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pScratchPCE->data )
313dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    RETURNING( nothing )
314dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
315dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    CALL get_ele_list(
316dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pElementList = &pScratchPCE->coupling,
317dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream = pInputStream,
318dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        enableCPE    = TRUE )
319dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pInputStream )
320dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pScratchPCE->coupling )
321dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    RETURNING( nothing )
322dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
323dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
324dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    CALL byte_align(
325dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream = pInputStream )
326dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pInputStream )
327dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    RETURNING( nothing )
328dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
329dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    CALL getbits(
330dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        neededBits = LEN_COMMENT_BYTES,
331dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream = pInputStream )
332dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFYING( pInputStream )
333dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    RETURNING( numChars = returnValue )
334dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
335dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    FOR (i = numChars; i > 0; i--)
336dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
337dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        CALL getbits(
338dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            neededBits = LEN_COMMENT_BYTES,
339dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pInputStream = pInputStream )
340dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        MODIFYING( pInputStream )
341dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        RETURNING( nothing )
342dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
343dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ENDFOR
344dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
345dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    IF (pVars->current_program < 0)
346dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    THEN
347dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pVars->current_program = tag;
348dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ENDIF
349dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
350dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
351dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    IF (tag == pVars->current_program)
352dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    THEN
353dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
354dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        CALL pv_memcpy(
355dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            to = &pVars->prog_config,
356dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            from = pScratchPCE,
357dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            n = sizeof(ProgConfig))
358dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        MODIFYING( pVars->prog_config )
359dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        RETURNING( nothing )
360dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
361dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        CALL set_mc_info(
362dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pMC_Info = &pVars->mc_info,
363dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            objectType = pVars->prog_config.profile + 1,
364dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            samplin_rate_idx = pVars->prog_config.sampling_rate_idx,
365dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            tag = pVars->prog_config.front.ele_tag[0],
366dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            is_cpe = pVars->prog_config.front.ele_is_cpe[0],
367dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pWinSeqInfo = pVars->winmap,
368dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pSfbwidth128 = pVars->SFBWidth128)
369dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        MODIFYING( pVars->mc_info )
370dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        MODIFYING( pVars->winmap )
371dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        MODIFYING( pVars->SFBWidth128 )
372dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        RETURN( status = return_value )
373dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
374dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ENDIF
375dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
376dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFY( pVars->mc_info )
377dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFY( pVars->winmap )
378dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    MODIFY( pVars->SFBWidth128 )
379dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    RETURN (status)
380dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
381dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------
382dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber RESOURCES USED
383dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber   When the code is written for a specific target processor the
384dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     the resources used should be documented below.
385dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
386dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber STACK USAGE: [stack count for this module] + [variable to represent
387dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber          stack usage for each subroutine called]
388dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
389dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     where: [stack usage variable] = stack usage for [subroutine
390dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         name] (see [filename].ext)
391dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
392dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber DATA MEMORY USED: x words
393dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
394dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber PROGRAM MEMORY USED: x words
395dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
396dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber CLOCK CYCLES: [cycle count equation for this module] + [variable
397dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber           used to represent cycle count for each subroutine
398dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber           called]
399dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
400dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     where: [cycle count variable] = cycle count for [subroutine
401dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        name] (see [filename].ext)
402dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
403dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------
404dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber*/
405dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
406dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
407dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*----------------------------------------------------------------------------
408dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; INCLUDES
409dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/
410dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "pv_audio_type_defs.h"
411dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "s_bits.h"
412dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "s_elelist.h"
413dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "s_tdec_int_file.h"
414dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "s_tdec_int_chan.h"
415dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "e_progconfigconst.h"
416dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "ibstream.h"
417dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "get_ele_list.h"
418dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "aac_mem_funcs.h"
419dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "set_mc_info.h"
420dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "get_prog_config.h"
421dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
422dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*----------------------------------------------------------------------------
423dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; MACROS
424dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Define module specific macros here
425dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/
426dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
427dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*----------------------------------------------------------------------------
428dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; DEFINES
429dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Include all pre-processor statements here. Include conditional
430dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; compile variables also.
431dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/
432dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
433dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*----------------------------------------------------------------------------
434dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; LOCAL FUNCTION DEFINITIONS
435dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Function Prototype declaration
436dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/
437dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
438dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*----------------------------------------------------------------------------
439dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; LOCAL VARIABLE DEFINITIONS
440dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Variable declaration - defined here and used outside this module
441dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/
442dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
443dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*----------------------------------------------------------------------------
444dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; EXTERNAL FUNCTION REFERENCES
445dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Declare functions defined elsewhere and referenced in this module
446dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/
447dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
448dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*----------------------------------------------------------------------------
449dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; EXTERNAL VARIABLES REFERENCES
450dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Declare variables used in this module but defined elsewhere
451dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/
452dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
453dacaa73ae5010b66f4224d70a520945e5b653544Andreas HuberInt get_prog_config(
454dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    tDec_Int_File *pVars,
455dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    ProgConfig    *pScratchPCE)
456dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber{
457dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    Int    i;
458dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    UInt    tag;
459dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    Int    numChars;
460dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    UInt    temp;
461dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    Bool   flag;
462dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    Int    status          = SUCCESS;
463dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    BITS  *pInputStream   = &(pVars->inputStream);
464dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
465dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
466dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*
467dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * The tag is used at the very end to see if this PCE is
468dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * the one to be used. Otherwise it does not need to be saved for the
469dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * the simple configurations to be used in this version of an AAC
470dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * decoder.
471dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     *
472dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * All of the bits of this PCE must be read even if this PCE will not
473dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * be used. They are read into a temporary PCE, then later it is decided
474dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * whether to keep this PCE.
475dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     *
476dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * To allow quick removal of the fields from the ProgConfig structure
477dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * that will probably not be used at a later date,
478dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * while still advancing the bitstream pointer,the return value of
479dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * getbits is saved into a temporary variable, then transfered to
480dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * the structure item.
481dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     */
482dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    tag =
483dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        get9_n_lessbits(
484dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            LEN_TAG,
485dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pInputStream);
486dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
487dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pScratchPCE->profile =
488dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        get9_n_lessbits(
489dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            LEN_PROFILE,
490dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pInputStream);
491dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
492dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pScratchPCE->sampling_rate_idx =
493dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        get9_n_lessbits(
494dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            LEN_SAMP_IDX,
495dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pInputStream);
496dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
497dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    if (!pVars->adif_test && pScratchPCE->sampling_rate_idx != pVars->prog_config.sampling_rate_idx)
498dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
499dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /* rewind the pointer as implicit channel configuration maybe the case */
500dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream->usedBits -= (LEN_TAG + LEN_PROFILE + LEN_SAMP_IDX);
501dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
502dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return (1); /*  mismatch cannot happen */
503dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
504dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
505dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
506dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*
507dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * Retrieve the number of element lists for each of
508dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * front, side, back, lfe, data, and coupling.
509dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     *
510dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * For two-channel stereo or mono, only the data in the front needs
511dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * to be saved. However, ALL fields need to be skipped over in some
512dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * fashion. Also, the number of elements needs to be temporarily saved
513dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * to call get_ele_list(). If that function was changed to pass in
514dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * the number of points to be read, the memory set aside inside the
515dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * ProgConfig structure could be removed.
516dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     */
517dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
518dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*
519dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * The next six function calls could be combined into one, then use
520dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * shifts and masks to retrieve the individual fields.
521dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     */
522dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    temp =
523dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        get9_n_lessbits(
524dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            LEN_NUM_ELE,
525dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pInputStream);
526dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
527dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pScratchPCE->front.num_ele = temp;
528dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
529dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /* Needed only to read in the element list. */
530dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    temp =
531dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        get9_n_lessbits(
532dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            LEN_NUM_ELE,
533dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pInputStream);
534dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
535dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pScratchPCE->side.num_ele = temp;
536dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
537dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /* Needed only to read in the element list. */
538dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    temp =
539dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        get9_n_lessbits(
540dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            LEN_NUM_ELE,
541dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pInputStream);
542dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
543dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pScratchPCE->back.num_ele = temp;
544dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
545dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /* Needed only to read in the element list. */
546dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    temp =
547dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        get9_n_lessbits(
548dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            LEN_NUM_LFE,
549dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pInputStream);
550dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
551dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pScratchPCE->lfe.num_ele = temp;
552dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
553dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /* Needed only to read in the element list. */
554dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    temp =
555dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        get9_n_lessbits(
556dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            LEN_NUM_DAT,
557dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pInputStream);
558dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pScratchPCE->data.num_ele = temp;
559dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
560dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /* Needed only to read in the element list. */
561dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    temp =
562dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        get9_n_lessbits(
563dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            LEN_NUM_CCE,
564dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pInputStream);
565dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
566dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pScratchPCE->coupling.num_ele = temp;
567dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
568dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*
569dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * Read in mix down data.
570dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     *
571dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * Whether these fields can be removed and have proper operation
572dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * will be determined at a later date.
573dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     */
574dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
575dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /* Read presence of mono_mix */
576dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    flag =
577dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        get1bits(/*            LEN_MIX_PRES,*/
578dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pInputStream);
579dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
580dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pScratchPCE->mono_mix.present = flag;
581dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
582dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    if (flag != FALSE)
583dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
584dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        temp =
585dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            get9_n_lessbits(
586dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                LEN_TAG,
587dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                pInputStream);
588dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
589dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pScratchPCE->mono_mix.ele_tag = temp;
590dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
591dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    } /* end if (flag != FALSE) */
592dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
593dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /* Read presence of stereo mix */
594dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    flag =
595dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        get1bits(/*            LEN_MIX_PRES,*/
596dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pInputStream);
597dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
598dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pScratchPCE->stereo_mix.present = flag;
599dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
600dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    if (flag != FALSE)
601dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
602dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        temp =
603dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            get9_n_lessbits(
604dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                LEN_TAG,
605dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                pInputStream);
606dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
607dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pScratchPCE->stereo_mix.ele_tag = temp;
608dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
609dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    } /* end if (flag != FALSE) */
610dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
611dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /* Read presence of matrix mix */
612dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    flag =
613dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        get1bits(/*            LEN_MIX_PRES,*/
614dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pInputStream);
615dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
616dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pScratchPCE->matrix_mix.present = flag;
617dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
618dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    if (flag != FALSE)
619dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
620dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        temp =
621dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            get9_n_lessbits(
622dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                LEN_MMIX_IDX,
623dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                pInputStream);
624dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
625dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pScratchPCE->matrix_mix.ele_tag = temp;
626dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
627dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        temp =
628dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            get1bits(/*                LEN_PSUR_ENAB,*/
629dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                pInputStream);
630dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
631dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pScratchPCE->matrix_mix.pseudo_enab = temp;
632dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
633dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    } /* end if (flag != FALSE) */
634dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
635dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*
636dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * Get each of the element lists. Only the front information will be
637dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * used for the PV decoder, but the usedBits field of pInputStream must
638dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * be advanced appropriately.
639dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     *
640dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * This could be optimized by advancing the bit stream for the
641dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * elements that do not need to be read.
642dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     */
643dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    get_ele_list(
644dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        &pScratchPCE->front,
645dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream,
646dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        TRUE);
647dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
648dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    get_ele_list(
649dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        &pScratchPCE->side,
650dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream,
651dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        TRUE);
652dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
653dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    get_ele_list(
654dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        &pScratchPCE->back,
655dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream,
656dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        TRUE);
657dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
658dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    get_ele_list(
659dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        &pScratchPCE->lfe,
660dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream,
661dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        FALSE);
662dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
663dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    get_ele_list(
664dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        &pScratchPCE->data,
665dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream,
666dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        FALSE);
667dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
668dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    get_ele_list(
669dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        &pScratchPCE->coupling,
670dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pInputStream,
671dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        TRUE);
672dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
673dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*
674dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * The standard requests a byte alignment before reading in the
675dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * comment. This can be done because LEN_COMMENT_BYTES == 8.
676dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     */
677dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    byte_align(pInputStream);
678dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
679dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    numChars =
680dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        get9_n_lessbits(
681dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            LEN_COMMENT_BYTES, pInputStream);
682dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
683dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*
684dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * Ignore the comment - it requires 65 bytes to store (or worse on DSP).
685dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * If this field is restored, make sure to append a trailing '\0'
686dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     */
687dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    for (i = numChars; i > 0; i--)
688dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
689dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pScratchPCE->comments[i] = (Char) get9_n_lessbits(LEN_BYTE,
690dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   pInputStream);
691dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
692dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    } /* end for */
693dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
694dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    if (pVars->current_program < 0)
695dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
696dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
697dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * If this is the first PCE, it becomes the current, regardless of
698dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * its tag number.
699dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
700dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pVars->current_program = tag;
701dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
702dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    } /* end if (pVars->current_program < 0) */
703dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
704dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
705dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    if (tag == (UInt)pVars->current_program)
706dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
707dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
708dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * This branch is reached under two conditions:
709dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * 1) This is the first PCE found, it was selected in the above if
710dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         *    block. In all encoders found thus far, the tag value has been
711dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         *    zero.
712dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * 2) A PCE has been sent by the encoder with a tag that matches the
713dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         *    the first one sent. It will then be re-read. No encoder found
714dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         *    thus far re-sends a PCE, when looking at ADIF files.
715dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         *
716dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * Regardless, the temporary PCE will now be copied into the
717dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         * the one official program configuration.
718dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
719dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pv_memcpy(
720dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            &pVars->prog_config,
721dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pScratchPCE,
722dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            sizeof(ProgConfig));
723dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
724dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /* enter configuration into MC_Info structure */
725dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        status =
726dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            set_mc_info(
727dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                &pVars->mc_info,
728dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                (tMP4AudioObjectType)(pVars->prog_config.profile + 1),
729dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                pVars->prog_config.sampling_rate_idx,
730dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                pVars->prog_config.front.ele_tag[0],
731dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                pVars->prog_config.front.ele_is_cpe[0],
732dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                pVars->winmap,
733dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                pVars->SFBWidth128);
734dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
735dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    } /* end if (tag == pVars->current_program) */
736dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
737dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    return (status);
738dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber}
739dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
740