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: lt_decode.c 21f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 22f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 23f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber------------------------------------------------------------------------------ 24f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 25f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber REVISION HISTORY 26f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 27f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Description: Modified from original shareware code 28f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 29f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Description: Modified to pass variables by reference to eliminate use 30f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber of global variables. 31f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 32f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Description: First round of optimizations. 33f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 34f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Description: pInputStream is now the 2nd parameter to this function. 35f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 36f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Description: Changed to work with MT's new get_ics_info.c function, which 37f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber only calls lt_decode if LTP is enabled. This removes one grab from the 38f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber bitstream and one "if" from this code. Also, changed setting of weight. 39f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Now, rather than setting the actual weight, I only set the index into 40f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber a table in this function. 41f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 42f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Description: Replace some instances of getbits to get9_n_lessbits 43f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber when the number of bits read is 9 or less and get1bits 44f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber when only 1 bit is read. 45f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 46f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Who: Date: 47f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Description: 48f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber------------------------------------------------------------------------------ 49f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber INPUT AND OUTPUT DEFINITIONS 50f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 51f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Inputs: 52f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber win_type Type of window (SHORT or LONG) 53f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber [WINDOW_TYPE] 54f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 55f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber max_sfb Maximum number of active scalefactor bands 56f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber [Int] 57f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 58f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pLt_pred Pointer to structure containing information for 59f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber long-term prediction. 60f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber [LT_PRED_STATUS *] 61f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 62f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pInputStream Pointer to structure containing bitstream 63f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber information. 64f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber [BITS *] 65f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 66f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Local Stores/Buffers/Pointers Needed: 67f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber None 68f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 69f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Global Stores/Buffers/Pointers Needed: 70f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber None 71f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 72f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Outputs: 73f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber None 74f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 75f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Pointers and Buffers Modified: 76f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pLt_pred->weight_index - updated with index into weight table for LTP. 77f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 78f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Local Stores Modified: 79f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber None 80f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 81f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Global Stores Modified: 82f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber None 83f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 84f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber------------------------------------------------------------------------------ 85f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber FUNCTION DESCRIPTION 86f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 87f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber This function decodes the bitstream elements for long term prediction 88f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 89f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber------------------------------------------------------------------------------ 90f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber REQUIREMENTS 91f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 92f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 93f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber------------------------------------------------------------------------------ 94f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber REFERENCES 95f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 96f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber (1) MPEG-2 NBC Audio Decoder 97f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber "This software module was originally developed by Nokia 98f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber in the course of development of the MPEG-2 AAC/MPEG-4 Audio standard 99f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber ISO/IEC13818-7, 14496-1, 2 and 3. This software module is an implementation 100f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber of a part of one or more MPEG-2 AAC/MPEG-4 Audio tools as specified by the 101f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber MPEG-2 aac/MPEG-4 Audio standard. ISO/IEC gives users of the 102f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber MPEG-2aac/MPEG-4 Audio standards free license to this software module or 103f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber modifications thereof for use in hardware or software products claiming 104f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber conformance to the MPEG-2 aac/MPEG-4 Audio standards. Those intending to 105f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber use this software module in hardware or software products are advised that 106f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber this use may infringe existing patents. The original developer of this 107f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber software module, the subsequent editors and their companies, and ISO/IEC 108f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber have no liability for use of this software module or modifications thereof 109f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber in an implementation. Copyright is not released for non MPEG-2 aac/MPEG-4 110f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Audio conforming products. The original developer retains full right to use 111f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber the code for the developer's own purpose, assign or donate the code to a 112f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber third party and to inhibit third party from using the code for non 113f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber MPEG-2 aac/MPEG-4 Audio conforming products. This copyright notice 114f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber must be included in all copies or derivative works." 115f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Copyright (c)1997. 116f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 117f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber------------------------------------------------------------------------------ 118f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber PSEUDO-CODE 119f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 120f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pDelay[0] = (Int) getbits( 121f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber LEN_LTP_LAG, 122f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pInputStream); 123f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 124f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber temp_reg = (Int) getbits( 125f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber LEN_LTP_COEF, 126f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pInputStream); 127f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 128f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pLt_pred->weight = codebook[temp_reg]; 129f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 130f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber last_band = max_sfb; 131f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 132f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber IF (win_type != EIGHT_SHORT_SEQUENCE) 133f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 134f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber IF (last_band > MAX_LT_PRED_LONG_SFB) 135f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 136f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber last_band = MAX_LT_PRED_LONG_SFB; 137f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 138f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber ENDIF 139f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 140f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber FOR (m = last_band; m > 0; m--) 141f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 142f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber *(pSfbPredictionUsed++) = (Int) getbits( 143f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber LEN_LTP_LONG_USED, 144f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pInputStream); 145f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber ENDFOR 146f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 147f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber FOR (m = (max_sfb - last_band); m > 0; m--) 148f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 149f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber *(pSfbPredictionUsed++) = 0; 150f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 151f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber ENDFOR 152f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 153f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber ELSE 154f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 155f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber IF (last_band > MAX_LT_PRED_SHORT_SFB) 156f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 157f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber last_band = MAX_LT_PRED_SHORT_SFB; 158f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 159f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber ENDIF 160f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 161f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber prev_subblock = pDelay[0]; 162f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 163f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pWinPredictionUsed++; 164f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 165f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pTempPtr = &pSfbPredictionUsed[0]; 166f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 167f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber FOR (m = NUM_SHORT_WINDOWS; m > 0;) 168f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 169f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber m--; 170f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber temp_reg = (Int) getbits( 171f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber LEN_LTP_SHORT_USED, 172f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pInputStream); 173f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 174f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber *(pWinPredictionUsed++) = temp_reg; 175f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 176f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber IF (temp_reg != FALSE) 177f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber { 178f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber *(pDelay++) = prev_subblock; 179f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 180f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber FOR (k = last_band; k > 0; k--) 181f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber { 182f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber *(pTempPtr++) = 1; 183f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber } 184f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber break; 185f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber ELSE 186f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber { 187f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pDelay++; 188f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pTempPtr += last_band; 189f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber } 190f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 191f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber ENDFOR (m = NUM_SHORT_WINDOWS; m > 0;) 192f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 193f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber prev_subblock += LTP_LAG_OFFSET; 194f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 195f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber FOR (; m > 0; m--) 196f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 197f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber temp_reg = (Int) getbits ( 198f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber LEN_LTP_SHORT_USED, 199f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pInputStream); 200f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 201f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber *(pWinPredictionUsed++) = temp_reg; 202f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 203f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber IF (temp_reg != FALSE) 204f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 205f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber temp_reg = (Int) getbits( 206f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber LEN_LTP_SHORT_LAG_PRESENT, 207f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pInputStream); 208f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber IF (temp_reg != 0) 209f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 210f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber temp_reg = (Int) getbits( 211f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber LEN_LTP_SHORT_LAG, 212f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pInputStream); 213f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 214f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber *(pDelay++) = prev_subblock - temp_reg; 215f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 216f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber ELSE 217f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 218f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber *(pDelay++) = prev_subblock - LTP_LAG_OFFSET; 219f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 220f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber ENDIF 221f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 222f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber FOR (k = last_band; k > 0; k--) 223f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber *(pTempPtr++) = 1; 224f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber ENDFOR 225f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 226f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber ELSE 227f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 228f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pDelay++; 229f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pTempPtr += last_band; 230f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 231f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber ENDIF 232f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 233f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber ENDFOR (; m > 0; m--) 234f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 235f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber ENDIF (win_type != EIGHT_SHORT_SEQUENCE) 236f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 237f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber------------------------------------------------------------------------------ 238f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber RESOURCES USED 239f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber When the code is written for a specific target processor the 240f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber the resources used should be documented below. 241f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 242f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber STACK USAGE: [stack count for this module] + [variable to represent 243f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber stack usage for each subroutine called] 244f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 245f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber where: [stack usage variable] = stack usage for [subroutine 246f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber name] (see [filename].ext) 247f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 248f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber DATA MEMORY USED: x words 249f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 250f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber PROGRAM MEMORY USED: x words 251f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 252f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber CLOCK CYCLES: [cycle count equation for this module] + [variable 253f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber used to represent cycle count for each subroutine 254f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber called] 255f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 256f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber where: [cycle count variable] = cycle count for [subroutine 257f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber name] (see [filename].ext) 258f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 259f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber------------------------------------------------------------------------------ 260f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber*/ 261f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 262f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber/*---------------------------------------------------------------------------- 263f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber; INCLUDES 264f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber----------------------------------------------------------------------------*/ 265f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber#include "pv_audio_type_defs.h" 266f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber#include "lt_decode.h" 267f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber#include "ltp_common_internal.h" 268f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber#include "window_block_fxp.h" 269f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber#include "e_window_sequence.h" 270f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber#include "s_lt_pred_status.h" 271f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber#include "s_bits.h" 272f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber#include "ibstream.h" 273f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 274f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber/*---------------------------------------------------------------------------- 275f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber; MACROS 276f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber; Define module specific macros here 277f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber----------------------------------------------------------------------------*/ 278f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 279f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber/*---------------------------------------------------------------------------- 280f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber; DEFINES 281f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber; Include all pre-processor statements here. Include conditional 282f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber; compile variables also. 283f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber----------------------------------------------------------------------------*/ 284f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 285f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber/*---------------------------------------------------------------------------- 286f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber; LOCAL FUNCTION DEFINITIONS 287f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber; Function Prototype declaration 288f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber----------------------------------------------------------------------------*/ 289f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 290f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber/*---------------------------------------------------------------------------- 291f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS 292f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber; Variable declaration - defined here and used outside this module 293f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber----------------------------------------------------------------------------*/ 294f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 295f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber/*---------------------------------------------------------------------------- 296f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber; EXTERNAL FUNCTION REFERENCES 297f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber; Declare functions defined elsewhere and referenced in this module 298f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber----------------------------------------------------------------------------*/ 299f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 300f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber/*---------------------------------------------------------------------------- 301f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 302f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber; Declare variables used in this module but defined elsewhere 303f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber----------------------------------------------------------------------------*/ 304f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 305f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber/*---------------------------------------------------------------------------- 306f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber; FUNCTION CODE 307f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber----------------------------------------------------------------------------*/ 308f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Hubervoid lt_decode( 309f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber const WINDOW_SEQUENCE win_type, 310f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber BITS *pInputStream, 311f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber const Int max_sfb, 312f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber LT_PRED_STATUS *pLt_pred) 313f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber{ 314f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Int wnd_num; 315f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Int k; 316f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Int last_band; 317f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Int prev_subblock; 318f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Int prev_subblock_nonzero; 319f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Int temp_reg; 320f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 321f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Bool *pWinPredictionUsed = pLt_pred->win_prediction_used; 322f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Bool *pSfbPredictionUsed = pLt_pred->sfb_prediction_used; 323f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Int *pTempPtr; 324f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Int *pDelay = pLt_pred->delay; 325f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 326f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pDelay[0] = (Int) get17_n_lessbits( 327f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber LEN_LTP_LAG, /* 11 bits */ 328f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pInputStream); 329f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 330f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pLt_pred->weight_index = (Int) get9_n_lessbits( 331f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber LEN_LTP_COEF, /* 3 bits */ 332f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pInputStream); 333f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 334f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber last_band = max_sfb; 335f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 336f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber if (win_type != EIGHT_SHORT_SEQUENCE) 337f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber { 338f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 339f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber /* last_band = min(MAX_LT_PRED_LONG_SFB, max_sfb) MAX_SCFAC_BANDS */ 340f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber if (last_band > MAX_LT_PRED_LONG_SFB) 341f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber { 342f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber last_band = MAX_LT_PRED_LONG_SFB; 343f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber } 344f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 345f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber for (k = last_band; k > 0; k--) 346f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber { 347f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber *(pSfbPredictionUsed++) = (Int) get1bits(pInputStream); 348f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber } 349f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 350f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber /* 351f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * This is not a call to memset, because 352f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * (max_sfb - last_band) should typically be a small value. 353f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber */ 354f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber for (k = (max_sfb - last_band); k > 0; k--) 355f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber { 356f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber *(pSfbPredictionUsed++) = FALSE; 357f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber } 358f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber } 359f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber else /* (win_type == EIGHT_SHORT_SEQUENCE) */ 360f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber { 361f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber /* last_band = min(MAX_LT_PRED_SHORT_SFB, max_sfb) */ 362f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 363f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber if (last_band > MAX_LT_PRED_SHORT_SFB) 364f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber { 365f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber last_band = MAX_LT_PRED_SHORT_SFB; 366f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber } 367f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 368f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber /* 369f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * The following two coding constructs are equivalent... 370f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * 371f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * first_time == 1 372f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * for (wnd_num=NUM_SHORT_WINDOWS; wnd_num > 0; wnd_num--) 373f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * { 374f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * if (condition) 375f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * { 376f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * if (first_time == 1) 377f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * { 378f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * CODE SECTION A 379f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * first_time = 0; 380f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * } 381f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * else 382f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * { 383f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * CODE SECTION B 384f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * } 385f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * } 386f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * } 387f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * 388f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * -----------------------------------EQUIVALENT TO------------ 389f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * 390f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * wnd_num=NUM_SHORT_WINDOWS; 391f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * 392f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * do 393f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * { 394f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * wnd_num--; 395f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * if (condition) 396f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * { 397f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * CODE SECTION A 398f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * break; 399f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * } 400f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * } while( wnd_num > 0) 401f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * 402f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * while (wnd_num > 0) 403f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * { 404f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * if (condition) 405f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * { 406f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * CODE SECTION B 407f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * } 408f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * wnd_num--; 409f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * } 410f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * 411f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber */ 412f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 413f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber prev_subblock = pDelay[0]; 414f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 415f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pTempPtr = &pSfbPredictionUsed[0]; 416f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 417f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber wnd_num = NUM_SHORT_WINDOWS; 418f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 419f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber prev_subblock_nonzero = prev_subblock; 420f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber prev_subblock += LTP_LAG_OFFSET; 421f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 422f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber do 423f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber { 424f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber /* 425f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * Place decrement of wnd_num here, to insure 426f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * that the decrement occurs before the 427f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * break out of the do-while loop. 428f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber */ 429f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber wnd_num--; 430f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 431f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber temp_reg = (Int) get1bits(pInputStream); 432f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 433f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber *(pWinPredictionUsed++) = temp_reg; 434f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 435f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber if (temp_reg != FALSE) 436f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber { 437f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber *(pDelay++) = prev_subblock_nonzero; 438f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 439f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber for (k = last_band; k > 0; k--) 440f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber { 441f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber *(pTempPtr++) = TRUE; 442f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber } 443f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber for (k = (max_sfb - last_band); k > 0; k--) 444f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber { 445f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber *(pTempPtr++) = FALSE; 446f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber } 447f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber break; 448f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 449f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber } /* if(pWinPredictionUsed) */ 450f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber else 451f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber { 452f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pDelay++; 453f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pTempPtr += max_sfb; 454f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber } 455f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 456f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber } 457f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber while (wnd_num > 0); 458f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 459f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber /* 460f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * This while loop picks up where the previous one left off. 461f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * Notice that the code functions differently inside the loop 462f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber */ 463f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 464f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber while (wnd_num > 0) 465f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber { 466f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber temp_reg = (Int) get1bits(pInputStream); 467f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 468f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber *(pWinPredictionUsed++) = temp_reg; 469f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 470f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber if (temp_reg != FALSE) 471f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber { 472f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber temp_reg = (Int) get1bits(pInputStream); 473f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber if (temp_reg != 0) 474f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber { 475f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber temp_reg = (Int) get9_n_lessbits( 476f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber LEN_LTP_SHORT_LAG, 477f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pInputStream); 478f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 479f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber *(pDelay++) = prev_subblock - temp_reg; 480f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber } 481f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber else 482f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber { 483f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber *(pDelay++) = prev_subblock_nonzero; 484f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber } 485f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber for (k = last_band; k > 0; k--) 486f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber { 487f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber *(pTempPtr++) = TRUE; 488f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber } 489f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber for (k = (max_sfb - last_band); k > 0; k--) 490f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber { 491f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber *(pTempPtr++) = FALSE; 492f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber } 493f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 494f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber } /* if (temp_reg) */ 495f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber else 496f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber { 497f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pDelay++; 498f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber pTempPtr += max_sfb; 499f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber } 500f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 501f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber wnd_num--; 502f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 503f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber } /* while(wnd_num) */ 504f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 505f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber } /* else (win_type == EIGHT_SHORT_SEQUENCE) */ 506f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 507f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber} /* lt_decode */ 508