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