Initialize Tizen 2.3
[external/opencore-amr.git] / opencore / codecs_v2 / audio / gsm_amr / amr_nb / dec / src / d2_11pf.cpp
1 /* ------------------------------------------------------------------
2  * Copyright (C) 1998-2009 PacketVideo
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13  * express or implied.
14  * See the License for the specific language governing permissions
15  * and limitations under the License.
16  * -------------------------------------------------------------------
17  */
18 /****************************************************************************************
19 Portions of this file are derived from the following 3GPP standard:
20
21     3GPP TS 26.073
22     ANSI-C code for the Adaptive Multi-Rate (AMR) speech codec
23     Available from http://www.3gpp.org
24
25 (C) 2004, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC)
26 Permission to distribute, modify and use this file under the standard license
27 terms listed above has been obtained from the copyright holder.
28 ****************************************************************************************/
29 /*
30 ------------------------------------------------------------------------------
31
32
33
34  Filename: d2_11pf.cpp
35
36 ------------------------------------------------------------------------------
37  MODULE DESCRIPTION
38 */
39
40 /*----------------------------------------------------------------------------
41 ; INCLUDES
42 ----------------------------------------------------------------------------*/
43 #include "d2_11pf.h"
44 #include "typedef.h"
45 #include "cnst.h"
46
47
48 /*----------------------------------------------------------------------------
49 ; MACROS
50 ; Define module specific macros here
51 ----------------------------------------------------------------------------*/
52
53 /*----------------------------------------------------------------------------
54 ; DEFINES
55 ; Include all pre-processor statements here. Include conditional
56 ; compile variables also.
57 ----------------------------------------------------------------------------*/
58 #define NB_PULSE  2
59
60
61 /*----------------------------------------------------------------------------
62 ; LOCAL FUNCTION DEFINITIONS
63 ; Function Prototype declaration
64 ----------------------------------------------------------------------------*/
65
66 /*----------------------------------------------------------------------------
67 ; LOCAL VARIABLE DEFINITIONS
68 ; Variable declaration - defined here and used outside this module
69 ----------------------------------------------------------------------------*/
70
71 /*
72 ------------------------------------------------------------------------------
73  FUNCTION NAME: decode_2i40_11bits
74 ------------------------------------------------------------------------------
75  INPUT AND OUTPUT DEFINITIONS
76
77  Inputs:
78     sign  -- Word16 -- signs of 2 pulses.
79     index -- Word16 -- Positions of the 2 pulses.
80
81  Outputs:
82     cod[] -- array of type Word16 -- algebraic (fixed) codebook excitation
83
84  Returns:
85     None
86
87  Global Variables Used:
88     None
89
90  Local Variables Needed:
91     None
92
93 ------------------------------------------------------------------------------
94  FUNCTION DESCRIPTION
95
96
97 ------------------------------------------------------------------------------
98  REQUIREMENTS
99
100  None
101
102 ------------------------------------------------------------------------------
103  REFERENCES
104
105  d2_11pf.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001
106
107 ------------------------------------------------------------------------------
108  PSEUDO-CODE
109
110
111 ------------------------------------------------------------------------------
112  CAUTION [optional]
113  [State any special notes, constraints or cautions for users of this function]
114
115 ------------------------------------------------------------------------------
116 */
117
118 void decode_2i40_11bits(
119     Word16 sign,   /* i : signs of 2 pulses.                       */
120     Word16 index,  /* i : Positions of the 2 pulses.               */
121     Word16 cod[]   /* o : algebraic (fixed) codebook excitation    */
122 )
123
124 {
125     Word16 i;
126     Word16 j;
127
128     Word16 pos[NB_PULSE];
129
130     /* Decode the positions */
131
132     j = index & 0x1;
133
134     index >>= 1;
135
136     i = index & 0x7;
137
138     pos[0] = i * 5 + j * 2 + 1;
139
140
141
142
143     index >>= 3;
144
145     j = index & 0x3;
146
147     index >>= 2;
148
149     i = index & 0x7;
150
151     if (j == 3)
152     {
153         pos[1] = i * 5 + 4;
154     }
155     else
156     {
157         pos[1] = i * 5 + j;
158     }
159
160
161
162
163     /* decode the signs  and build the codeword */
164     for (i = 0; i < L_SUBFR; i++)
165     {
166         cod[i] = 0;
167     }
168
169     for (j = 0; j < NB_PULSE; j++)
170     {
171         i = sign & 1;
172
173         /* This line is equivalent to...
174          *
175          *
176          *  if (i == 1)
177          *  {
178          *      cod[pos[j]] = 8191;
179          *  }
180          *  if (i == 0)
181          *  {
182          *      cod[pos[j]] = -8192;
183          *  }
184          */
185
186         cod[pos[j]] = i * 16383 - 8192;
187
188         sign >>= 1;
189     }
190
191     return;
192 }