1 /******************************************************************************
2 * *
3 * Copyright (C) 2018 The Android Open Source Project
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at:
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 *****************************************************************************
18 * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19 */
20 #include <math.h>
21 #include <string.h>
22 #include "ixheaacd_type_def.h"
23 #include "ixheaacd_constants.h"
24 #include "ixheaacd_basic_ops32.h"
25 #include "ixheaacd_basic_ops16.h"
26 #include "ixheaacd_basic_ops40.h"
27 #include "ixheaacd_bitbuffer.h"
28 #include "ixheaacd_interface.h"
29
30 #include "ixheaacd_tns_usac.h"
31 #include "ixheaacd_cnst.h"
32
33 #include "ixheaacd_acelp_info.h"
34
35 #include "ixheaacd_sbrdecsettings.h"
36 #include "ixheaacd_info.h"
37 #include "ixheaacd_sbr_common.h"
38 #include "ixheaacd_drc_data_struct.h"
39 #include "ixheaacd_drc_dec.h"
40 #include "ixheaacd_sbrdecoder.h"
41 #include "ixheaacd_mps_polyphase.h"
42 #include "ixheaacd_sbr_const.h"
43 #include "ixheaacd_main.h"
44 #include "ixheaacd_arith_dec.h"
45
46 #include "ixheaacd_bit_extract.h"
47
48 #include "ixheaacd_error_codes.h"
49
50 #define ARITH_ESCAPE 16
51
52 static const UWORD16 ixheaacd_ari_cf_r[3][4] = {
53 {12571, 10569, 3696, 0}, {12661, 5700, 3751, 0}, {10827, 6884, 2929, 0}};
54
55 static const UWORD16 ixheaacd_ari_lookup_m[742] = {
56 0x01, 0x34, 0x0D, 0x13, 0x12, 0x25, 0x00, 0x3A, 0x05, 0x00, 0x21, 0x13,
57 0x1F, 0x1A, 0x1D, 0x36, 0x24, 0x2B, 0x1B, 0x33, 0x37, 0x29, 0x1D, 0x33,
58 0x37, 0x33, 0x37, 0x33, 0x37, 0x33, 0x2C, 0x00, 0x21, 0x13, 0x25, 0x2A,
59 0x00, 0x21, 0x24, 0x12, 0x2C, 0x1E, 0x37, 0x24, 0x1F, 0x35, 0x37, 0x24,
60 0x35, 0x37, 0x35, 0x37, 0x38, 0x2D, 0x21, 0x29, 0x1E, 0x21, 0x13, 0x2D,
61 0x36, 0x38, 0x29, 0x36, 0x37, 0x24, 0x36, 0x38, 0x37, 0x38, 0x00, 0x20,
62 0x23, 0x20, 0x23, 0x36, 0x38, 0x24, 0x3B, 0x24, 0x26, 0x29, 0x1F, 0x30,
63 0x2D, 0x0D, 0x12, 0x3F, 0x2D, 0x21, 0x1C, 0x2A, 0x00, 0x21, 0x12, 0x1E,
64 0x36, 0x38, 0x36, 0x37, 0x3F, 0x1E, 0x0D, 0x1F, 0x2A, 0x1E, 0x21, 0x24,
65 0x12, 0x2A, 0x3C, 0x21, 0x24, 0x1F, 0x3C, 0x21, 0x29, 0x36, 0x38, 0x36,
66 0x37, 0x38, 0x21, 0x1E, 0x00, 0x3B, 0x25, 0x1E, 0x20, 0x10, 0x1F, 0x3C,
67 0x20, 0x23, 0x29, 0x08, 0x23, 0x12, 0x08, 0x23, 0x21, 0x38, 0x00, 0x20,
68 0x13, 0x20, 0x3B, 0x1C, 0x20, 0x3B, 0x29, 0x20, 0x23, 0x24, 0x21, 0x24,
69 0x21, 0x24, 0x3B, 0x13, 0x23, 0x26, 0x23, 0x13, 0x21, 0x24, 0x26, 0x29,
70 0x12, 0x22, 0x2B, 0x02, 0x1E, 0x0D, 0x1F, 0x2D, 0x00, 0x0D, 0x12, 0x00,
71 0x3C, 0x21, 0x29, 0x3C, 0x21, 0x2A, 0x3C, 0x3B, 0x22, 0x1E, 0x20, 0x10,
72 0x1F, 0x3C, 0x0D, 0x29, 0x3C, 0x21, 0x24, 0x08, 0x23, 0x20, 0x38, 0x39,
73 0x3C, 0x20, 0x13, 0x3C, 0x00, 0x0D, 0x13, 0x1F, 0x3C, 0x09, 0x26, 0x1F,
74 0x08, 0x09, 0x26, 0x12, 0x08, 0x23, 0x29, 0x20, 0x23, 0x21, 0x24, 0x20,
75 0x13, 0x20, 0x3B, 0x16, 0x20, 0x3B, 0x29, 0x20, 0x3B, 0x29, 0x20, 0x3B,
76 0x13, 0x21, 0x24, 0x29, 0x0B, 0x13, 0x09, 0x3B, 0x13, 0x09, 0x3B, 0x13,
77 0x21, 0x3B, 0x13, 0x0D, 0x26, 0x29, 0x26, 0x29, 0x3D, 0x12, 0x22, 0x28,
78 0x2E, 0x04, 0x08, 0x13, 0x3C, 0x3B, 0x3C, 0x20, 0x10, 0x3C, 0x21, 0x07,
79 0x08, 0x10, 0x00, 0x08, 0x0D, 0x29, 0x08, 0x0D, 0x29, 0x08, 0x09, 0x13,
80 0x20, 0x23, 0x39, 0x08, 0x09, 0x13, 0x08, 0x09, 0x16, 0x08, 0x09, 0x10,
81 0x12, 0x20, 0x3B, 0x3D, 0x09, 0x26, 0x20, 0x3B, 0x24, 0x39, 0x09, 0x26,
82 0x20, 0x0D, 0x13, 0x00, 0x09, 0x13, 0x20, 0x0D, 0x26, 0x12, 0x20, 0x3B,
83 0x13, 0x21, 0x26, 0x0B, 0x12, 0x09, 0x3B, 0x16, 0x09, 0x3B, 0x3D, 0x09,
84 0x26, 0x0D, 0x13, 0x26, 0x3D, 0x1C, 0x12, 0x1F, 0x28, 0x2E, 0x07, 0x0B,
85 0x08, 0x09, 0x00, 0x39, 0x0B, 0x08, 0x26, 0x08, 0x09, 0x13, 0x20, 0x0B,
86 0x39, 0x10, 0x39, 0x0D, 0x13, 0x20, 0x10, 0x12, 0x09, 0x13, 0x20, 0x3B,
87 0x13, 0x09, 0x26, 0x0B, 0x09, 0x3B, 0x1C, 0x09, 0x3B, 0x13, 0x20, 0x3B,
88 0x13, 0x09, 0x26, 0x0B, 0x16, 0x0D, 0x13, 0x09, 0x13, 0x09, 0x13, 0x26,
89 0x3D, 0x1C, 0x1F, 0x28, 0x2E, 0x07, 0x10, 0x39, 0x0B, 0x39, 0x39, 0x13,
90 0x39, 0x0B, 0x39, 0x0B, 0x39, 0x26, 0x39, 0x10, 0x20, 0x3B, 0x16, 0x20,
91 0x10, 0x09, 0x26, 0x0B, 0x13, 0x09, 0x13, 0x26, 0x1C, 0x0B, 0x3D, 0x1C,
92 0x1F, 0x28, 0x2B, 0x07, 0x0C, 0x39, 0x0B, 0x39, 0x0B, 0x0C, 0x0B, 0x26,
93 0x0B, 0x26, 0x3D, 0x0D, 0x1C, 0x14, 0x28, 0x2B, 0x39, 0x0B, 0x0C, 0x0E,
94 0x3D, 0x1C, 0x0D, 0x12, 0x22, 0x2B, 0x07, 0x0C, 0x0E, 0x3D, 0x1C, 0x10,
95 0x1F, 0x2B, 0x0C, 0x0E, 0x19, 0x14, 0x10, 0x1F, 0x28, 0x0C, 0x0E, 0x19,
96 0x14, 0x26, 0x22, 0x2B, 0x0C, 0x0E, 0x19, 0x14, 0x26, 0x28, 0x0E, 0x19,
97 0x14, 0x26, 0x28, 0x0E, 0x19, 0x14, 0x28, 0x0E, 0x19, 0x14, 0x22, 0x28,
98 0x2B, 0x0E, 0x14, 0x2B, 0x31, 0x00, 0x3A, 0x3A, 0x05, 0x05, 0x1B, 0x1D,
99 0x33, 0x06, 0x35, 0x35, 0x20, 0x21, 0x37, 0x21, 0x24, 0x05, 0x1B, 0x2C,
100 0x2C, 0x2C, 0x06, 0x34, 0x1E, 0x34, 0x00, 0x08, 0x36, 0x09, 0x21, 0x26,
101 0x1C, 0x2C, 0x00, 0x02, 0x02, 0x02, 0x3F, 0x04, 0x04, 0x04, 0x34, 0x39,
102 0x20, 0x0A, 0x0C, 0x39, 0x0B, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x34, 0x39,
103 0x39, 0x0A, 0x0C, 0x39, 0x0C, 0x0F, 0x07, 0x07, 0x07, 0x00, 0x39, 0x39,
104 0x0C, 0x0F, 0x07, 0x07, 0x39, 0x0C, 0x0F, 0x07, 0x39, 0x0C, 0x0F, 0x39,
105 0x39, 0x0C, 0x0F, 0x39, 0x0C, 0x39, 0x0C, 0x0F, 0x00, 0x11, 0x27, 0x17,
106 0x2F, 0x27, 0x00, 0x27, 0x17, 0x00, 0x11, 0x17, 0x00, 0x11, 0x17, 0x11,
107 0x00, 0x27, 0x15, 0x11, 0x17, 0x01, 0x15, 0x11, 0x15, 0x11, 0x15, 0x15,
108 0x17, 0x00, 0x27, 0x01, 0x27, 0x27, 0x15, 0x00, 0x27, 0x11, 0x27, 0x15,
109 0x15, 0x15, 0x27, 0x15, 0x15, 0x15, 0x15, 0x17, 0x2F, 0x11, 0x17, 0x27,
110 0x27, 0x27, 0x11, 0x27, 0x15, 0x27, 0x27, 0x15, 0x15, 0x27, 0x17, 0x2F,
111 0x27, 0x17, 0x2F, 0x27, 0x17, 0x2F, 0x27, 0x17, 0x2F, 0x27, 0x17, 0x2F,
112 0x27, 0x17, 0x2F, 0x27, 0x17, 0x2F, 0x27, 0x17, 0x2F, 0x27, 0x17, 0x2F,
113 0x27, 0x17, 0x2F, 0x27, 0x17, 0x2F, 0x27, 0x17, 0x2F, 0x27, 0x17, 0x2F,
114 0x17, 0x2F, 0x2B, 0x00, 0x27, 0x00, 0x00, 0x11, 0x15, 0x00, 0x11, 0x11,
115 0x27, 0x27, 0x15, 0x17, 0x15, 0x17, 0x15, 0x17, 0x27, 0x17, 0x27, 0x17,
116 0x27, 0x17, 0x27, 0x17, 0x27, 0x17, 0x27, 0x17, 0x27, 0x17, 0x27, 0x17,
117 0x27, 0x17, 0x27, 0x17, 0x27, 0x15, 0x27, 0x27, 0x15, 0x27};
118
119 static const UWORD32 ixheaacd_ari_hash_m[742] = {
120 0x00000104UL >> 8, 0x0000030AUL >> 8, 0x00000510UL >> 8, 0x00000716UL >> 8,
121 0x00000A1FUL >> 8, 0x00000F2EUL >> 8, 0x00011100UL >> 8, 0x00111103UL >> 8,
122 0x00111306UL >> 8, 0x00111436UL >> 8, 0x00111623UL >> 8, 0x00111929UL >> 8,
123 0x00111F2EUL >> 8, 0x0011221BUL >> 8, 0x00112435UL >> 8, 0x00112621UL >> 8,
124 0x00112D12UL >> 8, 0x00113130UL >> 8, 0x0011331DUL >> 8, 0x00113535UL >> 8,
125 0x00113938UL >> 8, 0x0011411BUL >> 8, 0x00114433UL >> 8, 0x00114635UL >> 8,
126 0x00114F29UL >> 8, 0x00116635UL >> 8, 0x00116F24UL >> 8, 0x00117433UL >> 8,
127 0x0011FF0FUL >> 8, 0x00121102UL >> 8, 0x0012132DUL >> 8, 0x00121436UL >> 8,
128 0x00121623UL >> 8, 0x00121912UL >> 8, 0x0012213FUL >> 8, 0x0012232DUL >> 8,
129 0x00122436UL >> 8, 0x00122638UL >> 8, 0x00122A29UL >> 8, 0x00122F2BUL >> 8,
130 0x0012322DUL >> 8, 0x00123436UL >> 8, 0x00123738UL >> 8, 0x00123B29UL >> 8,
131 0x0012411DUL >> 8, 0x00124536UL >> 8, 0x00124938UL >> 8, 0x00124F12UL >> 8,
132 0x00125535UL >> 8, 0x00125F29UL >> 8, 0x00126535UL >> 8, 0x0012B837UL >> 8,
133 0x0013112AUL >> 8, 0x0013131EUL >> 8, 0x0013163BUL >> 8, 0x0013212DUL >> 8,
134 0x0013233CUL >> 8, 0x00132623UL >> 8, 0x00132F2EUL >> 8, 0x0013321EUL >> 8,
135 0x00133521UL >> 8, 0x00133824UL >> 8, 0x0013411EUL >> 8, 0x00134336UL >> 8,
136 0x00134838UL >> 8, 0x00135135UL >> 8, 0x00135537UL >> 8, 0x00135F12UL >> 8,
137 0x00137637UL >> 8, 0x0013FF29UL >> 8, 0x00140024UL >> 8, 0x00142321UL >> 8,
138 0x00143136UL >> 8, 0x00143321UL >> 8, 0x00143F25UL >> 8, 0x00144321UL >> 8,
139 0x00148638UL >> 8, 0x0014FF29UL >> 8, 0x00154323UL >> 8, 0x0015FF12UL >> 8,
140 0x0016F20CUL >> 8, 0x0018A529UL >> 8, 0x00210031UL >> 8, 0x0021122CUL >> 8,
141 0x00211408UL >> 8, 0x00211713UL >> 8, 0x00211F2EUL >> 8, 0x0021222AUL >> 8,
142 0x00212408UL >> 8, 0x00212710UL >> 8, 0x00212F2EUL >> 8, 0x0021331EUL >> 8,
143 0x00213436UL >> 8, 0x00213824UL >> 8, 0x0021412DUL >> 8, 0x0021431EUL >> 8,
144 0x00214536UL >> 8, 0x00214F1FUL >> 8, 0x00216637UL >> 8, 0x00220004UL >> 8,
145 0x0022122AUL >> 8, 0x00221420UL >> 8, 0x00221829UL >> 8, 0x00221F2EUL >> 8,
146 0x0022222DUL >> 8, 0x00222408UL >> 8, 0x00222623UL >> 8, 0x00222929UL >> 8,
147 0x00222F2BUL >> 8, 0x0022321EUL >> 8, 0x00223408UL >> 8, 0x00223724UL >> 8,
148 0x00223A29UL >> 8, 0x0022411EUL >> 8, 0x00224436UL >> 8, 0x00224823UL >> 8,
149 0x00225134UL >> 8, 0x00225621UL >> 8, 0x00225F12UL >> 8, 0x00226336UL >> 8,
150 0x00227637UL >> 8, 0x0022FF29UL >> 8, 0x0023112DUL >> 8, 0x0023133CUL >> 8,
151 0x00231420UL >> 8, 0x00231916UL >> 8, 0x0023212DUL >> 8, 0x0023233CUL >> 8,
152 0x00232509UL >> 8, 0x00232929UL >> 8, 0x0023312DUL >> 8, 0x00233308UL >> 8,
153 0x00233509UL >> 8, 0x00233724UL >> 8, 0x0023413CUL >> 8, 0x00234421UL >> 8,
154 0x00234A13UL >> 8, 0x0023513CUL >> 8, 0x00235421UL >> 8, 0x00235F1FUL >> 8,
155 0x00236421UL >> 8, 0x0023FF29UL >> 8, 0x00240024UL >> 8, 0x0024153BUL >> 8,
156 0x00242108UL >> 8, 0x00242409UL >> 8, 0x00242726UL >> 8, 0x00243108UL >> 8,
157 0x00243409UL >> 8, 0x00243610UL >> 8, 0x00244136UL >> 8, 0x00244321UL >> 8,
158 0x00244523UL >> 8, 0x00244F1FUL >> 8, 0x00245423UL >> 8, 0x0024610AUL >> 8,
159 0x00246423UL >> 8, 0x0024FF29UL >> 8, 0x00252510UL >> 8, 0x00253121UL >> 8,
160 0x0025343BUL >> 8, 0x00254121UL >> 8, 0x00254510UL >> 8, 0x00254F25UL >> 8,
161 0x00255221UL >> 8, 0x0025FF12UL >> 8, 0x00266513UL >> 8, 0x0027F529UL >> 8,
162 0x0029F101UL >> 8, 0x002CF224UL >> 8, 0x00310030UL >> 8, 0x0031122AUL >> 8,
163 0x00311420UL >> 8, 0x00311816UL >> 8, 0x0031212CUL >> 8, 0x0031231EUL >> 8,
164 0x00312408UL >> 8, 0x00312710UL >> 8, 0x0031312AUL >> 8, 0x0031321EUL >> 8,
165 0x00313408UL >> 8, 0x00313623UL >> 8, 0x0031411EUL >> 8, 0x0031433CUL >> 8,
166 0x00320007UL >> 8, 0x0032122DUL >> 8, 0x00321420UL >> 8, 0x00321816UL >> 8,
167 0x0032212DUL >> 8, 0x0032233CUL >> 8, 0x00322509UL >> 8, 0x00322916UL >> 8,
168 0x0032312DUL >> 8, 0x00323420UL >> 8, 0x00323710UL >> 8, 0x00323F2BUL >> 8,
169 0x00324308UL >> 8, 0x00324623UL >> 8, 0x00324F25UL >> 8, 0x00325421UL >> 8,
170 0x00325F1FUL >> 8, 0x00326421UL >> 8, 0x0032FF29UL >> 8, 0x00331107UL >> 8,
171 0x00331308UL >> 8, 0x0033150DUL >> 8, 0x0033211EUL >> 8, 0x00332308UL >> 8,
172 0x00332420UL >> 8, 0x00332610UL >> 8, 0x00332929UL >> 8, 0x0033311EUL >> 8,
173 0x00333308UL >> 8, 0x0033363BUL >> 8, 0x00333A29UL >> 8, 0x0033413CUL >> 8,
174 0x00334320UL >> 8, 0x0033463BUL >> 8, 0x00334A29UL >> 8, 0x0033510AUL >> 8,
175 0x00335320UL >> 8, 0x00335824UL >> 8, 0x0033610AUL >> 8, 0x00336321UL >> 8,
176 0x00336F12UL >> 8, 0x00337623UL >> 8, 0x00341139UL >> 8, 0x0034153BUL >> 8,
177 0x00342108UL >> 8, 0x00342409UL >> 8, 0x00342610UL >> 8, 0x00343108UL >> 8,
178 0x00343409UL >> 8, 0x00343610UL >> 8, 0x00344108UL >> 8, 0x0034440DUL >> 8,
179 0x00344610UL >> 8, 0x0034510AUL >> 8, 0x00345309UL >> 8, 0x0034553BUL >> 8,
180 0x0034610AUL >> 8, 0x00346309UL >> 8, 0x0034F824UL >> 8, 0x00350029UL >> 8,
181 0x00352510UL >> 8, 0x00353120UL >> 8, 0x0035330DUL >> 8, 0x00353510UL >> 8,
182 0x00354120UL >> 8, 0x0035430DUL >> 8, 0x00354510UL >> 8, 0x00354F28UL >> 8,
183 0x0035530DUL >> 8, 0x00355510UL >> 8, 0x00355F1FUL >> 8, 0x00356410UL >> 8,
184 0x00359626UL >> 8, 0x0035FF12UL >> 8, 0x00366426UL >> 8, 0x0036FF12UL >> 8,
185 0x0037F426UL >> 8, 0x0039D712UL >> 8, 0x003BF612UL >> 8, 0x003DF81FUL >> 8,
186 0x00410004UL >> 8, 0x00411207UL >> 8, 0x0041150DUL >> 8, 0x0041212AUL >> 8,
187 0x00412420UL >> 8, 0x0041311EUL >> 8, 0x00413308UL >> 8, 0x00413509UL >> 8,
188 0x00413F2BUL >> 8, 0x00414208UL >> 8, 0x00420007UL >> 8, 0x0042123CUL >> 8,
189 0x00421409UL >> 8, 0x00422107UL >> 8, 0x0042223CUL >> 8, 0x00422409UL >> 8,
190 0x00422610UL >> 8, 0x0042313CUL >> 8, 0x00423409UL >> 8, 0x0042363BUL >> 8,
191 0x0042413CUL >> 8, 0x00424320UL >> 8, 0x0042463BUL >> 8, 0x00425108UL >> 8,
192 0x00425409UL >> 8, 0x0042FF29UL >> 8, 0x00431107UL >> 8, 0x00431320UL >> 8,
193 0x0043153BUL >> 8, 0x0043213CUL >> 8, 0x00432320UL >> 8, 0x00432610UL >> 8,
194 0x0043313CUL >> 8, 0x00433320UL >> 8, 0x0043353BUL >> 8, 0x00433813UL >> 8,
195 0x00434108UL >> 8, 0x00434409UL >> 8, 0x00434610UL >> 8, 0x00435108UL >> 8,
196 0x0043553BUL >> 8, 0x00435F25UL >> 8, 0x00436309UL >> 8, 0x0043753BUL >> 8,
197 0x0043FF29UL >> 8, 0x00441239UL >> 8, 0x0044143BUL >> 8, 0x00442139UL >> 8,
198 0x00442309UL >> 8, 0x0044253BUL >> 8, 0x00443108UL >> 8, 0x00443220UL >> 8,
199 0x0044353BUL >> 8, 0x0044410AUL >> 8, 0x00444309UL >> 8, 0x0044453BUL >> 8,
200 0x00444813UL >> 8, 0x0044510AUL >> 8, 0x00445309UL >> 8, 0x00445510UL >> 8,
201 0x00445F25UL >> 8, 0x0044630DUL >> 8, 0x00450026UL >> 8, 0x00452713UL >> 8,
202 0x00453120UL >> 8, 0x0045330DUL >> 8, 0x00453510UL >> 8, 0x00454120UL >> 8,
203 0x0045430DUL >> 8, 0x00454510UL >> 8, 0x00455120UL >> 8, 0x0045530DUL >> 8,
204 0x00456209UL >> 8, 0x00456410UL >> 8, 0x0045FF12UL >> 8, 0x00466513UL >> 8,
205 0x0047FF22UL >> 8, 0x0048FF25UL >> 8, 0x0049F43DUL >> 8, 0x004BFB25UL >> 8,
206 0x004EF825UL >> 8, 0x004FFF18UL >> 8, 0x00511339UL >> 8, 0x00512107UL >> 8,
207 0x00513409UL >> 8, 0x00520007UL >> 8, 0x00521107UL >> 8, 0x00521320UL >> 8,
208 0x00522107UL >> 8, 0x00522409UL >> 8, 0x0052313CUL >> 8, 0x00523320UL >> 8,
209 0x0052353BUL >> 8, 0x00524108UL >> 8, 0x00524320UL >> 8, 0x00531139UL >> 8,
210 0x00531309UL >> 8, 0x00532139UL >> 8, 0x00532309UL >> 8, 0x0053253BUL >> 8,
211 0x00533108UL >> 8, 0x0053340DUL >> 8, 0x00533713UL >> 8, 0x00534108UL >> 8,
212 0x0053453BUL >> 8, 0x00534F2BUL >> 8, 0x00535309UL >> 8, 0x00535610UL >> 8,
213 0x00535F25UL >> 8, 0x0053643BUL >> 8, 0x00541139UL >> 8, 0x00542139UL >> 8,
214 0x00542309UL >> 8, 0x00542613UL >> 8, 0x00543139UL >> 8, 0x00543309UL >> 8,
215 0x00543510UL >> 8, 0x00543F2BUL >> 8, 0x00544309UL >> 8, 0x00544510UL >> 8,
216 0x00544F28UL >> 8, 0x0054530DUL >> 8, 0x0054FF12UL >> 8, 0x00553613UL >> 8,
217 0x00553F2BUL >> 8, 0x00554410UL >> 8, 0x0055510AUL >> 8, 0x0055543BUL >> 8,
218 0x00555F25UL >> 8, 0x0055633BUL >> 8, 0x0055FF12UL >> 8, 0x00566513UL >> 8,
219 0x00577413UL >> 8, 0x0059FF28UL >> 8, 0x005CC33DUL >> 8, 0x005EFB28UL >> 8,
220 0x005FFF18UL >> 8, 0x00611339UL >> 8, 0x00612107UL >> 8, 0x00613320UL >> 8,
221 0x0061A724UL >> 8, 0x00621107UL >> 8, 0x0062140BUL >> 8, 0x00622107UL >> 8,
222 0x00622320UL >> 8, 0x00623139UL >> 8, 0x00623320UL >> 8, 0x00631139UL >> 8,
223 0x0063130CUL >> 8, 0x00632139UL >> 8, 0x00632309UL >> 8, 0x00633139UL >> 8,
224 0x00633309UL >> 8, 0x00633626UL >> 8, 0x00633F2BUL >> 8, 0x00634309UL >> 8,
225 0x00634F2BUL >> 8, 0x0063543BUL >> 8, 0x0063FF12UL >> 8, 0x0064343BUL >> 8,
226 0x00643F2BUL >> 8, 0x0064443BUL >> 8, 0x00645209UL >> 8, 0x00665513UL >> 8,
227 0x0066610AUL >> 8, 0x00666526UL >> 8, 0x0067A616UL >> 8, 0x0069843DUL >> 8,
228 0x006CF612UL >> 8, 0x006EF326UL >> 8, 0x006FFF18UL >> 8, 0x0071130CUL >> 8,
229 0x00721107UL >> 8, 0x00722239UL >> 8, 0x0072291CUL >> 8, 0x0072340BUL >> 8,
230 0x00731139UL >> 8, 0x00732239UL >> 8, 0x0073630BUL >> 8, 0x0073FF12UL >> 8,
231 0x0074430BUL >> 8, 0x00755426UL >> 8, 0x00776F28UL >> 8, 0x00777410UL >> 8,
232 0x0078843DUL >> 8, 0x007CF416UL >> 8, 0x007EF326UL >> 8, 0x007FFF18UL >> 8,
233 0x00822239UL >> 8, 0x00831139UL >> 8, 0x0083430BUL >> 8, 0x0084530BUL >> 8,
234 0x0087561CUL >> 8, 0x00887F25UL >> 8, 0x00888426UL >> 8, 0x008AF61CUL >> 8,
235 0x008F0018UL >> 8, 0x008FFF18UL >> 8, 0x00911107UL >> 8, 0x0093230BUL >> 8,
236 0x0094530BUL >> 8, 0x0097743DUL >> 8, 0x00998C25UL >> 8, 0x00999616UL >> 8,
237 0x009EF825UL >> 8, 0x009FFF18UL >> 8, 0x00A3430BUL >> 8, 0x00A4530BUL >> 8,
238 0x00A7743DUL >> 8, 0x00AA9F2BUL >> 8, 0x00AAA616UL >> 8, 0x00ABD61FUL >> 8,
239 0x00AFFF18UL >> 8, 0x00B3330BUL >> 8, 0x00B44426UL >> 8, 0x00B7643DUL >> 8,
240 0x00BB971FUL >> 8, 0x00BBB53DUL >> 8, 0x00BEF512UL >> 8, 0x00BFFF18UL >> 8,
241 0x00C22139UL >> 8, 0x00C5330EUL >> 8, 0x00C7633DUL >> 8, 0x00CCAF2EUL >> 8,
242 0x00CCC616UL >> 8, 0x00CFFF18UL >> 8, 0x00D4440EUL >> 8, 0x00D6420EUL >> 8,
243 0x00DDCF2EUL >> 8, 0x00DDD516UL >> 8, 0x00DFFF18UL >> 8, 0x00E4330EUL >> 8,
244 0x00E6841CUL >> 8, 0x00EEE61CUL >> 8, 0x00EFFF18UL >> 8, 0x00F3320EUL >> 8,
245 0x00F55319UL >> 8, 0x00F8F41CUL >> 8, 0x00FAFF2EUL >> 8, 0x00FF002EUL >> 8,
246 0x00FFF10CUL >> 8, 0x00FFF33DUL >> 8, 0x00FFF722UL >> 8, 0x00FFFF18UL >> 8,
247 0x01000232UL >> 8, 0x0111113EUL >> 8, 0x01112103UL >> 8, 0x0111311AUL >> 8,
248 0x0112111AUL >> 8, 0x01122130UL >> 8, 0x01123130UL >> 8, 0x0112411DUL >> 8,
249 0x01131102UL >> 8, 0x01132102UL >> 8, 0x01133102UL >> 8, 0x01141108UL >> 8,
250 0x01142136UL >> 8, 0x01143136UL >> 8, 0x01144135UL >> 8, 0x0115223BUL >> 8,
251 0x01211103UL >> 8, 0x0121211AUL >> 8, 0x01213130UL >> 8, 0x01221130UL >> 8,
252 0x01222130UL >> 8, 0x01223102UL >> 8, 0x01231104UL >> 8, 0x01232104UL >> 8,
253 0x01233104UL >> 8, 0x01241139UL >> 8, 0x01241220UL >> 8, 0x01242220UL >> 8,
254 0x01251109UL >> 8, 0x0125223BUL >> 8, 0x0125810AUL >> 8, 0x01283212UL >> 8,
255 0x0131111AUL >> 8, 0x01312130UL >> 8, 0x0131222CUL >> 8, 0x0131322AUL >> 8,
256 0x0132122AUL >> 8, 0x0132222DUL >> 8, 0x0132322DUL >> 8, 0x01331207UL >> 8,
257 0x01332234UL >> 8, 0x01333234UL >> 8, 0x01341139UL >> 8, 0x01343134UL >> 8,
258 0x01344134UL >> 8, 0x01348134UL >> 8, 0x0135220BUL >> 8, 0x0136110BUL >> 8,
259 0x01365224UL >> 8, 0x01411102UL >> 8, 0x01412104UL >> 8, 0x01431239UL >> 8,
260 0x01432239UL >> 8, 0x0143320AUL >> 8, 0x01435134UL >> 8, 0x01443107UL >> 8,
261 0x01444134UL >> 8, 0x01446134UL >> 8, 0x0145220EUL >> 8, 0x01455134UL >> 8,
262 0x0147110EUL >> 8, 0x01511102UL >> 8, 0x01521239UL >> 8, 0x01531239UL >> 8,
263 0x01532239UL >> 8, 0x01533107UL >> 8, 0x0155220EUL >> 8, 0x01555134UL >> 8,
264 0x0157110EUL >> 8, 0x01611107UL >> 8, 0x01621239UL >> 8, 0x01631239UL >> 8,
265 0x01661139UL >> 8, 0x01666134UL >> 8, 0x01711107UL >> 8, 0x01721239UL >> 8,
266 0x01745107UL >> 8, 0x0177110CUL >> 8, 0x01811107UL >> 8, 0x01821107UL >> 8,
267 0x0185110CUL >> 8, 0x0188210CUL >> 8, 0x01911107UL >> 8, 0x01933139UL >> 8,
268 0x01A11107UL >> 8, 0x01A31139UL >> 8, 0x01F5220EUL >> 8, 0x02000001UL >> 8,
269 0x02000127UL >> 8, 0x02000427UL >> 8, 0x02000727UL >> 8, 0x02000E2FUL >> 8,
270 0x02110000UL >> 8, 0x02111200UL >> 8, 0x02111411UL >> 8, 0x02111827UL >> 8,
271 0x02111F2FUL >> 8, 0x02112411UL >> 8, 0x02112715UL >> 8, 0x02113200UL >> 8,
272 0x02113411UL >> 8, 0x02113715UL >> 8, 0x02114200UL >> 8, 0x02121200UL >> 8,
273 0x02121301UL >> 8, 0x02121F2FUL >> 8, 0x02122200UL >> 8, 0x02122615UL >> 8,
274 0x02122F2FUL >> 8, 0x02123311UL >> 8, 0x02123F2FUL >> 8, 0x02124411UL >> 8,
275 0x02131211UL >> 8, 0x02132311UL >> 8, 0x02133211UL >> 8, 0x02184415UL >> 8,
276 0x02211200UL >> 8, 0x02211311UL >> 8, 0x02211F2FUL >> 8, 0x02212311UL >> 8,
277 0x02212F2FUL >> 8, 0x02213211UL >> 8, 0x02221201UL >> 8, 0x02221311UL >> 8,
278 0x02221F2FUL >> 8, 0x02222311UL >> 8, 0x02222F2FUL >> 8, 0x02223211UL >> 8,
279 0x02223F2FUL >> 8, 0x02231211UL >> 8, 0x02232211UL >> 8, 0x02232F2FUL >> 8,
280 0x02233211UL >> 8, 0x02233F2FUL >> 8, 0x02287515UL >> 8, 0x022DAB17UL >> 8,
281 0x02311211UL >> 8, 0x02311527UL >> 8, 0x02312211UL >> 8, 0x02321211UL >> 8,
282 0x02322211UL >> 8, 0x02322F2FUL >> 8, 0x02323311UL >> 8, 0x02323F2FUL >> 8,
283 0x02331211UL >> 8, 0x02332211UL >> 8, 0x02332F2FUL >> 8, 0x02333F2FUL >> 8,
284 0x0237FF17UL >> 8, 0x02385615UL >> 8, 0x023D9517UL >> 8, 0x02410027UL >> 8,
285 0x02487827UL >> 8, 0x024E3117UL >> 8, 0x024FFF2FUL >> 8, 0x02598627UL >> 8,
286 0x025DFF2FUL >> 8, 0x025FFF2FUL >> 8, 0x02687827UL >> 8, 0x026DFA17UL >> 8,
287 0x026FFF2FUL >> 8, 0x02796427UL >> 8, 0x027E4217UL >> 8, 0x027FFF2FUL >> 8,
288 0x02888727UL >> 8, 0x028EFF2FUL >> 8, 0x028FFF2FUL >> 8, 0x02984327UL >> 8,
289 0x029F112FUL >> 8, 0x029FFF2FUL >> 8, 0x02A76527UL >> 8, 0x02AEF717UL >> 8,
290 0x02AFFF2FUL >> 8, 0x02B7C827UL >> 8, 0x02BEF917UL >> 8, 0x02BFFF2FUL >> 8,
291 0x02C66527UL >> 8, 0x02CD5517UL >> 8, 0x02CFFF2FUL >> 8, 0x02D63227UL >> 8,
292 0x02DDD527UL >> 8, 0x02DFFF2BUL >> 8, 0x02E84717UL >> 8, 0x02EEE327UL >> 8,
293 0x02EFFF2FUL >> 8, 0x02F54527UL >> 8, 0x02FCF817UL >> 8, 0x02FFEF2BUL >> 8,
294 0x02FFFA2FUL >> 8, 0x02FFFE2FUL >> 8, 0x03000127UL >> 8, 0x03000201UL >> 8,
295 0x03111200UL >> 8, 0x03122115UL >> 8, 0x03123200UL >> 8, 0x03133211UL >> 8,
296 0x03211200UL >> 8, 0x03213127UL >> 8, 0x03221200UL >> 8, 0x03345215UL >> 8,
297 0x04000F17UL >> 8, 0x04122F17UL >> 8, 0x043F6515UL >> 8, 0x043FFF17UL >> 8,
298 0x044F5527UL >> 8, 0x044FFF17UL >> 8, 0x045F0017UL >> 8, 0x045FFF17UL >> 8,
299 0x046F6517UL >> 8, 0x04710027UL >> 8, 0x047F4427UL >> 8, 0x04810027UL >> 8,
300 0x048EFA15UL >> 8, 0x048FFF2FUL >> 8, 0x049F4427UL >> 8, 0x049FFF2FUL >> 8,
301 0x04AEA727UL >> 8, 0x04AFFF2FUL >> 8, 0x04BE9C15UL >> 8, 0x04BFFF2FUL >> 8,
302 0x04CE5427UL >> 8, 0x04CFFF2FUL >> 8, 0x04DE3527UL >> 8, 0x04DFFF17UL >> 8,
303 0x04EE4627UL >> 8, 0x04EFFF17UL >> 8, 0x04FEF327UL >> 8, 0x04FFFF2FUL >> 8,
304 0x06000F27UL >> 8, 0x069FFF17UL >> 8, 0x06FFFF17UL >> 8, 0x08110017UL >> 8,
305 0x08EFFF15UL >> 8, 0xFFFFFF00UL >> 8};
306
307 static const UWORD8 ixheaacd_ari_hash_m_1[742] = {
308 (UWORD8)0x04, (UWORD8)0x0A, (UWORD8)0x10, (UWORD8)0x16, (UWORD8)0x1F,
309 (UWORD8)0x2E, (UWORD8)0x00, (UWORD8)0x03, (UWORD8)0x06, (UWORD8)0x36,
310 (UWORD8)0x23, (UWORD8)0x29, (UWORD8)0x2E, (UWORD8)0x1B, (UWORD8)0x35,
311 (UWORD8)0x21, (UWORD8)0x12, (UWORD8)0x30, (UWORD8)0x1D, (UWORD8)0x35,
312 (UWORD8)0x38, (UWORD8)0x1B, (UWORD8)0x33, (UWORD8)0x35, (UWORD8)0x29,
313 (UWORD8)0x35, (UWORD8)0x24, (UWORD8)0x33, (UWORD8)0x0F, (UWORD8)0x02,
314 (UWORD8)0x2D, (UWORD8)0x36, (UWORD8)0x23, (UWORD8)0x12, (UWORD8)0x3F,
315 (UWORD8)0x2D, (UWORD8)0x36, (UWORD8)0x38, (UWORD8)0x29, (UWORD8)0x2B,
316 (UWORD8)0x2D, (UWORD8)0x36, (UWORD8)0x38, (UWORD8)0x29, (UWORD8)0x1D,
317 (UWORD8)0x36, (UWORD8)0x38, (UWORD8)0x12, (UWORD8)0x35, (UWORD8)0x29,
318 (UWORD8)0x35, (UWORD8)0x37, (UWORD8)0x2A, (UWORD8)0x1E, (UWORD8)0x3B,
319 (UWORD8)0x2D, (UWORD8)0x3C, (UWORD8)0x23, (UWORD8)0x2E, (UWORD8)0x1E,
320 (UWORD8)0x21, (UWORD8)0x24, (UWORD8)0x1E, (UWORD8)0x36, (UWORD8)0x38,
321 (UWORD8)0x35, (UWORD8)0x37, (UWORD8)0x12, (UWORD8)0x37, (UWORD8)0x29,
322 (UWORD8)0x24, (UWORD8)0x21, (UWORD8)0x36, (UWORD8)0x21, (UWORD8)0x25,
323 (UWORD8)0x21, (UWORD8)0x38, (UWORD8)0x29, (UWORD8)0x23, (UWORD8)0x12,
324 (UWORD8)0x0C, (UWORD8)0x29, (UWORD8)0x31, (UWORD8)0x2C, (UWORD8)0x08,
325 (UWORD8)0x13, (UWORD8)0x2E, (UWORD8)0x2A, (UWORD8)0x08, (UWORD8)0x10,
326 (UWORD8)0x2E, (UWORD8)0x1E, (UWORD8)0x36, (UWORD8)0x24, (UWORD8)0x2D,
327 (UWORD8)0x1E, (UWORD8)0x36, (UWORD8)0x1F, (UWORD8)0x37, (UWORD8)0x04,
328 (UWORD8)0x2A, (UWORD8)0x20, (UWORD8)0x29, (UWORD8)0x2E, (UWORD8)0x2D,
329 (UWORD8)0x08, (UWORD8)0x23, (UWORD8)0x29, (UWORD8)0x2B, (UWORD8)0x1E,
330 (UWORD8)0x08, (UWORD8)0x24, (UWORD8)0x29, (UWORD8)0x1E, (UWORD8)0x36,
331 (UWORD8)0x23, (UWORD8)0x34, (UWORD8)0x21, (UWORD8)0x12, (UWORD8)0x36,
332 (UWORD8)0x37, (UWORD8)0x29, (UWORD8)0x2D, (UWORD8)0x3C, (UWORD8)0x20,
333 (UWORD8)0x16, (UWORD8)0x2D, (UWORD8)0x3C, (UWORD8)0x09, (UWORD8)0x29,
334 (UWORD8)0x2D, (UWORD8)0x08, (UWORD8)0x09, (UWORD8)0x24, (UWORD8)0x3C,
335 (UWORD8)0x21, (UWORD8)0x13, (UWORD8)0x3C, (UWORD8)0x21, (UWORD8)0x1F,
336 (UWORD8)0x21, (UWORD8)0x29, (UWORD8)0x24, (UWORD8)0x3B, (UWORD8)0x08,
337 (UWORD8)0x09, (UWORD8)0x26, (UWORD8)0x08, (UWORD8)0x09, (UWORD8)0x10,
338 (UWORD8)0x36, (UWORD8)0x21, (UWORD8)0x23, (UWORD8)0x1F, (UWORD8)0x23,
339 (UWORD8)0x0A, (UWORD8)0x23, (UWORD8)0x29, (UWORD8)0x10, (UWORD8)0x21,
340 (UWORD8)0x3B, (UWORD8)0x21, (UWORD8)0x10, (UWORD8)0x25, (UWORD8)0x21,
341 (UWORD8)0x12, (UWORD8)0x13, (UWORD8)0x29, (UWORD8)0x01, (UWORD8)0x24,
342 (UWORD8)0x30, (UWORD8)0x2A, (UWORD8)0x20, (UWORD8)0x16, (UWORD8)0x2C,
343 (UWORD8)0x1E, (UWORD8)0x08, (UWORD8)0x10, (UWORD8)0x2A, (UWORD8)0x1E,
344 (UWORD8)0x08, (UWORD8)0x23, (UWORD8)0x1E, (UWORD8)0x3C, (UWORD8)0x07,
345 (UWORD8)0x2D, (UWORD8)0x20, (UWORD8)0x16, (UWORD8)0x2D, (UWORD8)0x3C,
346 (UWORD8)0x09, (UWORD8)0x16, (UWORD8)0x2D, (UWORD8)0x20, (UWORD8)0x10,
347 (UWORD8)0x2B, (UWORD8)0x08, (UWORD8)0x23, (UWORD8)0x25, (UWORD8)0x21,
348 (UWORD8)0x1F, (UWORD8)0x21, (UWORD8)0x29, (UWORD8)0x07, (UWORD8)0x08,
349 (UWORD8)0x0D, (UWORD8)0x1E, (UWORD8)0x08, (UWORD8)0x20, (UWORD8)0x10,
350 (UWORD8)0x29, (UWORD8)0x1E, (UWORD8)0x08, (UWORD8)0x3B, (UWORD8)0x29,
351 (UWORD8)0x3C, (UWORD8)0x20, (UWORD8)0x3B, (UWORD8)0x29, (UWORD8)0x0A,
352 (UWORD8)0x20, (UWORD8)0x24, (UWORD8)0x0A, (UWORD8)0x21, (UWORD8)0x12,
353 (UWORD8)0x23, (UWORD8)0x39, (UWORD8)0x3B, (UWORD8)0x08, (UWORD8)0x09,
354 (UWORD8)0x10, (UWORD8)0x08, (UWORD8)0x09, (UWORD8)0x10, (UWORD8)0x08,
355 (UWORD8)0x0D, (UWORD8)0x10, (UWORD8)0x0A, (UWORD8)0x09, (UWORD8)0x3B,
356 (UWORD8)0x0A, (UWORD8)0x09, (UWORD8)0x24, (UWORD8)0x29, (UWORD8)0x10,
357 (UWORD8)0x20, (UWORD8)0x0D, (UWORD8)0x10, (UWORD8)0x20, (UWORD8)0x0D,
358 (UWORD8)0x10, (UWORD8)0x28, (UWORD8)0x0D, (UWORD8)0x10, (UWORD8)0x1F,
359 (UWORD8)0x10, (UWORD8)0x26, (UWORD8)0x12, (UWORD8)0x26, (UWORD8)0x12,
360 (UWORD8)0x26, (UWORD8)0x12, (UWORD8)0x12, (UWORD8)0x1F, (UWORD8)0x04,
361 (UWORD8)0x07, (UWORD8)0x0D, (UWORD8)0x2A, (UWORD8)0x20, (UWORD8)0x1E,
362 (UWORD8)0x08, (UWORD8)0x09, (UWORD8)0x2B, (UWORD8)0x08, (UWORD8)0x07,
363 (UWORD8)0x3C, (UWORD8)0x09, (UWORD8)0x07, (UWORD8)0x3C, (UWORD8)0x09,
364 (UWORD8)0x10, (UWORD8)0x3C, (UWORD8)0x09, (UWORD8)0x3B, (UWORD8)0x3C,
365 (UWORD8)0x20, (UWORD8)0x3B, (UWORD8)0x08, (UWORD8)0x09, (UWORD8)0x29,
366 (UWORD8)0x07, (UWORD8)0x20, (UWORD8)0x3B, (UWORD8)0x3C, (UWORD8)0x20,
367 (UWORD8)0x10, (UWORD8)0x3C, (UWORD8)0x20, (UWORD8)0x3B, (UWORD8)0x13,
368 (UWORD8)0x08, (UWORD8)0x09, (UWORD8)0x10, (UWORD8)0x08, (UWORD8)0x3B,
369 (UWORD8)0x25, (UWORD8)0x09, (UWORD8)0x3B, (UWORD8)0x29, (UWORD8)0x39,
370 (UWORD8)0x3B, (UWORD8)0x39, (UWORD8)0x09, (UWORD8)0x3B, (UWORD8)0x08,
371 (UWORD8)0x20, (UWORD8)0x3B, (UWORD8)0x0A, (UWORD8)0x09, (UWORD8)0x3B,
372 (UWORD8)0x13, (UWORD8)0x0A, (UWORD8)0x09, (UWORD8)0x10, (UWORD8)0x25,
373 (UWORD8)0x0D, (UWORD8)0x26, (UWORD8)0x13, (UWORD8)0x20, (UWORD8)0x0D,
374 (UWORD8)0x10, (UWORD8)0x20, (UWORD8)0x0D, (UWORD8)0x10, (UWORD8)0x20,
375 (UWORD8)0x0D, (UWORD8)0x09, (UWORD8)0x10, (UWORD8)0x12, (UWORD8)0x13,
376 (UWORD8)0x22, (UWORD8)0x25, (UWORD8)0x3D, (UWORD8)0x25, (UWORD8)0x25,
377 (UWORD8)0x18, (UWORD8)0x39, (UWORD8)0x07, (UWORD8)0x09, (UWORD8)0x07,
378 (UWORD8)0x07, (UWORD8)0x20, (UWORD8)0x07, (UWORD8)0x09, (UWORD8)0x3C,
379 (UWORD8)0x20, (UWORD8)0x3B, (UWORD8)0x08, (UWORD8)0x20, (UWORD8)0x39,
380 (UWORD8)0x09, (UWORD8)0x39, (UWORD8)0x09, (UWORD8)0x3B, (UWORD8)0x08,
381 (UWORD8)0x0D, (UWORD8)0x13, (UWORD8)0x08, (UWORD8)0x3B, (UWORD8)0x2B,
382 (UWORD8)0x09, (UWORD8)0x10, (UWORD8)0x25, (UWORD8)0x3B, (UWORD8)0x39,
383 (UWORD8)0x39, (UWORD8)0x09, (UWORD8)0x13, (UWORD8)0x39, (UWORD8)0x09,
384 (UWORD8)0x10, (UWORD8)0x2B, (UWORD8)0x09, (UWORD8)0x10, (UWORD8)0x28,
385 (UWORD8)0x0D, (UWORD8)0x12, (UWORD8)0x13, (UWORD8)0x2B, (UWORD8)0x10,
386 (UWORD8)0x0A, (UWORD8)0x3B, (UWORD8)0x25, (UWORD8)0x3B, (UWORD8)0x12,
387 (UWORD8)0x13, (UWORD8)0x13, (UWORD8)0x28, (UWORD8)0x3D, (UWORD8)0x28,
388 (UWORD8)0x18, (UWORD8)0x39, (UWORD8)0x07, (UWORD8)0x20, (UWORD8)0x24,
389 (UWORD8)0x07, (UWORD8)0x0B, (UWORD8)0x07, (UWORD8)0x20, (UWORD8)0x39,
390 (UWORD8)0x20, (UWORD8)0x39, (UWORD8)0x0C, (UWORD8)0x39, (UWORD8)0x09,
391 (UWORD8)0x39, (UWORD8)0x09, (UWORD8)0x26, (UWORD8)0x2B, (UWORD8)0x09,
392 (UWORD8)0x2B, (UWORD8)0x3B, (UWORD8)0x12, (UWORD8)0x3B, (UWORD8)0x2B,
393 (UWORD8)0x3B, (UWORD8)0x09, (UWORD8)0x13, (UWORD8)0x0A, (UWORD8)0x26,
394 (UWORD8)0x16, (UWORD8)0x3D, (UWORD8)0x12, (UWORD8)0x26, (UWORD8)0x18,
395 (UWORD8)0x0C, (UWORD8)0x07, (UWORD8)0x39, (UWORD8)0x1C, (UWORD8)0x0B,
396 (UWORD8)0x39, (UWORD8)0x39, (UWORD8)0x0B, (UWORD8)0x12, (UWORD8)0x0B,
397 (UWORD8)0x26, (UWORD8)0x28, (UWORD8)0x10, (UWORD8)0x3D, (UWORD8)0x16,
398 (UWORD8)0x26, (UWORD8)0x18, (UWORD8)0x39, (UWORD8)0x39, (UWORD8)0x0B,
399 (UWORD8)0x0B, (UWORD8)0x1C, (UWORD8)0x25, (UWORD8)0x26, (UWORD8)0x1C,
400 (UWORD8)0x18, (UWORD8)0x18, (UWORD8)0x07, (UWORD8)0x0B, (UWORD8)0x0B,
401 (UWORD8)0x3D, (UWORD8)0x25, (UWORD8)0x16, (UWORD8)0x25, (UWORD8)0x18,
402 (UWORD8)0x0B, (UWORD8)0x0B, (UWORD8)0x3D, (UWORD8)0x2B, (UWORD8)0x16,
403 (UWORD8)0x1F, (UWORD8)0x18, (UWORD8)0x0B, (UWORD8)0x26, (UWORD8)0x3D,
404 (UWORD8)0x1F, (UWORD8)0x3D, (UWORD8)0x12, (UWORD8)0x18, (UWORD8)0x39,
405 (UWORD8)0x0E, (UWORD8)0x3D, (UWORD8)0x2E, (UWORD8)0x16, (UWORD8)0x18,
406 (UWORD8)0x0E, (UWORD8)0x0E, (UWORD8)0x2E, (UWORD8)0x16, (UWORD8)0x18,
407 (UWORD8)0x0E, (UWORD8)0x1C, (UWORD8)0x1C, (UWORD8)0x18, (UWORD8)0x0E,
408 (UWORD8)0x19, (UWORD8)0x1C, (UWORD8)0x2E, (UWORD8)0x2E, (UWORD8)0x0C,
409 (UWORD8)0x3D, (UWORD8)0x22, (UWORD8)0x18, (UWORD8)0x32, (UWORD8)0x3E,
410 (UWORD8)0x03, (UWORD8)0x1A, (UWORD8)0x1A, (UWORD8)0x30, (UWORD8)0x30,
411 (UWORD8)0x1D, (UWORD8)0x02, (UWORD8)0x02, (UWORD8)0x02, (UWORD8)0x08,
412 (UWORD8)0x36, (UWORD8)0x36, (UWORD8)0x35, (UWORD8)0x3B, (UWORD8)0x03,
413 (UWORD8)0x1A, (UWORD8)0x30, (UWORD8)0x30, (UWORD8)0x30, (UWORD8)0x02,
414 (UWORD8)0x04, (UWORD8)0x04, (UWORD8)0x04, (UWORD8)0x39, (UWORD8)0x20,
415 (UWORD8)0x20, (UWORD8)0x09, (UWORD8)0x3B, (UWORD8)0x0A, (UWORD8)0x12,
416 (UWORD8)0x1A, (UWORD8)0x30, (UWORD8)0x2C, (UWORD8)0x2A, (UWORD8)0x2A,
417 (UWORD8)0x2D, (UWORD8)0x2D, (UWORD8)0x07, (UWORD8)0x34, (UWORD8)0x34,
418 (UWORD8)0x39, (UWORD8)0x34, (UWORD8)0x34, (UWORD8)0x34, (UWORD8)0x0B,
419 (UWORD8)0x0B, (UWORD8)0x24, (UWORD8)0x02, (UWORD8)0x04, (UWORD8)0x39,
420 (UWORD8)0x39, (UWORD8)0x0A, (UWORD8)0x34, (UWORD8)0x07, (UWORD8)0x34,
421 (UWORD8)0x34, (UWORD8)0x0E, (UWORD8)0x34, (UWORD8)0x0E, (UWORD8)0x02,
422 (UWORD8)0x39, (UWORD8)0x39, (UWORD8)0x39, (UWORD8)0x07, (UWORD8)0x0E,
423 (UWORD8)0x34, (UWORD8)0x0E, (UWORD8)0x07, (UWORD8)0x39, (UWORD8)0x39,
424 (UWORD8)0x39, (UWORD8)0x34, (UWORD8)0x07, (UWORD8)0x39, (UWORD8)0x07,
425 (UWORD8)0x0C, (UWORD8)0x07, (UWORD8)0x07, (UWORD8)0x0C, (UWORD8)0x0C,
426 (UWORD8)0x07, (UWORD8)0x39, (UWORD8)0x07, (UWORD8)0x39, (UWORD8)0x0E,
427 (UWORD8)0x01, (UWORD8)0x27, (UWORD8)0x27, (UWORD8)0x27, (UWORD8)0x2F,
428 (UWORD8)0x00, (UWORD8)0x00, (UWORD8)0x11, (UWORD8)0x27, (UWORD8)0x2F,
429 (UWORD8)0x11, (UWORD8)0x15, (UWORD8)0x00, (UWORD8)0x11, (UWORD8)0x15,
430 (UWORD8)0x00, (UWORD8)0x00, (UWORD8)0x01, (UWORD8)0x2F, (UWORD8)0x00,
431 (UWORD8)0x15, (UWORD8)0x2F, (UWORD8)0x11, (UWORD8)0x2F, (UWORD8)0x11,
432 (UWORD8)0x11, (UWORD8)0x11, (UWORD8)0x11, (UWORD8)0x15, (UWORD8)0x00,
433 (UWORD8)0x11, (UWORD8)0x2F, (UWORD8)0x11, (UWORD8)0x2F, (UWORD8)0x11,
434 (UWORD8)0x01, (UWORD8)0x11, (UWORD8)0x2F, (UWORD8)0x11, (UWORD8)0x2F,
435 (UWORD8)0x11, (UWORD8)0x2F, (UWORD8)0x11, (UWORD8)0x11, (UWORD8)0x2F,
436 (UWORD8)0x11, (UWORD8)0x2F, (UWORD8)0x15, (UWORD8)0x17, (UWORD8)0x11,
437 (UWORD8)0x27, (UWORD8)0x11, (UWORD8)0x11, (UWORD8)0x11, (UWORD8)0x2F,
438 (UWORD8)0x11, (UWORD8)0x2F, (UWORD8)0x11, (UWORD8)0x11, (UWORD8)0x2F,
439 (UWORD8)0x2F, (UWORD8)0x17, (UWORD8)0x15, (UWORD8)0x17, (UWORD8)0x27,
440 (UWORD8)0x27, (UWORD8)0x17, (UWORD8)0x2F, (UWORD8)0x27, (UWORD8)0x2F,
441 (UWORD8)0x2F, (UWORD8)0x27, (UWORD8)0x17, (UWORD8)0x2F, (UWORD8)0x27,
442 (UWORD8)0x17, (UWORD8)0x2F, (UWORD8)0x27, (UWORD8)0x2F, (UWORD8)0x2F,
443 (UWORD8)0x27, (UWORD8)0x2F, (UWORD8)0x2F, (UWORD8)0x27, (UWORD8)0x17,
444 (UWORD8)0x2F, (UWORD8)0x27, (UWORD8)0x17, (UWORD8)0x2F, (UWORD8)0x27,
445 (UWORD8)0x17, (UWORD8)0x2F, (UWORD8)0x27, (UWORD8)0x27, (UWORD8)0x2B,
446 (UWORD8)0x17, (UWORD8)0x27, (UWORD8)0x2F, (UWORD8)0x27, (UWORD8)0x17,
447 (UWORD8)0x2B, (UWORD8)0x2F, (UWORD8)0x2F, (UWORD8)0x27, (UWORD8)0x01,
448 (UWORD8)0x00, (UWORD8)0x15, (UWORD8)0x00, (UWORD8)0x11, (UWORD8)0x00,
449 (UWORD8)0x27, (UWORD8)0x00, (UWORD8)0x15, (UWORD8)0x17, (UWORD8)0x17,
450 (UWORD8)0x15, (UWORD8)0x17, (UWORD8)0x27, (UWORD8)0x17, (UWORD8)0x17,
451 (UWORD8)0x17, (UWORD8)0x17, (UWORD8)0x27, (UWORD8)0x27, (UWORD8)0x27,
452 (UWORD8)0x15, (UWORD8)0x2F, (UWORD8)0x27, (UWORD8)0x2F, (UWORD8)0x27,
453 (UWORD8)0x2F, (UWORD8)0x15, (UWORD8)0x2F, (UWORD8)0x27, (UWORD8)0x2F,
454 (UWORD8)0x27, (UWORD8)0x17, (UWORD8)0x27, (UWORD8)0x17, (UWORD8)0x27,
455 (UWORD8)0x2F, (UWORD8)0x27, (UWORD8)0x17, (UWORD8)0x17, (UWORD8)0x17,
456 (UWORD8)0x15, (UWORD8)0x00};
457
458 static const UWORD16 ixheaacd_ari_cf_m[64][17] = {
459 {708, 706, 579, 569, 568, 567, 479, 469, 297, 138, 97, 91, 72, 52, 38, 34,
460 0},
461 {7619, 6917, 6519, 6412, 5514, 5003, 4683, 4563, 3907, 3297, 3125, 3060,
462 2904, 2718, 2631, 2590, 0},
463 {7263, 4888, 4810, 4803, 1889, 415, 335, 327, 195, 72, 52, 49, 36, 20, 15,
464 14, 0},
465 {3626, 2197, 2188, 2187, 582, 57, 47, 46, 30, 12, 9, 8, 6, 4, 3, 2, 0},
466 {7806, 5541, 5451, 5441, 2720, 834, 691, 674, 487, 243, 179, 167, 139, 98,
467 77, 70, 0},
468 {6684, 4101, 4058, 4055, 1748, 426, 368, 364, 322, 257, 235, 232, 228, 222,
469 217, 215, 0},
470 {9162, 5964, 5831, 5819, 3269, 866, 658, 638, 535, 348, 258, 244, 234, 214,
471 195, 186, 0},
472 {10638, 8491, 8365, 8351, 4418, 2067, 1859, 1834, 1190, 601, 495, 478, 356,
473 217, 174, 164, 0},
474 {13389, 10514, 10032, 9961, 7166, 3488, 2655, 2524, 2015, 1140, 760, 672,
475 585, 426, 325, 283, 0},
476 {14861, 12788, 12115, 11952, 9987, 6657, 5323, 4984, 4324, 3001, 2205, 1943,
477 1764, 1394, 1115, 978, 0},
478 {12876, 10004, 9661, 9610, 7107, 3435, 2711, 2595, 2257, 1508, 1059, 952,
479 893, 753, 609, 538, 0},
480 {15125, 13591, 13049, 12874, 11192, 8543, 7406, 7023, 6291, 4922, 4104,
481 3769, 3465, 2890, 2486, 2275, 0},
482 {14574, 13106, 12731, 12638, 10453, 7947, 7233, 7037, 6031, 4618, 4081,
483 3906, 3465, 2802, 2476, 2349, 0},
484 {15070, 13179, 12517, 12351, 10742, 7657, 6200, 5825, 5264, 3998, 3014,
485 2662, 2510, 2153, 1799, 1564, 0},
486 {15542, 14466, 14007, 13844, 12489, 10409, 9481, 9132, 8305, 6940, 6193,
487 5867, 5458, 4743, 4291, 4047, 0},
488 {15165, 14384, 14084, 13934, 12911, 11485, 10844, 10513, 10002, 8993, 8380,
489 8051, 7711, 7036, 6514, 6233, 0},
490 {15642, 14279, 13625, 13393, 12348, 9971, 8405, 7858, 7335, 6119, 4918,
491 4376, 4185, 3719, 3231, 2860, 0},
492 {13408, 13407, 11471, 11218, 11217, 11216, 9473, 9216, 6480, 3689, 2857,
493 2690, 2256, 1732, 1405, 1302, 0},
494 {16098, 15584, 15191, 14931, 14514, 13578, 12703, 12103, 11830, 11172,
495 10475, 9867, 9695, 9281, 8825, 8389, 0},
496 {15844, 14873, 14277, 13996, 13230, 11535, 10205, 9543, 9107, 8086, 7085,
497 6419, 6214, 5713, 5195, 4731, 0},
498 {16131, 15720, 15443, 15276, 14848, 13971, 13314, 12910, 12591, 11874,
499 11225, 10788, 10573, 10077, 9585, 9209, 0},
500 {16331, 16330, 12283, 11435, 11434, 11433, 8725, 8049, 6065, 4138, 3187,
501 2842, 2529, 2171, 1907, 1745, 0},
502 {16011, 15292, 14782, 14528, 14008, 12767, 11556, 10921, 10591, 9759, 8813,
503 8043, 7855, 7383, 6863, 6282, 0},
504 {16380, 16379, 15159, 14610, 14609, 14608, 12859, 12111, 11046, 9536, 8348,
505 7713, 7216, 6533, 5964, 5546, 0},
506 {16367, 16333, 16294, 16253, 16222, 16143, 16048, 15947, 15915, 15832,
507 15731, 15619, 15589, 15512, 15416, 15310, 0},
508 {15967, 15319, 14937, 14753, 14010, 12638, 11787, 11360, 10805, 9706, 8934,
509 8515, 8166, 7456, 6911, 6575, 0},
510 {4906, 3005, 2985, 2984, 875, 102, 83, 81, 47, 17, 12, 11, 8, 5, 4, 3, 0},
511 {7217, 4346, 4269, 4264, 1924, 428, 340, 332, 280, 203, 179, 175, 171, 164,
512 159, 157, 0},
513 {16010, 15415, 15032, 14805, 14228, 13043, 12168, 11634, 11265, 10419, 9645,
514 9110, 8892, 8378, 7850, 7437, 0},
515 {8573, 5218, 5046, 5032, 2787, 771, 555, 533, 443, 286, 218, 205, 197, 181,
516 168, 162, 0},
517 {11474, 8095, 7822, 7796, 4632, 1443, 1046, 1004, 748, 351, 218, 194, 167,
518 121, 93, 83, 0},
519 {16152, 15764, 15463, 15264, 14925, 14189, 13536, 13070, 12846, 12314,
520 11763, 11277, 11131, 10777, 10383, 10011, 0},
521 {14187, 11654, 11043, 10919, 8498, 4885, 3778, 3552, 2947, 1835, 1283, 1134,
522 998, 749, 585, 514, 0},
523 {14162, 11527, 10759, 10557, 8601, 5417, 4105, 3753, 3286, 2353, 1708, 1473,
524 1370, 1148, 959, 840, 0},
525 {16205, 15902, 15669, 15498, 15213, 14601, 14068, 13674, 13463, 12970,
526 12471, 12061, 11916, 11564, 11183, 10841, 0},
527 {15043, 12972, 12092, 11792, 10265, 7446, 5934, 5379, 4883, 3825, 3036,
528 2647, 2507, 2185, 1901, 1699, 0},
529 {15320, 13694, 12782, 12352, 11191, 8936, 7433, 6671, 6255, 5366, 4622,
530 4158, 4020, 3712, 3420, 3198, 0},
531 {16255, 16020, 15768, 15600, 15416, 14963, 14440, 14006, 13875, 13534,
532 13137, 12697, 12602, 12364, 12084, 11781, 0},
533 {15627, 14503, 13906, 13622, 12557, 10527, 9269, 8661, 8117, 6933, 5994,
534 5474, 5222, 4664, 4166, 3841, 0},
535 {16366, 16365, 14547, 14160, 14159, 14158, 11969, 11473, 8735, 6147, 4911,
536 4530, 3865, 3180, 2710, 2473, 0},
537 {16257, 16038, 15871, 15754, 15536, 15071, 14673, 14390, 14230, 13842,
538 13452, 13136, 13021, 12745, 12434, 12154, 0},
539 {15855, 14971, 14338, 13939, 13239, 11782, 10585, 9805, 9444, 8623, 7846,
540 7254, 7079, 6673, 6262, 5923, 0},
541 {9492, 6318, 6197, 6189, 3004, 652, 489, 477, 333, 143, 96, 90, 78, 60, 50,
542 47, 0},
543 {16313, 16191, 16063, 15968, 15851, 15590, 15303, 15082, 14968, 14704,
544 14427, 14177, 14095, 13899, 13674, 13457, 0},
545 {8485, 5473, 5389, 5383, 2411, 494, 386, 377, 278, 150, 117, 112, 103, 89,
546 81, 78, 0},
547 {10497, 7154, 6959, 6943, 3788, 1004, 734, 709, 517, 238, 152, 138, 120, 90,
548 72, 66, 0},
549 {16317, 16226, 16127, 16040, 15955, 15762, 15547, 15345, 15277, 15111,
550 14922, 14723, 14671, 14546, 14396, 14239, 0},
551 {16382, 16381, 15858, 15540, 15539, 15538, 14704, 14168, 13768, 13092,
552 12452, 11925, 11683, 11268, 10841, 10460, 0},
553 {5974, 3798, 3758, 3755, 1275, 205, 166, 162, 95, 35, 26, 24, 18, 11, 8, 7,
554 0},
555 {3532, 2258, 2246, 2244, 731, 135, 118, 115, 87, 45, 36, 34, 29, 21, 17, 16,
556 0},
557 {7466, 4882, 4821, 4811, 2476, 886, 788, 771, 688, 531, 469, 457, 437, 400,
558 369, 361, 0},
559 {9580, 5772, 5291, 5216, 3444, 1496, 1025, 928, 806, 578, 433, 384, 366,
560 331, 296, 273, 0},
561 {10692, 7730, 7543, 7521, 4679, 1746, 1391, 1346, 1128, 692, 495, 458, 424,
562 353, 291, 268, 0},
563 {11040, 7132, 6549, 6452, 4377, 1875, 1253, 1130, 958, 631, 431, 370, 346,
564 296, 253, 227, 0},
565 {12687, 9332, 8701, 8585, 6266, 3093, 2182, 2004, 1683, 1072, 712, 608, 559,
566 458, 373, 323, 0},
567 {13429, 9853, 8860, 8584, 6806, 4039, 2862, 2478, 2239, 1764, 1409, 1224,
568 1178, 1077, 979, 903, 0},
569 {14685, 12163, 11061, 10668, 9101, 6345, 4871, 4263, 3908, 3200, 2668, 2368,
570 2285, 2106, 1942, 1819, 0},
571 {13295, 11302, 10999, 10945, 7947, 5036, 4490, 4385, 3391, 2185, 1836, 1757,
572 1424, 998, 833, 785, 0},
573 {4992, 2993, 2972, 2970, 1269, 575, 552, 549, 530, 505, 497, 495, 493, 489,
574 486, 485, 0},
575 {15419, 13862, 13104, 12819, 11429, 8753, 7220, 6651, 6020, 4667, 3663,
576 3220, 2995, 2511, 2107, 1871, 0},
577 {12468, 9263, 8912, 8873, 5758, 2193, 1625, 1556, 1187, 589, 371, 330, 283,
578 200, 149, 131, 0},
579 {15870, 15076, 14615, 14369, 13586, 12034, 10990, 10423, 9953, 8908, 8031,
580 7488, 7233, 6648, 6101, 5712, 0},
581 {1693, 978, 976, 975, 194, 18, 16, 15, 11, 7, 6, 5, 4, 3, 2, 1, 0},
582 {7992, 5218, 5147, 5143, 2152, 366, 282, 276, 173, 59, 38, 35, 27, 16, 11,
583 10, 0}};
584
585 typedef struct { WORD32 low, high, value; } state_arith;
586
587 const WORD32 ixheaacd_table_frac[7] = {
588 638450709, 759250126, 902905651, 1073741824,
589 1276901417, 1518500250, 1805811302,
590 };
591
592 const WORD64 ixheaacd_table_exp[32] = {
593 1, 2, 4, 8, 16, 32, 64,
594 128, 256, 512, 1024, 2048, 4096, 8192,
595 16384, 32768, 65536, 131072, 262144, 524288, 1048576,
596 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728,
597 268435456, 536870912, 1073741824, 2147483648};
598
599 static const WORD32 ixheaacd_pow_14_3[8] = {0, 3251, 4096, 5161,
600 6502, 8192, 10321, 13004};
601
602 const WORD32 ixheaacd_pow_table_Q13[1025] = {0,
603 131072 >> 4,
604 330281 >> 4,
605 567116 >> 4,
606 832256 >> 4,
607 1120650 >> 4,
608 1429042 >> 4,
609 1755122 >> 4,
610 2097152 >> 4,
611 2453767 >> 4,
612 2823861 >> 4,
613 3206517 >> 4,
614 3600960 >> 4,
615 4006524 >> 4,
616 4422631 >> 4,
617 4848770 >> 4,
618 5284492 >> 4,
619 5729392 >> 4,
620 6183105 >> 4,
621 6645302 >> 4,
622 7115683 >> 4,
623 7593972 >> 4,
624 8079916 >> 4,
625 8573281 >> 4,
626 9073850 >> 4,
627 9581422 >> 4,
628 10095808 >> 4,
629 10616832 >> 4,
630 11144330 >> 4,
631 11678147 >> 4,
632 12218136 >> 4,
633 12764159 >> 4,
634 13316085 >> 4,
635 13873792 >> 4,
636 14437162 >> 4,
637 15006082 >> 4,
638 15580448 >> 4,
639 16160157 >> 4,
640 16745112 >> 4,
641 17335222 >> 4,
642 17930398 >> 4,
643 18530554 >> 4,
644 19135610 >> 4,
645 19745488 >> 4,
646 20360112 >> 4,
647 20979411 >> 4,
648 21603314 >> 4,
649 22231755 >> 4,
650 22864669 >> 4,
651 23501994 >> 4,
652 24143669 >> 4,
653 24789637 >> 4,
654 25439841 >> 4,
655 26094226 >> 4,
656 26752740 >> 4,
657 27415332 >> 4,
658 28081952 >> 4,
659 28752552 >> 4,
660 29427086 >> 4,
661 30105507 >> 4,
662 30787772 >> 4,
663 31473838 >> 4,
664 32163664 >> 4,
665 32857208 >> 4,
666 33554432 >> 4,
667 34255297 >> 4,
668 34959765 >> 4,
669 35667801 >> 4,
670 36379368 >> 4,
671 37094431 >> 4,
672 37812958 >> 4,
673 38534914 >> 4,
674 39260268 >> 4,
675 39988988 >> 4,
676 40721043 >> 4,
677 41456403 >> 4,
678 42195038 >> 4,
679 42936921 >> 4,
680 43682022 >> 4,
681 44430314 >> 4,
682 45181770 >> 4,
683 45936364 >> 4,
684 46694070 >> 4,
685 47454862 >> 4,
686 48218716 >> 4,
687 48985607 >> 4,
688 49755512 >> 4,
689 50528406 >> 4,
690 51304267 >> 4,
691 52083073 >> 4,
692 52864802 >> 4,
693 53649431 >> 4,
694 54436939 >> 4,
695 55227306 >> 4,
696 56020511 >> 4,
697 56816534 >> 4,
698 57615355 >> 4,
699 58416954 >> 4,
700 59221313 >> 4,
701 60028412 >> 4,
702 60838233 >> 4,
703 61650759 >> 4,
704 62465970 >> 4,
705 63283850 >> 4,
706 64104381 >> 4,
707 64927547 >> 4,
708 65753329 >> 4,
709 66581713 >> 4,
710 67412681 >> 4,
711 68246218 >> 4,
712 69082308 >> 4,
713 69920936 >> 4,
714 70762086 >> 4,
715 71605743 >> 4,
716 72451892 >> 4,
717 73300519 >> 4,
718 74151609 >> 4,
719 75005149 >> 4,
720 75861124 >> 4,
721 76719520 >> 4,
722 77580324 >> 4,
723 78443523 >> 4,
724 79309103 >> 4,
725 80177051 >> 4,
726 81047354 >> 4,
727 81920000 >> 4,
728 82794977 >> 4,
729 83672271 >> 4,
730 84551871 >> 4,
731 5339610,
732 5394871,
733 5450274,
734 5505818,
735 5561502,
736 5617327,
737 5673290,
738 5729391,
739 5785631,
740 5842007,
741 5898519,
742 5955168,
743 6011951,
744 6068869,
745 6125920,
746 6183105,
747 6240422,
748 6297871,
749 6355451,
750 6413162,
751 6471004,
752 6528974,
753 6587074,
754 6645302,
755 6703658,
756 6762141,
757 6820751,
758 6879487,
759 6938349,
760 6997336,
761 7056447,
762 7115683,
763 7175042,
764 7234524,
765 7294129,
766 7353855,
767 7413703,
768 7473672,
769 7533762,
770 7593972,
771 7654301,
772 7714750,
773 7775317,
774 7836002,
775 7896805,
776 7957725,
777 8018762,
778 8079916,
779 8141185,
780 8202570,
781 8264070,
782 8325685,
783 8387413,
784 8449256,
785 8511212,
786 8573281,
787 8635462,
788 8697756,
789 8760161,
790 8822678,
791 8885305,
792 8948043,
793 9010892,
794 9073850,
795 9136917,
796 9200094,
797 9263379,
798 9326772,
799 9390274,
800 9453882,
801 9517598,
802 9581421,
803 9645351,
804 9709386,
805 9773527,
806 9837774,
807 9902125,
808 9966582,
809 10031143,
810 10095807,
811 10160576,
812 10225448,
813 10290423,
814 10355500,
815 10420681,
816 10485963,
817 10551347,
818 10616832,
819 10682419,
820 10748106,
821 10813894,
822 10879782,
823 10945770,
824 11011857,
825 11078044,
826 11144330,
827 11210715,
828 11277198,
829 11343779,
830 11410458,
831 11477234,
832 11544108,
833 11611079,
834 11678147,
835 11745311,
836 11812571,
837 11879927,
838 11947378,
839 12014925,
840 12082567,
841 12150304,
842 12218135,
843 12286061,
844 12354081,
845 12422194,
846 12490401,
847 12558701,
848 12627094,
849 12695580,
850 12764158,
851 12832829,
852 12901592,
853 12970446,
854 13039392,
855 13108429,
856 13177557,
857 13246776,
858 13316085,
859 13385485,
860 13454975,
861 13524554,
862 13594224,
863 13663982,
864 13733830,
865 13803767,
866 13873792,
867 13943906,
868 14014108,
869 14084398,
870 14154776,
871 14225242,
872 14295794,
873 14366435,
874 14437162,
875 14507975,
876 14578876,
877 14649862,
878 14720935,
879 14792093,
880 14863337,
881 14934667,
882 15006082,
883 15077582,
884 15149167,
885 15220837,
886 15292591,
887 15364429,
888 15436351,
889 15508358,
890 15580448,
891 15652621,
892 15724878,
893 15797217,
894 15869640,
895 15942146,
896 16014734,
897 16087404,
898 16160156,
899 16232991,
900 16305907,
901 16378905,
902 16451984,
903 16525145,
904 16598386,
905 16671709,
906 16745112,
907 16818596,
908 16892160,
909 16965804,
910 17039528,
911 17113332,
912 17187216,
913 17261179,
914 17335222,
915 17409343,
916 17483544,
917 17557824,
918 17632182,
919 17706618,
920 17781133,
921 17855726,
922 17930397,
923 18005146,
924 18079973,
925 18154877,
926 18229858,
927 18304917,
928 18380052,
929 18455265,
930 18530554,
931 18605920,
932 18681362,
933 18756880,
934 18832475,
935 18908145,
936 18983891,
937 19059713,
938 19135610,
939 19211583,
940 19287630,
941 19363753,
942 19439951,
943 19516223,
944 19592571,
945 19668992,
946 19745488,
947 19822058,
948 19898702,
949 19975420,
950 20052211,
951 20129076,
952 20206015,
953 20283027,
954 20360112,
955 20437270,
956 20514501,
957 20591805,
958 20669181,
959 20746630,
960 20824151,
961 20901745,
962 20979410,
963 21057148,
964 21134957,
965 21212838,
966 21290791,
967 21368815,
968 21446910,
969 21525076,
970 21603314,
971 21681622,
972 21760001,
973 21838451,
974 21916971,
975 21995561,
976 22074222,
977 22152953,
978 22231754,
979 22310625,
980 22389566,
981 22468576,
982 22547656,
983 22626806,
984 22706024,
985 22785312,
986 22864669,
987 22944094,
988 23023589,
989 23103152,
990 23182783,
991 23262484,
992 23342252,
993 23422089,
994 23501993,
995 23581966,
996 23662007,
997 23742115,
998 23822291,
999 23902534,
1000 23982845,
1001 24063223,
1002 24143669,
1003 24224181,
1004 24304761,
1005 24385407,
1006 24466120,
1007 24546899,
1008 24627745,
1009 24708658,
1010 24789637,
1011 24870682,
1012 24951793,
1013 25032970,
1014 25114213,
1015 25195521,
1016 25276895,
1017 25358335,
1018 25439841,
1019 25521411,
1020 25603047,
1021 25684748,
1022 25766514,
1023 25848345,
1024 25930241,
1025 26012201,
1026 26094226,
1027 26176316,
1028 26258469,
1029 26340688,
1030 26422970,
1031 26505317,
1032 26587727,
1033 26670202,
1034 26752740,
1035 26835342,
1036 26918008,
1037 27000737,
1038 27083530,
1039 27166386,
1040 27249305,
1041 27332287,
1042 27415332,
1043 27498440,
1044 27581611,
1045 27664845,
1046 27748142,
1047 27831501,
1048 27914922,
1049 27998406,
1050 28081952,
1051 28165561,
1052 28249231,
1053 28332963,
1054 28416758,
1055 28500614,
1056 28584532,
1057 28668511,
1058 28752552,
1059 28836655,
1060 28920819,
1061 29005044,
1062 29089330,
1063 29173677,
1064 29258086,
1065 29342555,
1066 29427086,
1067 29511676,
1068 29596328,
1069 29681040,
1070 29765813,
1071 29850646,
1072 29935539,
1073 30020493,
1074 30105507,
1075 30190581,
1076 30275714,
1077 30360908,
1078 30446162,
1079 30531475,
1080 30616848,
1081 30702280,
1082 30787772,
1083 30873323,
1084 30958934,
1085 31044604,
1086 31130332,
1087 31216120,
1088 31301967,
1089 31387873,
1090 31473838,
1091 31559862,
1092 31645944,
1093 31732084,
1094 31818284,
1095 31904541,
1096 31990857,
1097 32077231,
1098 32163664,
1099 32250154,
1100 32336703,
1101 32423309,
1102 32509974,
1103 32596696,
1104 32683476,
1105 32770313,
1106 32857208,
1107 32944161,
1108 33031171,
1109 33118238,
1110 33205363,
1111 33292544,
1112 33379783,
1113 33467079,
1114 33554432,
1115 33641842,
1116 33729308,
1117 33816832,
1118 33904412,
1119 33992048,
1120 34079741,
1121 34167491,
1122 34255297,
1123 34343159,
1124 34431078,
1125 34519052,
1126 34607083,
1127 34695170,
1128 34783312,
1129 34871511,
1130 34959765,
1131 35048075,
1132 35136441,
1133 35224862,
1134 35313339,
1135 35401872,
1136 35490459,
1137 35579102,
1138 35667801,
1139 35756554,
1140 35845363,
1141 35934226,
1142 36023145,
1143 36112118,
1144 36201147,
1145 36290230,
1146 36379367,
1147 36468560,
1148 36557807,
1149 36647108,
1150 36736464,
1151 36825875,
1152 36915339,
1153 37004858,
1154 37094431,
1155 37184058,
1156 37273739,
1157 37363474,
1158 37453263,
1159 37543106,
1160 37633003,
1161 37722953,
1162 37812957,
1163 37903015,
1164 37993126,
1165 38083291,
1166 38173509,
1167 38263780,
1168 38354105,
1169 38444483,
1170 38534914,
1171 38625398,
1172 38715935,
1173 38806525,
1174 38897168,
1175 38987864,
1176 39078612,
1177 39169414,
1178 39260268,
1179 39351174,
1180 39442133,
1181 39533145,
1182 39624209,
1183 39715325,
1184 39806494,
1185 39897714,
1186 39988987,
1187 40080312,
1188 40171690,
1189 40263119,
1190 40354600,
1191 40446133,
1192 40537718,
1193 40629354,
1194 40721042,
1195 40812782,
1196 40904574,
1197 40996417,
1198 41088311,
1199 41180257,
1200 41272254,
1201 41364303,
1202 41456402,
1203 41548553,
1204 41640755,
1205 41733008,
1206 41825313,
1207 41917668,
1208 42010074,
1209 42102530,
1210 42195038,
1211 42287596,
1212 42380205,
1213 42472865,
1214 42565575,
1215 42658336,
1216 42751147,
1217 42844009,
1218 42936921,
1219 43029883,
1220 43122895,
1221 43215958,
1222 43309071,
1223 43402233,
1224 43495446,
1225 43588709,
1226 43682022,
1227 43775384,
1228 43868797,
1229 43962259,
1230 44055771,
1231 44149332,
1232 44242943,
1233 44336604,
1234 44430314,
1235 44524073,
1236 44617882,
1237 44711741,
1238 44805648,
1239 44899605,
1240 44993611,
1241 45087666,
1242 45181770,
1243 45275923,
1244 45370126,
1245 45464377,
1246 45558677,
1247 45653025,
1248 45747423,
1249 45841869,
1250 45936364,
1251 46030908,
1252 46125500,
1253 46220141,
1254 46314830,
1255 46409567,
1256 46504353,
1257 46599187,
1258 46694070,
1259 46789001,
1260 46883980,
1261 46979007,
1262 47074082,
1263 47169205,
1264 47264376,
1265 47359595,
1266 47454862,
1267 47550177,
1268 47645540,
1269 47740950,
1270 47836408,
1271 47931914,
1272 48027467,
1273 48123068,
1274 48218716,
1275 48314412,
1276 48410155,
1277 48505945,
1278 48601783,
1279 48697668,
1280 48793601,
1281 48889580,
1282 48985607,
1283 49081681,
1284 49177802,
1285 49273969,
1286 49370184,
1287 49466446,
1288 49562754,
1289 49659109,
1290 49755511,
1291 49851960,
1292 49948456,
1293 50044998,
1294 50141586,
1295 50238222,
1296 50334903,
1297 50431631,
1298 50528406,
1299 50625227,
1300 50722094,
1301 50819007,
1302 50915967,
1303 51012973,
1304 51110025,
1305 51207123,
1306 51304267,
1307 51401457,
1308 51498694,
1309 51595976,
1310 51693304,
1311 51790677,
1312 51888097,
1313 51985562,
1314 52083073,
1315 52180630,
1316 52278232,
1317 52375880,
1318 52473573,
1319 52571312,
1320 52669097,
1321 52766926,
1322 52864801,
1323 52962722,
1324 53060688,
1325 53158699,
1326 53256755,
1327 53354856,
1328 53453002,
1329 53551194,
1330 53649430,
1331 53747712,
1332 53846038,
1333 53944410,
1334 54042826,
1335 54141287,
1336 54239793,
1337 54338344,
1338 54436939,
1339 54535579,
1340 54634263,
1341 54732993,
1342 54831766,
1343 54930585,
1344 55029447,
1345 55128354,
1346 55227306,
1347 55326302,
1348 55425342,
1349 55524426,
1350 55623555,
1351 55722728,
1352 55821945,
1353 55921206,
1354 56020511,
1355 56119860,
1356 56219253,
1357 56318690,
1358 56418171,
1359 56517696,
1360 56617265,
1361 56716877,
1362 56816534,
1363 56916234,
1364 57015977,
1365 57115765,
1366 57215595,
1367 57315470,
1368 57415388,
1369 57515349,
1370 57615354,
1371 57715403,
1372 57815494,
1373 57915629,
1374 58015808,
1375 58116030,
1376 58216294,
1377 58316602,
1378 58416954,
1379 58517348,
1380 58617785,
1381 58718266,
1382 58818789,
1383 58919356,
1384 59019965,
1385 59120617,
1386 59221312,
1387 59322050,
1388 59422831,
1389 59523654,
1390 59624521,
1391 59725429,
1392 59826381,
1393 59927375,
1394 60028412,
1395 60129491,
1396 60230613,
1397 60331777,
1398 60432983,
1399 60534232,
1400 60635524,
1401 60736857,
1402 60838233,
1403 60939651,
1404 61041112,
1405 61142614,
1406 61244159,
1407 61345746,
1408 61447375,
1409 61549046,
1410 61650759,
1411 61752513,
1412 61854310,
1413 61956149,
1414 62058030,
1415 62159952,
1416 62261916,
1417 62363922,
1418 62465970,
1419 62568059,
1420 62670191,
1421 62772363,
1422 62874578,
1423 62976833,
1424 63079131,
1425 63181470,
1426 63283850,
1427 63386272,
1428 63488735,
1429 63591239,
1430 63693785,
1431 63796372,
1432 63899001,
1433 64001670,
1434 64104381,
1435 64207133,
1436 64309926,
1437 64412760,
1438 64515636,
1439 64618552,
1440 64721509,
1441 64824507,
1442 64927546,
1443 65030627,
1444 65133747,
1445 65236909,
1446 65340112,
1447 65443355,
1448 65546639,
1449 65649964,
1450 65753329,
1451 65856735,
1452 65960182,
1453 66063669,
1454 66167197,
1455 66270765,
1456 66374374,
1457 66478023,
1458 66581713,
1459 66685443,
1460 66789213,
1461 66893024,
1462 66996875,
1463 67100766,
1464 67204698,
1465 67308669,
1466 67412681,
1467 67516733,
1468 67620825,
1469 67724957,
1470 67829130,
1471 67933342,
1472 68037594,
1473 68141886,
1474 68246218,
1475 68350590,
1476 68455002,
1477 68559454,
1478 68663945,
1479 68768476,
1480 68873047,
1481 68977658,
1482 69082308,
1483 69186998,
1484 69291728,
1485 69396497,
1486 69501306,
1487 69606154,
1488 69711042,
1489 69815969,
1490 69920936,
1491 70025942,
1492 70130987,
1493 70236072,
1494 70341196,
1495 70446360,
1496 70551562,
1497 70656804,
1498 70762085,
1499 70867406,
1500 70972765,
1501 71078164,
1502 71183601,
1503 71289078,
1504 71394594,
1505 71500149,
1506 71605742,
1507 71711375,
1508 71817046,
1509 71922757,
1510 72028506,
1511 72134294,
1512 72240121,
1513 72345987,
1514 72451892,
1515 72557835,
1516 72663817,
1517 72769837,
1518 72875896,
1519 72981994,
1520 73088130,
1521 73194305,
1522 73300519,
1523 73406770,
1524 73513061,
1525 73619390,
1526 73725757,
1527 73832162,
1528 73938606,
1529 74045088,
1530 74151609,
1531 74258168,
1532 74364765,
1533 74471400,
1534 74578073,
1535 74684785,
1536 74791535,
1537 74898323,
1538 75005149,
1539 75112012,
1540 75218914,
1541 75325854,
1542 75432832,
1543 75539848,
1544 75646902,
1545 75753994,
1546 75861123,
1547 75968291,
1548 76075496,
1549 76182739,
1550 76290020,
1551 76397338,
1552 76504694,
1553 76612088,
1554 76719520,
1555 76826989,
1556 76934495,
1557 77042040,
1558 77149622,
1559 77257241,
1560 77364898,
1561 77472592,
1562 77580324,
1563 77688093,
1564 77795899,
1565 77903743,
1566 78011625,
1567 78119543,
1568 78227499,
1569 78335492,
1570 78443522,
1571 78551590,
1572 78659695,
1573 78767836,
1574 78876015,
1575 78984232,
1576 79092485,
1577 79200775,
1578 79309102,
1579 79417467,
1580 79525868,
1581 79634306,
1582 79742781,
1583 79851293,
1584 79959842,
1585 80068428,
1586 80177050,
1587 80285710,
1588 80394406,
1589 80503139,
1590 80611908,
1591 80720715,
1592 80829558,
1593 80938438,
1594 81047354,
1595 81156307,
1596 81265296,
1597 81374322,
1598 81483385,
1599 81592484,
1600 81701620,
1601 81810792,
1602 81920000,
1603 82029245,
1604 82138526,
1605 82247844,
1606 82357198,
1607 82466588,
1608 82576014,
1609 82685477,
1610 82794976,
1611 82904512,
1612 83014083,
1613 83123691,
1614 83233334,
1615 83343014,
1616 83452730,
1617 83562482,
1618 83672271,
1619 83782095,
1620 83891955,
1621 84001851,
1622 84111783,
1623 84221751,
1624 84331755,
1625 84441795,
1626 84551870};
1627
1628 static const WORD32 ixheaacd_esc_nb_offset[8] = {
1629 0, 131072, 262144, 393216, 524288, 655360, 786432, 917504};
1630
ixheaacd_arith_map_context(WORD32 pres_n,WORD32 prev_n,WORD8 * c_prev,WORD8 * c,WORD32 arith_reset_flag,WORD8 * ptr_scratch)1631 static void ixheaacd_arith_map_context(WORD32 pres_n, WORD32 prev_n,
1632 WORD8 *c_prev, WORD8 *c,
1633 WORD32 arith_reset_flag,
1634 WORD8 *ptr_scratch) {
1635 WORD32 i, k;
1636 FLOAT32 ratio;
1637 WORD8 *c_prev_tmp = ptr_scratch;
1638 WORD8 *c_tmp = ptr_scratch + 516;
1639
1640 if (arith_reset_flag) {
1641 for (i = 0; i < (1024 / 2) + 4; i++) {
1642 c_prev[i] = 0;
1643 c[i] = 0;
1644 }
1645
1646 } else {
1647 for (i = 2; i < (prev_n / 2 + 4); i++) {
1648 c_prev_tmp[i] = c_prev[i];
1649 c_tmp[i] = c[i];
1650 }
1651
1652 ratio = (FLOAT32)(prev_n) / (FLOAT32)(pres_n);
1653 for (i = 0; i < (pres_n / 2); i++) {
1654 k = (WORD32)((FLOAT32)(i)*ratio);
1655 c_prev[2 + i] = c_prev_tmp[2 + k];
1656 c[2 + i] = c_tmp[2 + k];
1657 }
1658 c_prev[(pres_n / 2) + 2] = c_prev_tmp[(prev_n / 2) + 2];
1659 c[(pres_n / 2) + 3] = c_tmp[(prev_n / 2) + 3];
1660 }
1661 }
1662
ixheaacd_copy_to_bitbuff(ia_bit_buf_struct * it_bit_buff_src,ia_bit_buf_struct * it_bit_buff_dst)1663 VOID ixheaacd_copy_to_bitbuff(ia_bit_buf_struct *it_bit_buff_src,
1664 ia_bit_buf_struct *it_bit_buff_dst) {
1665 *it_bit_buff_dst = *it_bit_buff_src;
1666 }
1667
ixheaacd_arith_get_context(WORD8 * c_prev,WORD8 * c_pres,WORD32 * c,WORD32 i)1668 static WORD32 ixheaacd_arith_get_context(WORD8 *c_prev, WORD8 *c_pres,
1669 WORD32 *c, WORD32 i) {
1670 WORD32 tmp = (WORD32)c_prev[1] << 12;
1671
1672 *c = *c >> 4;
1673 *c = *c + tmp;
1674 *c = (*c & 0xFFF0) + c_pres[-1];
1675
1676 if (i > 3) {
1677 if ((c_pres[-1] + c_pres[-2] + c_pres[-3]) < 5) {
1678 return (*c + 0x10000);
1679 }
1680 }
1681
1682 return (*c);
1683 }
1684
ixheaacd_arith_first_symbol(ia_bit_buf_struct * it_bit_buff,state_arith * s)1685 static WORD32 ixheaacd_arith_first_symbol(ia_bit_buf_struct *it_bit_buff,
1686 state_arith *s) {
1687 register WORD32 val;
1688
1689 WORD32 bit_count = 16;
1690
1691 val = 0;
1692 if (it_bit_buff->cnt_bits < 16) {
1693 WORD32 shift_value = 16 - it_bit_buff->cnt_bits;
1694 val = ixheaacd_read_bits_buf(it_bit_buff, it_bit_buff->cnt_bits);
1695 val <<= shift_value;
1696 } else {
1697 val = ixheaacd_read_bits_buf(it_bit_buff, 16);
1698 }
1699
1700 s->low = 0;
1701 s->high = 65535;
1702 s->value = val;
1703
1704 return bit_count;
1705 }
1706
ixheaacd_arith_get_pk(UWORD32 c)1707 static UWORD32 ixheaacd_arith_get_pk(UWORD32 c) {
1708 UWORD32 j;
1709 WORD32 i, i_min, i_max;
1710
1711 i_min = -1;
1712 i = i_min;
1713 i_max = 742 - 1;
1714 while ((i_max - i_min) > 1) {
1715 i = i_min + ((i_max - i_min) >> 1);
1716 j = ixheaacd_ari_hash_m[i];
1717 if (c < j)
1718 i_max = i;
1719 else if (c > j)
1720 i_min = i;
1721 else
1722 return (UWORD32)ixheaacd_ari_hash_m_1[i];
1723 }
1724
1725 return (ixheaacd_ari_lookup_m[i_max]);
1726 }
1727
ixheaacd_arith_decode(ia_bit_buf_struct * it_bit_buff,WORD32 bit_count,WORD32 * m,state_arith * s,UWORD16 const * cum_freq,WORD32 cfl)1728 static WORD32 ixheaacd_arith_decode(ia_bit_buf_struct *it_bit_buff,
1729 WORD32 bit_count, WORD32 *m, state_arith *s,
1730 UWORD16 const *cum_freq, WORD32 cfl) {
1731 register WORD32 symbol;
1732 register WORD32 low, high, range, value;
1733 register WORD32 cumulative;
1734 register UWORD16 const *p;
1735 register UWORD16 const *q;
1736
1737 low = s->low;
1738 high = s->high;
1739 value = s->value;
1740
1741 range = high - low + 1;
1742 cumulative = ((((WORD32)(value - low + 1)) << 14) - ((WORD32)1)) / ((WORD32)range);
1743
1744 if (it_bit_buff->cnt_bits == 0)
1745 if (cumulative <= 0) return -1;
1746
1747 p = cum_freq - 1;
1748
1749 do {
1750 q = p + (cfl >> 1);
1751
1752 if (*q > cumulative) {
1753 p = q;
1754 cfl++;
1755 }
1756 cfl >>= 1;
1757 } while (cfl > 1);
1758
1759 symbol = p - cum_freq + 1;
1760
1761 if (symbol) high = low + ((range * cum_freq[symbol - 1]) >> 14) - 1;
1762
1763 low += ((range * cum_freq[symbol]) >> 14);
1764
1765 for (;;) {
1766 if (high < 32768) {
1767 } else if (low >= 32768) {
1768 value -= 32768;
1769 low -= 32768;
1770 high -= 32768;
1771 } else if (low >= 16384 && high < 49152) {
1772 value -= 16384;
1773 low -= 16384;
1774 high -= 16384;
1775 } else
1776 break;
1777
1778 low += low;
1779 high += high + 1;
1780
1781 if (it_bit_buff->cnt_bits > 0)
1782 value = (value << 1) | ixheaacd_read_bits_buf(it_bit_buff, 1);
1783 else
1784 value = (value << 1);
1785
1786 bit_count++;
1787 }
1788
1789 s->low = low;
1790 s->high = high;
1791 s->value = value;
1792
1793 *m = symbol;
1794
1795 return bit_count;
1796 }
1797
ixheaacd_arth_decoding_level2(ia_bit_buf_struct * it_bit_buff,WORD8 * c_prev,WORD8 * c_pres,WORD32 n,WORD32 pres_n,WORD32 * quant)1798 WORD32 ixheaacd_arth_decoding_level2(ia_bit_buf_struct *it_bit_buff,
1799 WORD8 *c_prev, WORD8 *c_pres, WORD32 n,
1800 WORD32 pres_n, WORD32 *quant) {
1801 state_arith as;
1802 WORD32 a, b;
1803 WORD32 i, j, lev, pki, esc_nb;
1804 WORD32 m;
1805 WORD32 c = 0;
1806 struct ia_bit_buf_struct it_bit_buff_temp = {0};
1807 WORD32 bit_count = 0;
1808 WORD32 s1;
1809 WORD32 temp;
1810 WORD32 bit_count_5;
1811 ixheaacd_copy_to_bitbuff(it_bit_buff, &it_bit_buff_temp);
1812
1813 for (i = 0; i < pres_n; i++) {
1814 c_prev[i] = c_pres[i];
1815 c_pres[i] = 1;
1816 }
1817
1818 bit_count = ixheaacd_arith_first_symbol(&it_bit_buff_temp, &as);
1819
1820 c = (WORD32)c_prev[0] << 12;
1821 lev = 0;
1822
1823 for (i = 0; i < n; i++) {
1824 s1 = ixheaacd_arith_get_context(c_prev + i, c_pres + i, &c, i);
1825
1826 for (lev = esc_nb = 0;;) {
1827 pki = ixheaacd_arith_get_pk(s1 + ixheaacd_esc_nb_offset[esc_nb]);
1828 bit_count = ixheaacd_arith_decode(&it_bit_buff_temp, bit_count, &m, &as,
1829 ixheaacd_ari_cf_m[pki], 17);
1830 if (bit_count == -1) {
1831 return -1;
1832 }
1833
1834 if (m < ARITH_ESCAPE) {
1835 break;
1836 }
1837
1838 lev += 1;
1839 esc_nb = lev;
1840
1841 if (esc_nb > 7) {
1842 esc_nb = 7;
1843 }
1844 }
1845
1846 if (m == 0) {
1847 if (esc_nb > 0) break;
1848
1849 quant[2 * i + 0] = 0;
1850 quant[2 * i + 1] = 0;
1851 c_pres[i] = 1;
1852 } else {
1853 b = m >> 2;
1854 a = m & 0x3;
1855
1856 for (j = 0; j < lev; j++) {
1857 WORD32 lsbidx = (a == 0) ? 1 : ((b == 0) ? 0 : 2);
1858 bit_count = ixheaacd_arith_decode(&it_bit_buff_temp, bit_count, &m, &as,
1859 ixheaacd_ari_cf_r[lsbidx], 4);
1860 if (bit_count == -1) {
1861 return -1;
1862 }
1863 a = (a << 1) | (m & 1);
1864 b = (b << 1) | ((m >> 1) & 1);
1865 }
1866 if ((a > (8183)) || (b > (8183))) return -1;
1867 if ((a < (-8183)) || (b < (-8183))) return -1;
1868 quant[2 * i + 0] = a;
1869 quant[2 * i + 1] = b;
1870 temp = a + b + 1;
1871 c_pres[i] = (WORD8)temp;
1872 if (temp > 0xF) {
1873 c_pres[i] = 0xF;
1874 }
1875 }
1876 }
1877
1878 bit_count -= 16 - 2;
1879 if (bit_count > it_bit_buff->cnt_bits)
1880 return IA_ENHAACPLUS_DEC_EXE_NONFATAL_INSUFFICIENT_INPUT_BYTES;
1881
1882 if (bit_count > 0) {
1883 bit_count_5 = bit_count >> 5;
1884 bit_count_5 = (bit_count_5 * 32) + (bit_count & 31);
1885 ixheaacd_skip_bits_buf(it_bit_buff, bit_count_5);
1886 }
1887
1888 for (i = 0; i < pres_n; i++) {
1889 WORD32 temp0 = quant[0];
1890 WORD32 temp1 = quant[1];
1891 if (temp0) {
1892 m = ixheaacd_read_bits_buf(it_bit_buff, 1);
1893 bit_count++;
1894
1895 m = (m << 1) * temp0;
1896 temp0 = m - (temp0);
1897 }
1898
1899 if (temp1) {
1900 m = ixheaacd_read_bits_buf(it_bit_buff, 1);
1901 bit_count++;
1902
1903 m = (m << 1) * temp1;
1904 temp1 = m - (temp1);
1905 }
1906 if ((temp0 > (8183)) || (temp1 > (8183))) return -1;
1907 if ((temp0 < (-8183)) || (temp1 < (-8183))) return -1;
1908 *quant++ = temp0;
1909 *quant++ = temp1;
1910 }
1911 return 0;
1912 }
1913
ixheaacd_randomsign_fix(UWORD32 * seed)1914 static WORD32 ixheaacd_randomsign_fix(UWORD32 *seed) {
1915 WORD32 sign = 0;
1916 *seed = (UWORD32)(((UWORD64)(*seed) * (UWORD64)69069) + 5);
1917 if (((*seed) & 0x10000) > 0) {
1918 sign = -1;
1919 } else {
1920 sign = +1;
1921 }
1922 return sign;
1923 }
1924
ixheaacd_esc_iquant(WORD32 * q,WORD32 * coef,WORD32 noise_level,WORD32 with_noise,UWORD32 * seed_value,WORD32 length,WORD64 fac_fix)1925 static VOID ixheaacd_esc_iquant(WORD32 *q, WORD32 *coef, WORD32 noise_level,
1926 WORD32 with_noise, UWORD32 *seed_value,
1927 WORD32 length, WORD64 fac_fix) {
1928 WORD32 q1 = 0;
1929 WORD64 temp;
1930 WORD16 interp;
1931 WORD32 i;
1932 WORD16 flag;
1933
1934 for (i = 0; i < length; i++) {
1935 flag = 1;
1936
1937 if (with_noise) {
1938 if (q[i] == 0) {
1939 coef[i] = (ixheaacd_randomsign_fix(seed_value) * noise_level);
1940 temp = (fac_fix * coef[i]);
1941 coef[i] = (WORD32)(temp >> 25);
1942 continue;
1943 }
1944 }
1945
1946 if (q[i] < 0) {
1947 flag = -1;
1948 q[i] = -q[i];
1949 }
1950
1951 if (q[i] >= 8192) {
1952 q[i] = 8191;
1953 }
1954
1955 if (q[i] < 1024) {
1956 coef[i] = flag * ixheaacd_pow_table_Q13[q[i]];
1957 } else {
1958 q1 = (q[i]) >> 3;
1959
1960 interp = q[i] - (q1 << 3);
1961
1962 coef[i] = ixheaacd_pow_table_Q13[q1 + 1] - ixheaacd_pow_table_Q13[q1];
1963
1964 coef[i] = (WORD32)(coef[i] * (WORD32)interp);
1965
1966 coef[i] = coef[i] + (ixheaacd_pow_table_Q13[q1] << 3);
1967
1968 coef[i] = flag * (coef[i] << 1);
1969 }
1970 temp = ixheaacd_mult64_sat(fac_fix, (WORD64)coef[i]);
1971
1972 coef[i] = (WORD32)(temp >> 22);
1973 }
1974
1975 return;
1976 }
1977
ixheaacd_apply_scfs_and_nf(WORD32 noise_filling,ia_usac_data_struct * usac_data,WORD32 * quant,WORD32 noise_level,WORD32 noise_offset,UWORD8 max_sfb,WORD32 ch)1978 static void ixheaacd_apply_scfs_and_nf(WORD32 noise_filling,
1979 ia_usac_data_struct *usac_data,
1980 WORD32 *quant, WORD32 noise_level,
1981 WORD32 noise_offset, UWORD8 max_sfb,
1982 WORD32 ch) {
1983 WORD32 grp = 0, win_tot = 0, sfb = 0;
1984 WORD32 noise_filling_start_offset = 0;
1985 WORD32 fac = 0, length = 0;
1986 WORD64 fac_fix;
1987 WORD32 noise_level_fix = 0;
1988 ia_sfb_info_struct *pstr_sfb_info = usac_data->pstr_sfb_info[ch];
1989 WORD32 *coef = &usac_data->coef_fix[ch][0];
1990 WORD16 *factors = usac_data->factors[ch];
1991 UWORD32 *seed_value = &usac_data->seed_value[ch];
1992
1993 if (noise_filling) {
1994 noise_level_fix = ixheaacd_pow_14_3[noise_level];
1995 noise_filling_start_offset = (usac_data->ccfl == 768)
1996 ? (pstr_sfb_info->islong ? 120 : 15)
1997 : (pstr_sfb_info->islong ? 160 : 20);
1998 }
1999
2000 for (grp = 0; grp < pstr_sfb_info->num_groups; grp++) {
2001 WORD32 grp_win = 0;
2002 for (sfb = 0; sfb < (WORD32)max_sfb; sfb++) {
2003 WORD32 noise_filling_present = 0;
2004 WORD32 band_quantized_to_zero = 1;
2005
2006 WORD32 sfb_offset = win_tot * pstr_sfb_info->sfb_per_sbk;
2007 fac = (WORD32)(factors[sfb_offset + sfb] - SF_OFFSET);
2008
2009 if (noise_filling) {
2010 for (grp_win = 0; grp_win < pstr_sfb_info->group_len[grp]; grp_win++) {
2011 WORD32 win = grp_win + win_tot;
2012 WORD32 ixheaacd_drc_offset = win * pstr_sfb_info->bins_per_sbk;
2013 WORD32 start = (sfb == 0) ? 0 : pstr_sfb_info->ptr_sfb_tbl[sfb - 1];
2014 WORD32 idx = 0;
2015 for (idx = start; idx < pstr_sfb_info->ptr_sfb_tbl[sfb]; idx++) {
2016 if (quant[ixheaacd_drc_offset + idx] != 0) {
2017 band_quantized_to_zero = 0;
2018 break;
2019 }
2020 if (!band_quantized_to_zero) break;
2021 }
2022 }
2023 }
2024
2025 if (band_quantized_to_zero && noise_filling) fac += (noise_offset - 16);
2026 {
2027 WORD16 exp, frac;
2028
2029 exp = fac >> 2;
2030 frac = fac & 3;
2031
2032 if (exp > 31) exp = 31;
2033
2034 if (fac < 0)
2035 fac_fix = 0;
2036 else {
2037 fac_fix = (WORD64)((WORD64)ixheaacd_table_frac[3 + frac] *
2038 (WORD64)ixheaacd_table_exp[exp]);
2039 fac_fix >>= 15;
2040 }
2041 }
2042
2043 for (grp_win = 0; grp_win < pstr_sfb_info->group_len[grp]; grp_win++) {
2044 WORD32 win = win_tot + grp_win;
2045 WORD32 start = (sfb == 0) ? 0 : pstr_sfb_info->ptr_sfb_tbl[sfb - 1];
2046 WORD32 ixheaacd_drc_offset = win * pstr_sfb_info->bins_per_sbk;
2047
2048 if (noise_filling) {
2049 noise_filling_present =
2050 (start >= noise_filling_start_offset) & noise_filling;
2051 }
2052
2053 length = pstr_sfb_info->ptr_sfb_tbl[sfb] - start;
2054
2055 ixheaacd_esc_iquant(&quant[ixheaacd_drc_offset + start],
2056 &coef[ixheaacd_drc_offset + start], noise_level_fix,
2057 noise_filling_present, seed_value, length, fac_fix);
2058 }
2059 }
2060
2061 win_tot += pstr_sfb_info->group_len[grp];
2062 }
2063
2064 return;
2065 }
2066
ixheaacd_ac_spectral_data(ia_usac_data_struct * usac_data,WORD32 max_spec_coefficients,WORD32 noise_level,WORD32 noise_offset,WORD32 arith_pres_n,ia_bit_buf_struct * it_bit_buff,UWORD8 max_sfb,WORD32 arith_reset_flag,WORD32 noise_filling,WORD32 ch)2067 WORD32 ixheaacd_ac_spectral_data(ia_usac_data_struct *usac_data,
2068 WORD32 max_spec_coefficients,
2069 WORD32 noise_level, WORD32 noise_offset,
2070 WORD32 arith_pres_n,
2071 ia_bit_buf_struct *it_bit_buff, UWORD8 max_sfb,
2072 WORD32 arith_reset_flag, WORD32 noise_filling,
2073 WORD32 ch) {
2074 WORD32 i;
2075
2076 WORD32 *x_ac_dec = usac_data->x_ac_dec;
2077 WORD32 sbk;
2078 WORD32 err_code = 0;
2079
2080 const WORD32 max_win_len = usac_data->pstr_sfb_info[ch]->max_win_len;
2081 WORD8 *c_prev = &usac_data->c_prev[ch][0];
2082 WORD8 *c_pres = &usac_data->c[ch][0];
2083
2084 WORD8 *ptr_scratch_buf = (WORD8 *)&usac_data->scratch_buffer[0];
2085
2086 memset(x_ac_dec, 0, 1024 * sizeof(WORD32));
2087
2088 ixheaacd_arith_map_context(arith_pres_n, usac_data->arith_prev_n[ch], c_prev,
2089 c_pres, arith_reset_flag, ptr_scratch_buf);
2090
2091 usac_data->arith_prev_n[ch] = arith_pres_n;
2092
2093 if (max_spec_coefficients > 0) {
2094 for (sbk = 0; sbk < max_win_len; sbk++) {
2095 err_code = ixheaacd_arth_decoding_level2(
2096 it_bit_buff, c_prev + 2, c_pres + 2, max_spec_coefficients / 2,
2097 arith_pres_n / 2, &x_ac_dec[sbk * arith_pres_n]);
2098 if (err_code != 0) {
2099 return err_code;
2100 }
2101
2102 for (i = max_spec_coefficients / 2; i < arith_pres_n / 2; i++) {
2103 x_ac_dec[sbk * arith_pres_n + 2 * i + 0] = 0;
2104 x_ac_dec[sbk * arith_pres_n + 2 * i + 1] = 0;
2105 }
2106 }
2107 } else {
2108 for (i = 0; i < (arith_pres_n / 2); i++) {
2109 c_pres[i + 2] = 1;
2110 }
2111 }
2112
2113 ixheaacd_apply_scfs_and_nf(noise_filling, usac_data, x_ac_dec, noise_level,
2114 noise_offset, max_sfb, ch);
2115
2116 return 0;
2117 }
2118
ixheaacd_arith_data(ia_td_frame_data_struct * pstr_td_frame_data,WORD32 * x_ac_dec,ia_usac_data_struct * usac_data,ia_bit_buf_struct * it_bit_buff,WORD32 first_tcx_flag,WORD32 k)2119 WORD32 ixheaacd_arith_data(ia_td_frame_data_struct *pstr_td_frame_data,
2120 WORD32 *x_ac_dec, ia_usac_data_struct *usac_data,
2121 ia_bit_buf_struct *it_bit_buff,
2122 WORD32 first_tcx_flag, WORD32 k) {
2123 WORD32 *arith_prev_n = &usac_data->arith_prev_n[usac_data->present_chan];
2124 WORD32 arith_reset_flag =
2125 first_tcx_flag && pstr_td_frame_data->arith_reset_flag;
2126 WORD32 err_code = 0;
2127 WORD32 tcx_size = pstr_td_frame_data->tcx_lg[k];
2128 WORD8 *c_prev = usac_data->c_prev[usac_data->present_chan];
2129 WORD8 *c_pres = usac_data->c[usac_data->present_chan];
2130
2131 WORD8 *ptr_scratch_buf = (WORD8 *)&usac_data->scratch_buffer[0];
2132
2133 memset(x_ac_dec, 0, tcx_size * sizeof(WORD32));
2134
2135 ixheaacd_arith_map_context(tcx_size, *arith_prev_n, c_prev, c_pres,
2136 arith_reset_flag, ptr_scratch_buf);
2137
2138 *arith_prev_n = tcx_size;
2139
2140 err_code =
2141 ixheaacd_arth_decoding_level2(it_bit_buff, c_prev + 2, c_pres + 2,
2142 tcx_size / 2, tcx_size / 2, x_ac_dec);
2143
2144 return err_code;
2145 }
2146