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