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