xref: /aosp_15_r20/external/libxaac/encoder/ixheaace_bits_count.c (revision 15dc779a375ca8b5125643b829a8aa4b70d7f451)
1*15dc779aSAndroid Build Coastguard Worker /******************************************************************************
2*15dc779aSAndroid Build Coastguard Worker  *                                                                            *
3*15dc779aSAndroid Build Coastguard Worker  * Copyright (C) 2023 The Android Open Source Project
4*15dc779aSAndroid Build Coastguard Worker  *
5*15dc779aSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*15dc779aSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*15dc779aSAndroid Build Coastguard Worker  * You may obtain a copy of the License at:
8*15dc779aSAndroid Build Coastguard Worker  *
9*15dc779aSAndroid Build Coastguard Worker  * http://www.apache.org/licenses/LICENSE-2.0
10*15dc779aSAndroid Build Coastguard Worker  *
11*15dc779aSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*15dc779aSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*15dc779aSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*15dc779aSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*15dc779aSAndroid Build Coastguard Worker  * limitations under the License.
16*15dc779aSAndroid Build Coastguard Worker  *
17*15dc779aSAndroid Build Coastguard Worker  *****************************************************************************
18*15dc779aSAndroid Build Coastguard Worker  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*15dc779aSAndroid Build Coastguard Worker  */
20*15dc779aSAndroid Build Coastguard Worker #include <limits.h>
21*15dc779aSAndroid Build Coastguard Worker #include <stdlib.h>
22*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_type_def.h"
23*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_constants.h"
24*15dc779aSAndroid Build Coastguard Worker #include "impd_drc_common_enc.h"
25*15dc779aSAndroid Build Coastguard Worker #include "impd_drc_uni_drc.h"
26*15dc779aSAndroid Build Coastguard Worker #include "impd_drc_tables.h"
27*15dc779aSAndroid Build Coastguard Worker #include "impd_drc_api.h"
28*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_api.h"
29*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_aac_constants.h"
30*15dc779aSAndroid Build Coastguard Worker 
31*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops32.h"
32*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops16.h"
33*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops40.h"
34*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops.h"
35*15dc779aSAndroid Build Coastguard Worker 
36*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_bitbuffer.h"
37*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_psy_const.h"
38*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_tns.h"
39*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_tns_params.h"
40*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_rom.h"
41*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_bits_count.h"
42*15dc779aSAndroid Build Coastguard Worker 
43*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_common_rom.h"
44*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_common_utils.h"
45*15dc779aSAndroid Build Coastguard Worker 
ia_enhaacplus_enc_count1_2_3_4_5_6_7_8_9_10_11(const WORD16 * values,const WORD32 width,WORD32 * bitcnt,ixheaace_huffman_tables * pstr_huffman_tbl,WORD32 invalid_bitcnt)46*15dc779aSAndroid Build Coastguard Worker VOID ia_enhaacplus_enc_count1_2_3_4_5_6_7_8_9_10_11(const WORD16 *values, const WORD32 width,
47*15dc779aSAndroid Build Coastguard Worker                                                     WORD32 *bitcnt,
48*15dc779aSAndroid Build Coastguard Worker                                                     ixheaace_huffman_tables *pstr_huffman_tbl,
49*15dc779aSAndroid Build Coastguard Worker                                                     WORD32 invalid_bitcnt) {
50*15dc779aSAndroid Build Coastguard Worker   WORD32 i;
51*15dc779aSAndroid Build Coastguard Worker   WORD32 bits1_2, bits3_4, bits5_6, bits7_8, bits9_10, bit11, sc;
52*15dc779aSAndroid Build Coastguard Worker   WORD32 temp_0, temp_1, temp_2, temp_3;
53*15dc779aSAndroid Build Coastguard Worker   (VOID) invalid_bitcnt;
54*15dc779aSAndroid Build Coastguard Worker   bits1_2 = 0;
55*15dc779aSAndroid Build Coastguard Worker   bits3_4 = 0;
56*15dc779aSAndroid Build Coastguard Worker   bits5_6 = 0;
57*15dc779aSAndroid Build Coastguard Worker   bits7_8 = 0;
58*15dc779aSAndroid Build Coastguard Worker   bits9_10 = 0;
59*15dc779aSAndroid Build Coastguard Worker   bit11 = 0;
60*15dc779aSAndroid Build Coastguard Worker   sc = 0;
61*15dc779aSAndroid Build Coastguard Worker 
62*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < width; i += 4) {
63*15dc779aSAndroid Build Coastguard Worker     temp_0 = values[i + 0];
64*15dc779aSAndroid Build Coastguard Worker     temp_1 = values[i + 1];
65*15dc779aSAndroid Build Coastguard Worker     temp_2 = values[i + 2];
66*15dc779aSAndroid Build Coastguard Worker     temp_3 = values[i + 3];
67*15dc779aSAndroid Build Coastguard Worker 
68*15dc779aSAndroid Build Coastguard Worker     bits1_2 +=
69*15dc779aSAndroid Build Coastguard Worker         EXPAND(pstr_huffman_tbl->huff_ltab1_2[temp_0 + 1][temp_1 + 1][temp_2 + 1][temp_3 + 1]);
70*15dc779aSAndroid Build Coastguard Worker 
71*15dc779aSAndroid Build Coastguard Worker     bits5_6 += EXPAND(pstr_huffman_tbl->huff_ltab5_6[temp_0 + 4][temp_1 + 4]);
72*15dc779aSAndroid Build Coastguard Worker 
73*15dc779aSAndroid Build Coastguard Worker     bits5_6 += EXPAND(pstr_huffman_tbl->huff_ltab5_6[temp_2 + 4][temp_3 + 4]);
74*15dc779aSAndroid Build Coastguard Worker 
75*15dc779aSAndroid Build Coastguard Worker     sc += (temp_0 != 0) + (temp_1 != 0) + (temp_2 != 0) + (temp_3 != 0);
76*15dc779aSAndroid Build Coastguard Worker 
77*15dc779aSAndroid Build Coastguard Worker     temp_0 = abs32(temp_0);
78*15dc779aSAndroid Build Coastguard Worker     temp_1 = abs32(temp_1);
79*15dc779aSAndroid Build Coastguard Worker     temp_2 = abs32(temp_2);
80*15dc779aSAndroid Build Coastguard Worker     temp_3 = abs32(temp_3);
81*15dc779aSAndroid Build Coastguard Worker 
82*15dc779aSAndroid Build Coastguard Worker     bits3_4 += EXPAND(pstr_huffman_tbl->huff_ltab3_4[temp_0][temp_1][temp_2][temp_3]);
83*15dc779aSAndroid Build Coastguard Worker 
84*15dc779aSAndroid Build Coastguard Worker     bits7_8 += EXPAND(pstr_huffman_tbl->huff_ltab7_8[temp_0][temp_1]);
85*15dc779aSAndroid Build Coastguard Worker 
86*15dc779aSAndroid Build Coastguard Worker     bits7_8 += EXPAND(pstr_huffman_tbl->huff_ltab7_8[temp_2][temp_3]);
87*15dc779aSAndroid Build Coastguard Worker 
88*15dc779aSAndroid Build Coastguard Worker     bits9_10 += EXPAND(pstr_huffman_tbl->huff_ltab9_10[temp_0][temp_1]);
89*15dc779aSAndroid Build Coastguard Worker 
90*15dc779aSAndroid Build Coastguard Worker     bits9_10 += EXPAND(pstr_huffman_tbl->huff_ltab9_10[temp_2][temp_3]);
91*15dc779aSAndroid Build Coastguard Worker 
92*15dc779aSAndroid Build Coastguard Worker     bit11 += EXPAND(pstr_huffman_tbl->huff_ltab11[temp_0][temp_1]);
93*15dc779aSAndroid Build Coastguard Worker 
94*15dc779aSAndroid Build Coastguard Worker     bit11 += EXPAND(pstr_huffman_tbl->huff_ltab11[temp_2][temp_3]);
95*15dc779aSAndroid Build Coastguard Worker   }
96*15dc779aSAndroid Build Coastguard Worker 
97*15dc779aSAndroid Build Coastguard Worker   bitcnt[1] = HI_EXPLTAB(bits1_2);
98*15dc779aSAndroid Build Coastguard Worker 
99*15dc779aSAndroid Build Coastguard Worker   bitcnt[2] = LO_EXPLTAB(bits1_2);
100*15dc779aSAndroid Build Coastguard Worker 
101*15dc779aSAndroid Build Coastguard Worker   bitcnt[3] = HI_EXPLTAB(bits3_4) + sc;
102*15dc779aSAndroid Build Coastguard Worker 
103*15dc779aSAndroid Build Coastguard Worker   bitcnt[4] = LO_EXPLTAB(bits3_4) + sc;
104*15dc779aSAndroid Build Coastguard Worker 
105*15dc779aSAndroid Build Coastguard Worker   bitcnt[5] = HI_EXPLTAB(bits5_6);
106*15dc779aSAndroid Build Coastguard Worker 
107*15dc779aSAndroid Build Coastguard Worker   bitcnt[6] = LO_EXPLTAB(bits5_6);
108*15dc779aSAndroid Build Coastguard Worker 
109*15dc779aSAndroid Build Coastguard Worker   bitcnt[7] = HI_EXPLTAB(bits7_8) + sc;
110*15dc779aSAndroid Build Coastguard Worker 
111*15dc779aSAndroid Build Coastguard Worker   bitcnt[8] = LO_EXPLTAB(bits7_8) + sc;
112*15dc779aSAndroid Build Coastguard Worker 
113*15dc779aSAndroid Build Coastguard Worker   bitcnt[9] = HI_EXPLTAB(bits9_10) + sc;
114*15dc779aSAndroid Build Coastguard Worker 
115*15dc779aSAndroid Build Coastguard Worker   bitcnt[10] = LO_EXPLTAB(bits9_10) + sc;
116*15dc779aSAndroid Build Coastguard Worker 
117*15dc779aSAndroid Build Coastguard Worker   bitcnt[11] = bit11 + sc;
118*15dc779aSAndroid Build Coastguard Worker }
119*15dc779aSAndroid Build Coastguard Worker 
ia_enhaacplus_enc_count3_4_5_6_7_8_9_10_11(const WORD16 * values,const WORD32 width,WORD32 * bitcnt,ixheaace_huffman_tables * pstr_huffman_tbl,WORD32 invalid_bitcnt)120*15dc779aSAndroid Build Coastguard Worker static VOID ia_enhaacplus_enc_count3_4_5_6_7_8_9_10_11(const WORD16 *values, const WORD32 width,
121*15dc779aSAndroid Build Coastguard Worker                                                        WORD32 *bitcnt,
122*15dc779aSAndroid Build Coastguard Worker                                                        ixheaace_huffman_tables *pstr_huffman_tbl,
123*15dc779aSAndroid Build Coastguard Worker                                                        WORD32 invalid_bitcnt) {
124*15dc779aSAndroid Build Coastguard Worker   WORD32 i;
125*15dc779aSAndroid Build Coastguard Worker   WORD32 bits3_4, bits5_6, bits7_8, bits9_10, bit11, sc;
126*15dc779aSAndroid Build Coastguard Worker   WORD32 temp_0, temp_1, temp_2, temp_3;
127*15dc779aSAndroid Build Coastguard Worker 
128*15dc779aSAndroid Build Coastguard Worker   bits3_4 = 0;
129*15dc779aSAndroid Build Coastguard Worker   bits5_6 = 0;
130*15dc779aSAndroid Build Coastguard Worker   bits7_8 = 0;
131*15dc779aSAndroid Build Coastguard Worker   bits9_10 = 0;
132*15dc779aSAndroid Build Coastguard Worker   bit11 = 0;
133*15dc779aSAndroid Build Coastguard Worker   sc = 0;
134*15dc779aSAndroid Build Coastguard Worker 
135*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < width; i += 4) {
136*15dc779aSAndroid Build Coastguard Worker     temp_0 = values[i + 0];
137*15dc779aSAndroid Build Coastguard Worker     temp_1 = values[i + 1];
138*15dc779aSAndroid Build Coastguard Worker     temp_2 = values[i + 2];
139*15dc779aSAndroid Build Coastguard Worker     temp_3 = values[i + 3];
140*15dc779aSAndroid Build Coastguard Worker 
141*15dc779aSAndroid Build Coastguard Worker     bits5_6 += EXPAND(pstr_huffman_tbl->huff_ltab5_6[temp_0 + 4][temp_1 + 4]);
142*15dc779aSAndroid Build Coastguard Worker 
143*15dc779aSAndroid Build Coastguard Worker     bits5_6 += EXPAND(pstr_huffman_tbl->huff_ltab5_6[temp_2 + 4][temp_3 + 4]);
144*15dc779aSAndroid Build Coastguard Worker 
145*15dc779aSAndroid Build Coastguard Worker     temp_0 = abs32(temp_0);
146*15dc779aSAndroid Build Coastguard Worker     temp_1 = abs32(temp_1);
147*15dc779aSAndroid Build Coastguard Worker     temp_2 = abs32(temp_2);
148*15dc779aSAndroid Build Coastguard Worker     temp_3 = abs32(temp_3);
149*15dc779aSAndroid Build Coastguard Worker 
150*15dc779aSAndroid Build Coastguard Worker     bits3_4 += EXPAND(pstr_huffman_tbl->huff_ltab3_4[temp_0][temp_1][temp_2][temp_3]);
151*15dc779aSAndroid Build Coastguard Worker 
152*15dc779aSAndroid Build Coastguard Worker     bits7_8 += EXPAND(pstr_huffman_tbl->huff_ltab7_8[temp_0][temp_1]);
153*15dc779aSAndroid Build Coastguard Worker 
154*15dc779aSAndroid Build Coastguard Worker     bits7_8 += EXPAND(pstr_huffman_tbl->huff_ltab7_8[temp_2][temp_3]);
155*15dc779aSAndroid Build Coastguard Worker 
156*15dc779aSAndroid Build Coastguard Worker     bits9_10 += EXPAND(pstr_huffman_tbl->huff_ltab9_10[temp_0][temp_1]);
157*15dc779aSAndroid Build Coastguard Worker 
158*15dc779aSAndroid Build Coastguard Worker     bits9_10 += EXPAND(pstr_huffman_tbl->huff_ltab9_10[temp_2][temp_3]);
159*15dc779aSAndroid Build Coastguard Worker 
160*15dc779aSAndroid Build Coastguard Worker     bit11 += EXPAND(pstr_huffman_tbl->huff_ltab11[temp_0][temp_1]);
161*15dc779aSAndroid Build Coastguard Worker 
162*15dc779aSAndroid Build Coastguard Worker     bit11 += EXPAND(pstr_huffman_tbl->huff_ltab11[temp_2][temp_3]);
163*15dc779aSAndroid Build Coastguard Worker 
164*15dc779aSAndroid Build Coastguard Worker     sc += (temp_0 > 0) + (temp_1 > 0) + (temp_2 > 0) + (temp_3 > 0);
165*15dc779aSAndroid Build Coastguard Worker   }
166*15dc779aSAndroid Build Coastguard Worker 
167*15dc779aSAndroid Build Coastguard Worker   bitcnt[1] = invalid_bitcnt;
168*15dc779aSAndroid Build Coastguard Worker   bitcnt[2] = invalid_bitcnt;
169*15dc779aSAndroid Build Coastguard Worker 
170*15dc779aSAndroid Build Coastguard Worker   bitcnt[3] = HI_EXPLTAB(bits3_4) + sc;
171*15dc779aSAndroid Build Coastguard Worker 
172*15dc779aSAndroid Build Coastguard Worker   bitcnt[4] = LO_EXPLTAB(bits3_4) + sc;
173*15dc779aSAndroid Build Coastguard Worker 
174*15dc779aSAndroid Build Coastguard Worker   bitcnt[5] = HI_EXPLTAB(bits5_6);
175*15dc779aSAndroid Build Coastguard Worker 
176*15dc779aSAndroid Build Coastguard Worker   bitcnt[6] = LO_EXPLTAB(bits5_6);
177*15dc779aSAndroid Build Coastguard Worker 
178*15dc779aSAndroid Build Coastguard Worker   bitcnt[7] = HI_EXPLTAB(bits7_8) + sc;
179*15dc779aSAndroid Build Coastguard Worker 
180*15dc779aSAndroid Build Coastguard Worker   bitcnt[8] = LO_EXPLTAB(bits7_8) + sc;
181*15dc779aSAndroid Build Coastguard Worker 
182*15dc779aSAndroid Build Coastguard Worker   bitcnt[9] = HI_EXPLTAB(bits9_10) + sc;
183*15dc779aSAndroid Build Coastguard Worker 
184*15dc779aSAndroid Build Coastguard Worker   bitcnt[10] = LO_EXPLTAB(bits9_10) + sc;
185*15dc779aSAndroid Build Coastguard Worker 
186*15dc779aSAndroid Build Coastguard Worker   bitcnt[11] = bit11 + sc;
187*15dc779aSAndroid Build Coastguard Worker }
188*15dc779aSAndroid Build Coastguard Worker 
ia_enhaacplus_enc_count5_6_7_8_9_10_11(const WORD16 * values,const WORD32 width,WORD32 * bitcnt,ixheaace_huffman_tables * pstr_huffman_tbl,WORD32 invalid_bitcnt)189*15dc779aSAndroid Build Coastguard Worker static VOID ia_enhaacplus_enc_count5_6_7_8_9_10_11(const WORD16 *values, const WORD32 width,
190*15dc779aSAndroid Build Coastguard Worker                                                    WORD32 *bitcnt,
191*15dc779aSAndroid Build Coastguard Worker                                                    ixheaace_huffman_tables *pstr_huffman_tbl,
192*15dc779aSAndroid Build Coastguard Worker                                                    WORD32 invalid_bitcnt) {
193*15dc779aSAndroid Build Coastguard Worker   WORD32 i;
194*15dc779aSAndroid Build Coastguard Worker   WORD32 bits5_6, bits7_8, bits9_10, bit11, sc;
195*15dc779aSAndroid Build Coastguard Worker   WORD32 temp_0, temp_1;
196*15dc779aSAndroid Build Coastguard Worker 
197*15dc779aSAndroid Build Coastguard Worker   bits5_6 = 0;
198*15dc779aSAndroid Build Coastguard Worker   bits7_8 = 0;
199*15dc779aSAndroid Build Coastguard Worker   bits9_10 = 0;
200*15dc779aSAndroid Build Coastguard Worker   bit11 = 0;
201*15dc779aSAndroid Build Coastguard Worker   sc = 0;
202*15dc779aSAndroid Build Coastguard Worker 
203*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < width; i += 2) {
204*15dc779aSAndroid Build Coastguard Worker     temp_0 = values[i + 0];
205*15dc779aSAndroid Build Coastguard Worker     temp_1 = values[i + 1];
206*15dc779aSAndroid Build Coastguard Worker 
207*15dc779aSAndroid Build Coastguard Worker     bits5_6 += EXPAND(pstr_huffman_tbl->huff_ltab5_6[temp_0 + 4][temp_1 + 4]);
208*15dc779aSAndroid Build Coastguard Worker 
209*15dc779aSAndroid Build Coastguard Worker     temp_0 = abs32(temp_0);
210*15dc779aSAndroid Build Coastguard Worker     temp_1 = abs32(temp_1);
211*15dc779aSAndroid Build Coastguard Worker 
212*15dc779aSAndroid Build Coastguard Worker     bits7_8 += EXPAND(pstr_huffman_tbl->huff_ltab7_8[temp_0][temp_1]);
213*15dc779aSAndroid Build Coastguard Worker 
214*15dc779aSAndroid Build Coastguard Worker     bits9_10 += EXPAND(pstr_huffman_tbl->huff_ltab9_10[temp_0][temp_1]);
215*15dc779aSAndroid Build Coastguard Worker 
216*15dc779aSAndroid Build Coastguard Worker     bit11 += EXPAND(pstr_huffman_tbl->huff_ltab11[temp_0][temp_1]);
217*15dc779aSAndroid Build Coastguard Worker 
218*15dc779aSAndroid Build Coastguard Worker     sc += (temp_0 > 0) + (temp_1 > 0);
219*15dc779aSAndroid Build Coastguard Worker   }
220*15dc779aSAndroid Build Coastguard Worker 
221*15dc779aSAndroid Build Coastguard Worker   bitcnt[1] = invalid_bitcnt;
222*15dc779aSAndroid Build Coastguard Worker   bitcnt[2] = invalid_bitcnt;
223*15dc779aSAndroid Build Coastguard Worker   bitcnt[3] = invalid_bitcnt;
224*15dc779aSAndroid Build Coastguard Worker   bitcnt[4] = invalid_bitcnt;
225*15dc779aSAndroid Build Coastguard Worker 
226*15dc779aSAndroid Build Coastguard Worker   bitcnt[5] = HI_EXPLTAB(bits5_6);
227*15dc779aSAndroid Build Coastguard Worker 
228*15dc779aSAndroid Build Coastguard Worker   bitcnt[6] = LO_EXPLTAB(bits5_6);
229*15dc779aSAndroid Build Coastguard Worker 
230*15dc779aSAndroid Build Coastguard Worker   bitcnt[7] = HI_EXPLTAB(bits7_8) + sc;
231*15dc779aSAndroid Build Coastguard Worker 
232*15dc779aSAndroid Build Coastguard Worker   bitcnt[8] = LO_EXPLTAB(bits7_8) + sc;
233*15dc779aSAndroid Build Coastguard Worker 
234*15dc779aSAndroid Build Coastguard Worker   bitcnt[9] = HI_EXPLTAB(bits9_10) + sc;
235*15dc779aSAndroid Build Coastguard Worker 
236*15dc779aSAndroid Build Coastguard Worker   bitcnt[10] = LO_EXPLTAB(bits9_10) + sc;
237*15dc779aSAndroid Build Coastguard Worker 
238*15dc779aSAndroid Build Coastguard Worker   bitcnt[11] = bit11 + sc;
239*15dc779aSAndroid Build Coastguard Worker }
240*15dc779aSAndroid Build Coastguard Worker 
ia_enhaacplus_enc_count7_8_9_10_11(const WORD16 * values,const WORD32 width,WORD32 * bitcnt,ixheaace_huffman_tables * pstr_huffman_tbl,WORD32 invalid_bitcnt)241*15dc779aSAndroid Build Coastguard Worker static VOID ia_enhaacplus_enc_count7_8_9_10_11(const WORD16 *values, const WORD32 width,
242*15dc779aSAndroid Build Coastguard Worker                                                WORD32 *bitcnt,
243*15dc779aSAndroid Build Coastguard Worker                                                ixheaace_huffman_tables *pstr_huffman_tbl,
244*15dc779aSAndroid Build Coastguard Worker                                                WORD32 invalid_bitcnt) {
245*15dc779aSAndroid Build Coastguard Worker   WORD32 i;
246*15dc779aSAndroid Build Coastguard Worker   WORD32 bits7_8, bits9_10, bit11, sc;
247*15dc779aSAndroid Build Coastguard Worker   WORD32 temp_0, temp_1;
248*15dc779aSAndroid Build Coastguard Worker 
249*15dc779aSAndroid Build Coastguard Worker   bits7_8 = 0;
250*15dc779aSAndroid Build Coastguard Worker   bits9_10 = 0;
251*15dc779aSAndroid Build Coastguard Worker   bit11 = 0;
252*15dc779aSAndroid Build Coastguard Worker   sc = 0;
253*15dc779aSAndroid Build Coastguard Worker 
254*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < width; i += 2) {
255*15dc779aSAndroid Build Coastguard Worker     temp_0 = abs32(values[i + 0]);
256*15dc779aSAndroid Build Coastguard Worker     temp_1 = abs32(values[i + 1]);
257*15dc779aSAndroid Build Coastguard Worker 
258*15dc779aSAndroid Build Coastguard Worker     bits7_8 += EXPAND(pstr_huffman_tbl->huff_ltab7_8[temp_0][temp_1]);
259*15dc779aSAndroid Build Coastguard Worker 
260*15dc779aSAndroid Build Coastguard Worker     bits9_10 += EXPAND(pstr_huffman_tbl->huff_ltab9_10[temp_0][temp_1]);
261*15dc779aSAndroid Build Coastguard Worker 
262*15dc779aSAndroid Build Coastguard Worker     bit11 += EXPAND(pstr_huffman_tbl->huff_ltab11[temp_0][temp_1]);
263*15dc779aSAndroid Build Coastguard Worker 
264*15dc779aSAndroid Build Coastguard Worker     sc += (temp_0 > 0) + (temp_1 > 0);
265*15dc779aSAndroid Build Coastguard Worker   }
266*15dc779aSAndroid Build Coastguard Worker 
267*15dc779aSAndroid Build Coastguard Worker   bitcnt[1] = invalid_bitcnt;
268*15dc779aSAndroid Build Coastguard Worker   bitcnt[2] = invalid_bitcnt;
269*15dc779aSAndroid Build Coastguard Worker   bitcnt[3] = invalid_bitcnt;
270*15dc779aSAndroid Build Coastguard Worker   bitcnt[4] = invalid_bitcnt;
271*15dc779aSAndroid Build Coastguard Worker   bitcnt[5] = invalid_bitcnt;
272*15dc779aSAndroid Build Coastguard Worker   bitcnt[6] = invalid_bitcnt;
273*15dc779aSAndroid Build Coastguard Worker 
274*15dc779aSAndroid Build Coastguard Worker   bitcnt[7] = HI_EXPLTAB(bits7_8) + sc;
275*15dc779aSAndroid Build Coastguard Worker 
276*15dc779aSAndroid Build Coastguard Worker   bitcnt[8] = LO_EXPLTAB(bits7_8) + sc;
277*15dc779aSAndroid Build Coastguard Worker 
278*15dc779aSAndroid Build Coastguard Worker   bitcnt[9] = HI_EXPLTAB(bits9_10) + sc;
279*15dc779aSAndroid Build Coastguard Worker 
280*15dc779aSAndroid Build Coastguard Worker   bitcnt[10] = LO_EXPLTAB(bits9_10) + sc;
281*15dc779aSAndroid Build Coastguard Worker 
282*15dc779aSAndroid Build Coastguard Worker   bitcnt[11] = bit11 + sc;
283*15dc779aSAndroid Build Coastguard Worker }
284*15dc779aSAndroid Build Coastguard Worker 
ia_enhaacplus_enc_count9_10_11(const WORD16 * values,const WORD32 width,WORD32 * bitcnt,ixheaace_huffman_tables * pstr_huffman_tbl,WORD32 invalid_bitcnt)285*15dc779aSAndroid Build Coastguard Worker static VOID ia_enhaacplus_enc_count9_10_11(const WORD16 *values, const WORD32 width,
286*15dc779aSAndroid Build Coastguard Worker                                            WORD32 *bitcnt,
287*15dc779aSAndroid Build Coastguard Worker                                            ixheaace_huffman_tables *pstr_huffman_tbl,
288*15dc779aSAndroid Build Coastguard Worker                                            WORD32 invalid_bitcnt) {
289*15dc779aSAndroid Build Coastguard Worker   WORD32 i;
290*15dc779aSAndroid Build Coastguard Worker   WORD32 bits9_10, bit11, sc;
291*15dc779aSAndroid Build Coastguard Worker   WORD32 temp_0, temp_1;
292*15dc779aSAndroid Build Coastguard Worker 
293*15dc779aSAndroid Build Coastguard Worker   bits9_10 = 0;
294*15dc779aSAndroid Build Coastguard Worker   bit11 = 0;
295*15dc779aSAndroid Build Coastguard Worker   sc = 0;
296*15dc779aSAndroid Build Coastguard Worker 
297*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < width; i += 2) {
298*15dc779aSAndroid Build Coastguard Worker     temp_0 = abs32(values[i + 0]);
299*15dc779aSAndroid Build Coastguard Worker     temp_1 = abs32(values[i + 1]);
300*15dc779aSAndroid Build Coastguard Worker 
301*15dc779aSAndroid Build Coastguard Worker     bits9_10 += EXPAND(pstr_huffman_tbl->huff_ltab9_10[temp_0][temp_1]);
302*15dc779aSAndroid Build Coastguard Worker 
303*15dc779aSAndroid Build Coastguard Worker     bit11 += EXPAND(pstr_huffman_tbl->huff_ltab11[temp_0][temp_1]);
304*15dc779aSAndroid Build Coastguard Worker 
305*15dc779aSAndroid Build Coastguard Worker     sc += (temp_0 > 0) + (temp_1 > 0);
306*15dc779aSAndroid Build Coastguard Worker   }
307*15dc779aSAndroid Build Coastguard Worker 
308*15dc779aSAndroid Build Coastguard Worker   bitcnt[1] = invalid_bitcnt;
309*15dc779aSAndroid Build Coastguard Worker   bitcnt[2] = invalid_bitcnt;
310*15dc779aSAndroid Build Coastguard Worker   bitcnt[3] = invalid_bitcnt;
311*15dc779aSAndroid Build Coastguard Worker   bitcnt[4] = invalid_bitcnt;
312*15dc779aSAndroid Build Coastguard Worker   bitcnt[5] = invalid_bitcnt;
313*15dc779aSAndroid Build Coastguard Worker   bitcnt[6] = invalid_bitcnt;
314*15dc779aSAndroid Build Coastguard Worker   bitcnt[7] = invalid_bitcnt;
315*15dc779aSAndroid Build Coastguard Worker   bitcnt[8] = invalid_bitcnt;
316*15dc779aSAndroid Build Coastguard Worker 
317*15dc779aSAndroid Build Coastguard Worker   bitcnt[9] = HI_EXPLTAB(bits9_10) + sc;
318*15dc779aSAndroid Build Coastguard Worker 
319*15dc779aSAndroid Build Coastguard Worker   bitcnt[10] = LO_EXPLTAB(bits9_10) + sc;
320*15dc779aSAndroid Build Coastguard Worker 
321*15dc779aSAndroid Build Coastguard Worker   bitcnt[11] = bit11 + sc;
322*15dc779aSAndroid Build Coastguard Worker }
323*15dc779aSAndroid Build Coastguard Worker 
ia_enhaacplus_enc_count11(const WORD16 * values,const WORD32 width,WORD32 * bitcnt,ixheaace_huffman_tables * pstr_huffman_tbl,WORD32 invalid_bitcnt)324*15dc779aSAndroid Build Coastguard Worker static VOID ia_enhaacplus_enc_count11(const WORD16 *values, const WORD32 width, WORD32 *bitcnt,
325*15dc779aSAndroid Build Coastguard Worker                                       ixheaace_huffman_tables *pstr_huffman_tbl,
326*15dc779aSAndroid Build Coastguard Worker                                       WORD32 invalid_bitcnt) {
327*15dc779aSAndroid Build Coastguard Worker   WORD32 i;
328*15dc779aSAndroid Build Coastguard Worker   WORD32 bit11, sc;
329*15dc779aSAndroid Build Coastguard Worker   WORD32 temp_0, temp_1;
330*15dc779aSAndroid Build Coastguard Worker 
331*15dc779aSAndroid Build Coastguard Worker   bit11 = 0;
332*15dc779aSAndroid Build Coastguard Worker   sc = 0;
333*15dc779aSAndroid Build Coastguard Worker 
334*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < width; i += 2) {
335*15dc779aSAndroid Build Coastguard Worker     temp_0 = abs32(values[i + 0]);
336*15dc779aSAndroid Build Coastguard Worker     temp_1 = abs32(values[i + 1]);
337*15dc779aSAndroid Build Coastguard Worker 
338*15dc779aSAndroid Build Coastguard Worker     bit11 += EXPAND(pstr_huffman_tbl->huff_ltab11[temp_0][temp_1]);
339*15dc779aSAndroid Build Coastguard Worker 
340*15dc779aSAndroid Build Coastguard Worker     sc += (temp_0 > 0) + (temp_1 > 0);
341*15dc779aSAndroid Build Coastguard Worker   }
342*15dc779aSAndroid Build Coastguard Worker 
343*15dc779aSAndroid Build Coastguard Worker   bitcnt[1] = invalid_bitcnt;
344*15dc779aSAndroid Build Coastguard Worker   bitcnt[2] = invalid_bitcnt;
345*15dc779aSAndroid Build Coastguard Worker   bitcnt[3] = invalid_bitcnt;
346*15dc779aSAndroid Build Coastguard Worker   bitcnt[4] = invalid_bitcnt;
347*15dc779aSAndroid Build Coastguard Worker   bitcnt[5] = invalid_bitcnt;
348*15dc779aSAndroid Build Coastguard Worker   bitcnt[6] = invalid_bitcnt;
349*15dc779aSAndroid Build Coastguard Worker   bitcnt[7] = invalid_bitcnt;
350*15dc779aSAndroid Build Coastguard Worker   bitcnt[8] = invalid_bitcnt;
351*15dc779aSAndroid Build Coastguard Worker   bitcnt[9] = invalid_bitcnt;
352*15dc779aSAndroid Build Coastguard Worker   bitcnt[10] = invalid_bitcnt;
353*15dc779aSAndroid Build Coastguard Worker 
354*15dc779aSAndroid Build Coastguard Worker   bitcnt[11] = bit11 + sc;
355*15dc779aSAndroid Build Coastguard Worker }
356*15dc779aSAndroid Build Coastguard Worker 
ia_enhaacplus_enc_count_esc(const WORD16 * values,const WORD32 width,WORD32 * bitcnt,ixheaace_huffman_tables * pstr_huffman_tbl,WORD32 invalid_bitcnt)357*15dc779aSAndroid Build Coastguard Worker static VOID ia_enhaacplus_enc_count_esc(const WORD16 *values, const WORD32 width, WORD32 *bitcnt,
358*15dc779aSAndroid Build Coastguard Worker                                         ixheaace_huffman_tables *pstr_huffman_tbl,
359*15dc779aSAndroid Build Coastguard Worker                                         WORD32 invalid_bitcnt) {
360*15dc779aSAndroid Build Coastguard Worker   WORD32 i;
361*15dc779aSAndroid Build Coastguard Worker   WORD32 bit11, ec, sc;
362*15dc779aSAndroid Build Coastguard Worker   WORD32 temp_0, temp_1, t00, t01;
363*15dc779aSAndroid Build Coastguard Worker 
364*15dc779aSAndroid Build Coastguard Worker   bit11 = 0;
365*15dc779aSAndroid Build Coastguard Worker   sc = 0;
366*15dc779aSAndroid Build Coastguard Worker   ec = 0;
367*15dc779aSAndroid Build Coastguard Worker 
368*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < width; i += 2) {
369*15dc779aSAndroid Build Coastguard Worker     temp_0 = abs32(values[i + 0]);
370*15dc779aSAndroid Build Coastguard Worker     temp_1 = abs32(values[i + 1]);
371*15dc779aSAndroid Build Coastguard Worker 
372*15dc779aSAndroid Build Coastguard Worker     sc += (temp_0 > 0) + (temp_1 > 0);
373*15dc779aSAndroid Build Coastguard Worker     t00 = MIN(temp_0, 16);
374*15dc779aSAndroid Build Coastguard Worker     t01 = MIN(temp_1, 16);
375*15dc779aSAndroid Build Coastguard Worker 
376*15dc779aSAndroid Build Coastguard Worker     bit11 += EXPAND(pstr_huffman_tbl->huff_ltab11[t00][t01]);
377*15dc779aSAndroid Build Coastguard Worker 
378*15dc779aSAndroid Build Coastguard Worker     if (temp_0 >= 16) {
379*15dc779aSAndroid Build Coastguard Worker       ec += 5;
380*15dc779aSAndroid Build Coastguard Worker 
381*15dc779aSAndroid Build Coastguard Worker       while ((temp_0 >>= 1) >= 16) {
382*15dc779aSAndroid Build Coastguard Worker         ec += 2;
383*15dc779aSAndroid Build Coastguard Worker       }
384*15dc779aSAndroid Build Coastguard Worker     }
385*15dc779aSAndroid Build Coastguard Worker 
386*15dc779aSAndroid Build Coastguard Worker     if (temp_1 >= 16) {
387*15dc779aSAndroid Build Coastguard Worker       ec += 5;
388*15dc779aSAndroid Build Coastguard Worker 
389*15dc779aSAndroid Build Coastguard Worker       while ((temp_1 >>= 1) >= 16) {
390*15dc779aSAndroid Build Coastguard Worker         ec += 2;
391*15dc779aSAndroid Build Coastguard Worker       }
392*15dc779aSAndroid Build Coastguard Worker     }
393*15dc779aSAndroid Build Coastguard Worker   }
394*15dc779aSAndroid Build Coastguard Worker 
395*15dc779aSAndroid Build Coastguard Worker   bitcnt[1] = invalid_bitcnt;
396*15dc779aSAndroid Build Coastguard Worker   bitcnt[2] = invalid_bitcnt;
397*15dc779aSAndroid Build Coastguard Worker   bitcnt[3] = invalid_bitcnt;
398*15dc779aSAndroid Build Coastguard Worker   bitcnt[4] = invalid_bitcnt;
399*15dc779aSAndroid Build Coastguard Worker   bitcnt[5] = invalid_bitcnt;
400*15dc779aSAndroid Build Coastguard Worker   bitcnt[6] = invalid_bitcnt;
401*15dc779aSAndroid Build Coastguard Worker   bitcnt[7] = invalid_bitcnt;
402*15dc779aSAndroid Build Coastguard Worker   bitcnt[8] = invalid_bitcnt;
403*15dc779aSAndroid Build Coastguard Worker   bitcnt[9] = invalid_bitcnt;
404*15dc779aSAndroid Build Coastguard Worker   bitcnt[10] = invalid_bitcnt;
405*15dc779aSAndroid Build Coastguard Worker 
406*15dc779aSAndroid Build Coastguard Worker   bitcnt[11] = bit11 + sc + ec;
407*15dc779aSAndroid Build Coastguard Worker }
408*15dc779aSAndroid Build Coastguard Worker 
409*15dc779aSAndroid Build Coastguard Worker typedef VOID (*COUNT_FUNCTION)(const WORD16 *values, const WORD32 width, WORD32 *bitcnt,
410*15dc779aSAndroid Build Coastguard Worker                                ixheaace_huffman_tables *pstr_huffman_tbl, WORD32 invalid_bitcnt);
411*15dc779aSAndroid Build Coastguard Worker 
412*15dc779aSAndroid Build Coastguard Worker static COUNT_FUNCTION ia_enhaacplus_enc_count_func_tab[CODE_BCK_ESC_LAV + 1] = {
413*15dc779aSAndroid Build Coastguard Worker 
414*15dc779aSAndroid Build Coastguard Worker     ia_enhaacplus_enc_count1_2_3_4_5_6_7_8_9_10_11, /* 0  */
415*15dc779aSAndroid Build Coastguard Worker     ia_enhaacplus_enc_count1_2_3_4_5_6_7_8_9_10_11, /* 1  */
416*15dc779aSAndroid Build Coastguard Worker     ia_enhaacplus_enc_count3_4_5_6_7_8_9_10_11,     /* 2  */
417*15dc779aSAndroid Build Coastguard Worker     ia_enhaacplus_enc_count5_6_7_8_9_10_11,         /* 3  */
418*15dc779aSAndroid Build Coastguard Worker     ia_enhaacplus_enc_count5_6_7_8_9_10_11,         /* 4  */
419*15dc779aSAndroid Build Coastguard Worker     ia_enhaacplus_enc_count7_8_9_10_11,             /* 5  */
420*15dc779aSAndroid Build Coastguard Worker     ia_enhaacplus_enc_count7_8_9_10_11,             /* 6  */
421*15dc779aSAndroid Build Coastguard Worker     ia_enhaacplus_enc_count7_8_9_10_11,             /* 7  */
422*15dc779aSAndroid Build Coastguard Worker     ia_enhaacplus_enc_count9_10_11,                 /* 8  */
423*15dc779aSAndroid Build Coastguard Worker     ia_enhaacplus_enc_count9_10_11,                 /* 9  */
424*15dc779aSAndroid Build Coastguard Worker     ia_enhaacplus_enc_count9_10_11,                 /* 10 */
425*15dc779aSAndroid Build Coastguard Worker     ia_enhaacplus_enc_count9_10_11,                 /* 11 */
426*15dc779aSAndroid Build Coastguard Worker     ia_enhaacplus_enc_count9_10_11,                 /* 12 */
427*15dc779aSAndroid Build Coastguard Worker     ia_enhaacplus_enc_count11,                      /* 13 */
428*15dc779aSAndroid Build Coastguard Worker     ia_enhaacplus_enc_count11,                      /* 14 */
429*15dc779aSAndroid Build Coastguard Worker     ia_enhaacplus_enc_count11,                      /* 15 */
430*15dc779aSAndroid Build Coastguard Worker     ia_enhaacplus_enc_count_esc                     /* 16 */
431*15dc779aSAndroid Build Coastguard Worker };
432*15dc779aSAndroid Build Coastguard Worker 
ia_enhaacplus_enc_bitcount(const WORD16 * ptr_values,const WORD32 width,WORD32 max_val,WORD32 * bit_cnt,ixheaace_huffman_tables * pstr_huffman_tbl,WORD32 aot)433*15dc779aSAndroid Build Coastguard Worker VOID ia_enhaacplus_enc_bitcount(const WORD16 *ptr_values, const WORD32 width, WORD32 max_val,
434*15dc779aSAndroid Build Coastguard Worker                                 WORD32 *bit_cnt, ixheaace_huffman_tables *pstr_huffman_tbl,
435*15dc779aSAndroid Build Coastguard Worker                                 WORD32 aot) {
436*15dc779aSAndroid Build Coastguard Worker   WORD32 invalid_bitcnt;
437*15dc779aSAndroid Build Coastguard Worker 
438*15dc779aSAndroid Build Coastguard Worker   if (max_val == 0) {
439*15dc779aSAndroid Build Coastguard Worker     *bit_cnt = 0;
440*15dc779aSAndroid Build Coastguard Worker   } else {
441*15dc779aSAndroid Build Coastguard Worker     switch (aot) {
442*15dc779aSAndroid Build Coastguard Worker       case AOT_AAC_LC:
443*15dc779aSAndroid Build Coastguard Worker       case AOT_SBR:
444*15dc779aSAndroid Build Coastguard Worker       case AOT_PS:
445*15dc779aSAndroid Build Coastguard Worker         *bit_cnt = INVALID_BITCOUNT_LC;
446*15dc779aSAndroid Build Coastguard Worker         break;
447*15dc779aSAndroid Build Coastguard Worker 
448*15dc779aSAndroid Build Coastguard Worker       case AOT_AAC_LD:
449*15dc779aSAndroid Build Coastguard Worker       case AOT_AAC_ELD:
450*15dc779aSAndroid Build Coastguard Worker         *bit_cnt = INVALID_BITCOUNT_LD;
451*15dc779aSAndroid Build Coastguard Worker         break;
452*15dc779aSAndroid Build Coastguard Worker     }
453*15dc779aSAndroid Build Coastguard Worker   }
454*15dc779aSAndroid Build Coastguard Worker   invalid_bitcnt = *bit_cnt;
455*15dc779aSAndroid Build Coastguard Worker   max_val = MIN(max_val, CODE_BCK_ESC_LAV);
456*15dc779aSAndroid Build Coastguard Worker 
457*15dc779aSAndroid Build Coastguard Worker   ia_enhaacplus_enc_count_func_tab[max_val](ptr_values, width, bit_cnt, pstr_huffman_tbl,
458*15dc779aSAndroid Build Coastguard Worker                                             invalid_bitcnt);
459*15dc779aSAndroid Build Coastguard Worker }
460*15dc779aSAndroid Build Coastguard Worker 
ia_enhaacplus_enc_code_values(WORD16 * ptr_values,WORD32 width,WORD32 code_book,ixheaace_bit_buf_handle pstr_bitstream,ixheaace_huffman_tables * pstr_huffman_tbl)461*15dc779aSAndroid Build Coastguard Worker VOID ia_enhaacplus_enc_code_values(WORD16 *ptr_values, WORD32 width, WORD32 code_book,
462*15dc779aSAndroid Build Coastguard Worker                                    ixheaace_bit_buf_handle pstr_bitstream,
463*15dc779aSAndroid Build Coastguard Worker                                    ixheaace_huffman_tables *pstr_huffman_tbl) {
464*15dc779aSAndroid Build Coastguard Worker   WORD32 i, temp_0, temp_1, temp_2, temp_3, t00, t01;
465*15dc779aSAndroid Build Coastguard Worker   WORD32 code_word, code_length;
466*15dc779aSAndroid Build Coastguard Worker   WORD32 sign, sign_length;
467*15dc779aSAndroid Build Coastguard Worker   WORD16 *ptr_temp_values = ptr_values;
468*15dc779aSAndroid Build Coastguard Worker 
469*15dc779aSAndroid Build Coastguard Worker   switch (code_book) {
470*15dc779aSAndroid Build Coastguard Worker     case CODE_BCK_ZERO_NO:
471*15dc779aSAndroid Build Coastguard Worker       break;
472*15dc779aSAndroid Build Coastguard Worker 
473*15dc779aSAndroid Build Coastguard Worker     case CODE_BCK_1_NO:
474*15dc779aSAndroid Build Coastguard Worker       width = width >> 2;
475*15dc779aSAndroid Build Coastguard Worker 
476*15dc779aSAndroid Build Coastguard Worker       for (i = width - 1; i >= 0; i--) {
477*15dc779aSAndroid Build Coastguard Worker         temp_0 = *ptr_temp_values++;
478*15dc779aSAndroid Build Coastguard Worker         temp_1 = *ptr_temp_values++;
479*15dc779aSAndroid Build Coastguard Worker         temp_2 = *ptr_temp_values++;
480*15dc779aSAndroid Build Coastguard Worker         temp_3 = *ptr_temp_values++;
481*15dc779aSAndroid Build Coastguard Worker 
482*15dc779aSAndroid Build Coastguard Worker         code_word = pstr_huffman_tbl->huff_ctab1[temp_0 + 1][temp_1 + 1][temp_2 + 1][temp_3 + 1];
483*15dc779aSAndroid Build Coastguard Worker 
484*15dc779aSAndroid Build Coastguard Worker         code_length = HI_LTAB(
485*15dc779aSAndroid Build Coastguard Worker             pstr_huffman_tbl->huff_ltab1_2[temp_0 + 1][temp_1 + 1][temp_2 + 1][temp_3 + 1]);
486*15dc779aSAndroid Build Coastguard Worker 
487*15dc779aSAndroid Build Coastguard Worker         ixheaace_write_bits(pstr_bitstream, code_word, (UWORD8)code_length);
488*15dc779aSAndroid Build Coastguard Worker       }
489*15dc779aSAndroid Build Coastguard Worker       break;
490*15dc779aSAndroid Build Coastguard Worker 
491*15dc779aSAndroid Build Coastguard Worker     case CODE_BCK_2_NO:
492*15dc779aSAndroid Build Coastguard Worker 
493*15dc779aSAndroid Build Coastguard Worker       width = width >> 2;
494*15dc779aSAndroid Build Coastguard Worker 
495*15dc779aSAndroid Build Coastguard Worker       for (i = width - 1; i >= 0; i--) {
496*15dc779aSAndroid Build Coastguard Worker         temp_0 = *ptr_temp_values++;
497*15dc779aSAndroid Build Coastguard Worker         temp_1 = *ptr_temp_values++;
498*15dc779aSAndroid Build Coastguard Worker         temp_2 = *ptr_temp_values++;
499*15dc779aSAndroid Build Coastguard Worker         temp_3 = *ptr_temp_values++;
500*15dc779aSAndroid Build Coastguard Worker 
501*15dc779aSAndroid Build Coastguard Worker         code_word = pstr_huffman_tbl->huff_ctab2[temp_0 + 1][temp_1 + 1][temp_2 + 1][temp_3 + 1];
502*15dc779aSAndroid Build Coastguard Worker 
503*15dc779aSAndroid Build Coastguard Worker         code_length = LO_LTAB(
504*15dc779aSAndroid Build Coastguard Worker             pstr_huffman_tbl->huff_ltab1_2[temp_0 + 1][temp_1 + 1][temp_2 + 1][temp_3 + 1]);
505*15dc779aSAndroid Build Coastguard Worker 
506*15dc779aSAndroid Build Coastguard Worker         ixheaace_write_bits(pstr_bitstream, code_word, (UWORD8)code_length);
507*15dc779aSAndroid Build Coastguard Worker       }
508*15dc779aSAndroid Build Coastguard Worker       break;
509*15dc779aSAndroid Build Coastguard Worker 
510*15dc779aSAndroid Build Coastguard Worker     case CODE_BCK_3_NO:
511*15dc779aSAndroid Build Coastguard Worker 
512*15dc779aSAndroid Build Coastguard Worker       for (i = 0; i < width; i += 4) {
513*15dc779aSAndroid Build Coastguard Worker         sign = 0;
514*15dc779aSAndroid Build Coastguard Worker         sign_length = 0;
515*15dc779aSAndroid Build Coastguard Worker         temp_0 = ptr_values[i + 0];
516*15dc779aSAndroid Build Coastguard Worker 
517*15dc779aSAndroid Build Coastguard Worker         if (temp_0 != 0) {
518*15dc779aSAndroid Build Coastguard Worker           sign_length++;
519*15dc779aSAndroid Build Coastguard Worker 
520*15dc779aSAndroid Build Coastguard Worker           sign <<= 1;
521*15dc779aSAndroid Build Coastguard Worker 
522*15dc779aSAndroid Build Coastguard Worker           if (temp_0 < 0) {
523*15dc779aSAndroid Build Coastguard Worker             sign |= 1;
524*15dc779aSAndroid Build Coastguard Worker 
525*15dc779aSAndroid Build Coastguard Worker             temp_0 = abs32(temp_0);
526*15dc779aSAndroid Build Coastguard Worker           }
527*15dc779aSAndroid Build Coastguard Worker         }
528*15dc779aSAndroid Build Coastguard Worker 
529*15dc779aSAndroid Build Coastguard Worker         temp_1 = ptr_values[i + 1];
530*15dc779aSAndroid Build Coastguard Worker 
531*15dc779aSAndroid Build Coastguard Worker         if (temp_1 != 0) {
532*15dc779aSAndroid Build Coastguard Worker           sign_length++;
533*15dc779aSAndroid Build Coastguard Worker 
534*15dc779aSAndroid Build Coastguard Worker           sign <<= 1;
535*15dc779aSAndroid Build Coastguard Worker 
536*15dc779aSAndroid Build Coastguard Worker           if (temp_1 < 0) {
537*15dc779aSAndroid Build Coastguard Worker             sign |= 1;
538*15dc779aSAndroid Build Coastguard Worker 
539*15dc779aSAndroid Build Coastguard Worker             temp_1 = abs32(temp_1);
540*15dc779aSAndroid Build Coastguard Worker           }
541*15dc779aSAndroid Build Coastguard Worker         }
542*15dc779aSAndroid Build Coastguard Worker 
543*15dc779aSAndroid Build Coastguard Worker         temp_2 = ptr_values[i + 2];
544*15dc779aSAndroid Build Coastguard Worker 
545*15dc779aSAndroid Build Coastguard Worker         if (temp_2 != 0) {
546*15dc779aSAndroid Build Coastguard Worker           sign_length++;
547*15dc779aSAndroid Build Coastguard Worker 
548*15dc779aSAndroid Build Coastguard Worker           sign <<= 1;
549*15dc779aSAndroid Build Coastguard Worker 
550*15dc779aSAndroid Build Coastguard Worker           if (temp_2 < 0) {
551*15dc779aSAndroid Build Coastguard Worker             sign |= 1;
552*15dc779aSAndroid Build Coastguard Worker 
553*15dc779aSAndroid Build Coastguard Worker             temp_2 = abs32(temp_2);
554*15dc779aSAndroid Build Coastguard Worker           }
555*15dc779aSAndroid Build Coastguard Worker         }
556*15dc779aSAndroid Build Coastguard Worker 
557*15dc779aSAndroid Build Coastguard Worker         temp_3 = ptr_values[i + 3];
558*15dc779aSAndroid Build Coastguard Worker 
559*15dc779aSAndroid Build Coastguard Worker         if (temp_3 != 0) {
560*15dc779aSAndroid Build Coastguard Worker           sign_length++;
561*15dc779aSAndroid Build Coastguard Worker 
562*15dc779aSAndroid Build Coastguard Worker           sign <<= 1;
563*15dc779aSAndroid Build Coastguard Worker 
564*15dc779aSAndroid Build Coastguard Worker           if (temp_3 < 0) {
565*15dc779aSAndroid Build Coastguard Worker             sign |= 1;
566*15dc779aSAndroid Build Coastguard Worker 
567*15dc779aSAndroid Build Coastguard Worker             temp_3 = abs32(temp_3);
568*15dc779aSAndroid Build Coastguard Worker           }
569*15dc779aSAndroid Build Coastguard Worker         }
570*15dc779aSAndroid Build Coastguard Worker 
571*15dc779aSAndroid Build Coastguard Worker         code_word = pstr_huffman_tbl->huff_ctab3[temp_0][temp_1][temp_2][temp_3];
572*15dc779aSAndroid Build Coastguard Worker 
573*15dc779aSAndroid Build Coastguard Worker         code_length = HI_LTAB(pstr_huffman_tbl->huff_ltab3_4[temp_0][temp_1][temp_2][temp_3]);
574*15dc779aSAndroid Build Coastguard Worker 
575*15dc779aSAndroid Build Coastguard Worker         ixheaace_write_bits(pstr_bitstream, code_word, (UWORD8)code_length);
576*15dc779aSAndroid Build Coastguard Worker 
577*15dc779aSAndroid Build Coastguard Worker         ixheaace_write_bits(pstr_bitstream, sign, (UWORD8)sign_length);
578*15dc779aSAndroid Build Coastguard Worker       }
579*15dc779aSAndroid Build Coastguard Worker       break;
580*15dc779aSAndroid Build Coastguard Worker 
581*15dc779aSAndroid Build Coastguard Worker     case CODE_BCK_4_NO:
582*15dc779aSAndroid Build Coastguard Worker 
583*15dc779aSAndroid Build Coastguard Worker       for (i = 0; i < width; i += 4) {
584*15dc779aSAndroid Build Coastguard Worker         sign = 0;
585*15dc779aSAndroid Build Coastguard Worker         sign_length = 0;
586*15dc779aSAndroid Build Coastguard Worker         temp_0 = ptr_values[i + 0];
587*15dc779aSAndroid Build Coastguard Worker 
588*15dc779aSAndroid Build Coastguard Worker         if (temp_0 != 0) {
589*15dc779aSAndroid Build Coastguard Worker           sign_length++;
590*15dc779aSAndroid Build Coastguard Worker 
591*15dc779aSAndroid Build Coastguard Worker           sign <<= 1;
592*15dc779aSAndroid Build Coastguard Worker 
593*15dc779aSAndroid Build Coastguard Worker           if (temp_0 < 0) {
594*15dc779aSAndroid Build Coastguard Worker             sign |= 1;
595*15dc779aSAndroid Build Coastguard Worker 
596*15dc779aSAndroid Build Coastguard Worker             temp_0 = abs32(temp_0);
597*15dc779aSAndroid Build Coastguard Worker           }
598*15dc779aSAndroid Build Coastguard Worker         }
599*15dc779aSAndroid Build Coastguard Worker 
600*15dc779aSAndroid Build Coastguard Worker         temp_1 = ptr_values[i + 1];
601*15dc779aSAndroid Build Coastguard Worker 
602*15dc779aSAndroid Build Coastguard Worker         if (temp_1 != 0) {
603*15dc779aSAndroid Build Coastguard Worker           sign_length++;
604*15dc779aSAndroid Build Coastguard Worker 
605*15dc779aSAndroid Build Coastguard Worker           sign <<= 1;
606*15dc779aSAndroid Build Coastguard Worker 
607*15dc779aSAndroid Build Coastguard Worker           if (temp_1 < 0) {
608*15dc779aSAndroid Build Coastguard Worker             sign |= 1;
609*15dc779aSAndroid Build Coastguard Worker 
610*15dc779aSAndroid Build Coastguard Worker             temp_1 = abs32(temp_1);
611*15dc779aSAndroid Build Coastguard Worker           }
612*15dc779aSAndroid Build Coastguard Worker         }
613*15dc779aSAndroid Build Coastguard Worker 
614*15dc779aSAndroid Build Coastguard Worker         temp_2 = ptr_values[i + 2];
615*15dc779aSAndroid Build Coastguard Worker 
616*15dc779aSAndroid Build Coastguard Worker         if (temp_2 != 0) {
617*15dc779aSAndroid Build Coastguard Worker           sign_length++;
618*15dc779aSAndroid Build Coastguard Worker 
619*15dc779aSAndroid Build Coastguard Worker           sign <<= 1;
620*15dc779aSAndroid Build Coastguard Worker 
621*15dc779aSAndroid Build Coastguard Worker           if (temp_2 < 0) {
622*15dc779aSAndroid Build Coastguard Worker             sign |= 1;
623*15dc779aSAndroid Build Coastguard Worker 
624*15dc779aSAndroid Build Coastguard Worker             temp_2 = abs32(temp_2);
625*15dc779aSAndroid Build Coastguard Worker           }
626*15dc779aSAndroid Build Coastguard Worker         }
627*15dc779aSAndroid Build Coastguard Worker 
628*15dc779aSAndroid Build Coastguard Worker         temp_3 = ptr_values[i + 3];
629*15dc779aSAndroid Build Coastguard Worker 
630*15dc779aSAndroid Build Coastguard Worker         if (temp_3 != 0) {
631*15dc779aSAndroid Build Coastguard Worker           sign_length++;
632*15dc779aSAndroid Build Coastguard Worker 
633*15dc779aSAndroid Build Coastguard Worker           sign <<= 1;
634*15dc779aSAndroid Build Coastguard Worker 
635*15dc779aSAndroid Build Coastguard Worker           if (temp_3 < 0) {
636*15dc779aSAndroid Build Coastguard Worker             sign |= 1;
637*15dc779aSAndroid Build Coastguard Worker 
638*15dc779aSAndroid Build Coastguard Worker             temp_3 = abs32(temp_3);
639*15dc779aSAndroid Build Coastguard Worker           }
640*15dc779aSAndroid Build Coastguard Worker         }
641*15dc779aSAndroid Build Coastguard Worker 
642*15dc779aSAndroid Build Coastguard Worker         code_word = pstr_huffman_tbl->huff_ctab4[temp_0][temp_1][temp_2][temp_3];
643*15dc779aSAndroid Build Coastguard Worker 
644*15dc779aSAndroid Build Coastguard Worker         code_length = LO_LTAB(pstr_huffman_tbl->huff_ltab3_4[temp_0][temp_1][temp_2][temp_3]);
645*15dc779aSAndroid Build Coastguard Worker 
646*15dc779aSAndroid Build Coastguard Worker         ixheaace_write_bits(pstr_bitstream, code_word, (UWORD8)code_length);
647*15dc779aSAndroid Build Coastguard Worker 
648*15dc779aSAndroid Build Coastguard Worker         ixheaace_write_bits(pstr_bitstream, sign, (UWORD8)sign_length);
649*15dc779aSAndroid Build Coastguard Worker       }
650*15dc779aSAndroid Build Coastguard Worker       break;
651*15dc779aSAndroid Build Coastguard Worker 
652*15dc779aSAndroid Build Coastguard Worker     case CODE_BCK_5_NO:
653*15dc779aSAndroid Build Coastguard Worker 
654*15dc779aSAndroid Build Coastguard Worker       width = width >> 1;
655*15dc779aSAndroid Build Coastguard Worker 
656*15dc779aSAndroid Build Coastguard Worker       for (i = width - 1; i >= 0; i--) {
657*15dc779aSAndroid Build Coastguard Worker         temp_0 = *ptr_temp_values++;
658*15dc779aSAndroid Build Coastguard Worker         temp_1 = *ptr_temp_values++;
659*15dc779aSAndroid Build Coastguard Worker 
660*15dc779aSAndroid Build Coastguard Worker         code_word = pstr_huffman_tbl->huff_ctab5[temp_0 + 4][temp_1 + 4];
661*15dc779aSAndroid Build Coastguard Worker 
662*15dc779aSAndroid Build Coastguard Worker         code_length = HI_LTAB(pstr_huffman_tbl->huff_ltab5_6[temp_0 + 4][temp_1 + 4]);
663*15dc779aSAndroid Build Coastguard Worker 
664*15dc779aSAndroid Build Coastguard Worker         ixheaace_write_bits(pstr_bitstream, code_word, (UWORD8)code_length);
665*15dc779aSAndroid Build Coastguard Worker       }
666*15dc779aSAndroid Build Coastguard Worker       break;
667*15dc779aSAndroid Build Coastguard Worker 
668*15dc779aSAndroid Build Coastguard Worker     case CODE_BCK_6_NO:
669*15dc779aSAndroid Build Coastguard Worker 
670*15dc779aSAndroid Build Coastguard Worker       width = width >> 1;
671*15dc779aSAndroid Build Coastguard Worker 
672*15dc779aSAndroid Build Coastguard Worker       for (i = width - 1; i >= 0; i--) {
673*15dc779aSAndroid Build Coastguard Worker         temp_0 = *ptr_temp_values++;
674*15dc779aSAndroid Build Coastguard Worker         temp_1 = *ptr_temp_values++;
675*15dc779aSAndroid Build Coastguard Worker 
676*15dc779aSAndroid Build Coastguard Worker         code_word = pstr_huffman_tbl->huff_ctab6[temp_0 + 4][temp_1 + 4];
677*15dc779aSAndroid Build Coastguard Worker 
678*15dc779aSAndroid Build Coastguard Worker         code_length = LO_LTAB(pstr_huffman_tbl->huff_ltab5_6[temp_0 + 4][temp_1 + 4]);
679*15dc779aSAndroid Build Coastguard Worker 
680*15dc779aSAndroid Build Coastguard Worker         ixheaace_write_bits(pstr_bitstream, code_word, (UWORD8)code_length);
681*15dc779aSAndroid Build Coastguard Worker       }
682*15dc779aSAndroid Build Coastguard Worker       break;
683*15dc779aSAndroid Build Coastguard Worker 
684*15dc779aSAndroid Build Coastguard Worker     case CODE_BCK_7_NO:
685*15dc779aSAndroid Build Coastguard Worker 
686*15dc779aSAndroid Build Coastguard Worker       for (i = 0; i < width; i += 2) {
687*15dc779aSAndroid Build Coastguard Worker         sign = 0;
688*15dc779aSAndroid Build Coastguard Worker         sign_length = 0;
689*15dc779aSAndroid Build Coastguard Worker         temp_0 = ptr_values[i + 0];
690*15dc779aSAndroid Build Coastguard Worker 
691*15dc779aSAndroid Build Coastguard Worker         if (temp_0 != 0) {
692*15dc779aSAndroid Build Coastguard Worker           sign_length++;
693*15dc779aSAndroid Build Coastguard Worker 
694*15dc779aSAndroid Build Coastguard Worker           sign <<= 1;
695*15dc779aSAndroid Build Coastguard Worker 
696*15dc779aSAndroid Build Coastguard Worker           if (temp_0 < 0) {
697*15dc779aSAndroid Build Coastguard Worker             sign |= 1;
698*15dc779aSAndroid Build Coastguard Worker 
699*15dc779aSAndroid Build Coastguard Worker             temp_0 = abs32(temp_0);
700*15dc779aSAndroid Build Coastguard Worker           }
701*15dc779aSAndroid Build Coastguard Worker         }
702*15dc779aSAndroid Build Coastguard Worker 
703*15dc779aSAndroid Build Coastguard Worker         temp_1 = ptr_values[i + 1];
704*15dc779aSAndroid Build Coastguard Worker 
705*15dc779aSAndroid Build Coastguard Worker         if (temp_1 != 0) {
706*15dc779aSAndroid Build Coastguard Worker           sign_length++;
707*15dc779aSAndroid Build Coastguard Worker 
708*15dc779aSAndroid Build Coastguard Worker           sign <<= 1;
709*15dc779aSAndroid Build Coastguard Worker 
710*15dc779aSAndroid Build Coastguard Worker           if (temp_1 < 0) {
711*15dc779aSAndroid Build Coastguard Worker             sign |= 1;
712*15dc779aSAndroid Build Coastguard Worker 
713*15dc779aSAndroid Build Coastguard Worker             temp_1 = abs32(temp_1);
714*15dc779aSAndroid Build Coastguard Worker           }
715*15dc779aSAndroid Build Coastguard Worker         }
716*15dc779aSAndroid Build Coastguard Worker 
717*15dc779aSAndroid Build Coastguard Worker         code_word = pstr_huffman_tbl->huff_ctab7[temp_0][temp_1];
718*15dc779aSAndroid Build Coastguard Worker 
719*15dc779aSAndroid Build Coastguard Worker         code_length = HI_LTAB(pstr_huffman_tbl->huff_ltab7_8[temp_0][temp_1]);
720*15dc779aSAndroid Build Coastguard Worker 
721*15dc779aSAndroid Build Coastguard Worker         ixheaace_write_bits(pstr_bitstream, code_word, (UWORD8)code_length);
722*15dc779aSAndroid Build Coastguard Worker 
723*15dc779aSAndroid Build Coastguard Worker         ixheaace_write_bits(pstr_bitstream, sign, (UWORD8)sign_length);
724*15dc779aSAndroid Build Coastguard Worker       }
725*15dc779aSAndroid Build Coastguard Worker       break;
726*15dc779aSAndroid Build Coastguard Worker 
727*15dc779aSAndroid Build Coastguard Worker     case CODE_BCK_8_NO:
728*15dc779aSAndroid Build Coastguard Worker 
729*15dc779aSAndroid Build Coastguard Worker       for (i = 0; i < width; i += 2) {
730*15dc779aSAndroid Build Coastguard Worker         sign = 0;
731*15dc779aSAndroid Build Coastguard Worker         sign_length = 0;
732*15dc779aSAndroid Build Coastguard Worker         temp_0 = ptr_values[i + 0];
733*15dc779aSAndroid Build Coastguard Worker 
734*15dc779aSAndroid Build Coastguard Worker         if (temp_0 != 0) {
735*15dc779aSAndroid Build Coastguard Worker           sign_length++;
736*15dc779aSAndroid Build Coastguard Worker 
737*15dc779aSAndroid Build Coastguard Worker           sign <<= 1;
738*15dc779aSAndroid Build Coastguard Worker 
739*15dc779aSAndroid Build Coastguard Worker           if (temp_0 < 0) {
740*15dc779aSAndroid Build Coastguard Worker             sign |= 1;
741*15dc779aSAndroid Build Coastguard Worker 
742*15dc779aSAndroid Build Coastguard Worker             temp_0 = abs32(temp_0);
743*15dc779aSAndroid Build Coastguard Worker           }
744*15dc779aSAndroid Build Coastguard Worker         }
745*15dc779aSAndroid Build Coastguard Worker 
746*15dc779aSAndroid Build Coastguard Worker         temp_1 = ptr_values[i + 1];
747*15dc779aSAndroid Build Coastguard Worker 
748*15dc779aSAndroid Build Coastguard Worker         if (temp_1 != 0) {
749*15dc779aSAndroid Build Coastguard Worker           sign_length++;
750*15dc779aSAndroid Build Coastguard Worker 
751*15dc779aSAndroid Build Coastguard Worker           sign <<= 1;
752*15dc779aSAndroid Build Coastguard Worker 
753*15dc779aSAndroid Build Coastguard Worker           if (temp_1 < 0) {
754*15dc779aSAndroid Build Coastguard Worker             sign |= 1;
755*15dc779aSAndroid Build Coastguard Worker 
756*15dc779aSAndroid Build Coastguard Worker             temp_1 = abs32(temp_1);
757*15dc779aSAndroid Build Coastguard Worker           }
758*15dc779aSAndroid Build Coastguard Worker         }
759*15dc779aSAndroid Build Coastguard Worker 
760*15dc779aSAndroid Build Coastguard Worker         code_word = pstr_huffman_tbl->huff_ctab8[temp_0][temp_1];
761*15dc779aSAndroid Build Coastguard Worker 
762*15dc779aSAndroid Build Coastguard Worker         code_length = LO_LTAB(pstr_huffman_tbl->huff_ltab7_8[temp_0][temp_1]);
763*15dc779aSAndroid Build Coastguard Worker 
764*15dc779aSAndroid Build Coastguard Worker         ixheaace_write_bits(pstr_bitstream, code_word, (UWORD8)code_length);
765*15dc779aSAndroid Build Coastguard Worker 
766*15dc779aSAndroid Build Coastguard Worker         ixheaace_write_bits(pstr_bitstream, sign, (UWORD8)sign_length);
767*15dc779aSAndroid Build Coastguard Worker       }
768*15dc779aSAndroid Build Coastguard Worker       break;
769*15dc779aSAndroid Build Coastguard Worker 
770*15dc779aSAndroid Build Coastguard Worker     case CODE_BCK_9_NO:
771*15dc779aSAndroid Build Coastguard Worker 
772*15dc779aSAndroid Build Coastguard Worker       for (i = 0; i < width; i += 2) {
773*15dc779aSAndroid Build Coastguard Worker         sign = 0;
774*15dc779aSAndroid Build Coastguard Worker         sign_length = 0;
775*15dc779aSAndroid Build Coastguard Worker         temp_0 = ptr_values[i + 0];
776*15dc779aSAndroid Build Coastguard Worker 
777*15dc779aSAndroid Build Coastguard Worker         if (temp_0 != 0) {
778*15dc779aSAndroid Build Coastguard Worker           sign_length++;
779*15dc779aSAndroid Build Coastguard Worker 
780*15dc779aSAndroid Build Coastguard Worker           sign <<= 1;
781*15dc779aSAndroid Build Coastguard Worker 
782*15dc779aSAndroid Build Coastguard Worker           if (temp_0 < 0) {
783*15dc779aSAndroid Build Coastguard Worker             sign |= 1;
784*15dc779aSAndroid Build Coastguard Worker 
785*15dc779aSAndroid Build Coastguard Worker             temp_0 = abs32(temp_0);
786*15dc779aSAndroid Build Coastguard Worker           }
787*15dc779aSAndroid Build Coastguard Worker         }
788*15dc779aSAndroid Build Coastguard Worker 
789*15dc779aSAndroid Build Coastguard Worker         temp_1 = ptr_values[i + 1];
790*15dc779aSAndroid Build Coastguard Worker 
791*15dc779aSAndroid Build Coastguard Worker         if (temp_1 != 0) {
792*15dc779aSAndroid Build Coastguard Worker           sign_length++;
793*15dc779aSAndroid Build Coastguard Worker 
794*15dc779aSAndroid Build Coastguard Worker           sign <<= 1;
795*15dc779aSAndroid Build Coastguard Worker 
796*15dc779aSAndroid Build Coastguard Worker           if (temp_1 < 0) {
797*15dc779aSAndroid Build Coastguard Worker             sign |= 1;
798*15dc779aSAndroid Build Coastguard Worker 
799*15dc779aSAndroid Build Coastguard Worker             temp_1 = abs32(temp_1);
800*15dc779aSAndroid Build Coastguard Worker           }
801*15dc779aSAndroid Build Coastguard Worker         }
802*15dc779aSAndroid Build Coastguard Worker 
803*15dc779aSAndroid Build Coastguard Worker         code_word = pstr_huffman_tbl->huff_ctab9[temp_0][temp_1];
804*15dc779aSAndroid Build Coastguard Worker 
805*15dc779aSAndroid Build Coastguard Worker         code_length = HI_LTAB(pstr_huffman_tbl->huff_ltab9_10[temp_0][temp_1]);
806*15dc779aSAndroid Build Coastguard Worker 
807*15dc779aSAndroid Build Coastguard Worker         ixheaace_write_bits(pstr_bitstream, code_word, (UWORD8)code_length);
808*15dc779aSAndroid Build Coastguard Worker 
809*15dc779aSAndroid Build Coastguard Worker         ixheaace_write_bits(pstr_bitstream, sign, (UWORD8)sign_length);
810*15dc779aSAndroid Build Coastguard Worker       }
811*15dc779aSAndroid Build Coastguard Worker       break;
812*15dc779aSAndroid Build Coastguard Worker 
813*15dc779aSAndroid Build Coastguard Worker     case CODE_BCK_10_NO:
814*15dc779aSAndroid Build Coastguard Worker 
815*15dc779aSAndroid Build Coastguard Worker       for (i = 0; i < width; i += 2) {
816*15dc779aSAndroid Build Coastguard Worker         sign = 0;
817*15dc779aSAndroid Build Coastguard Worker         sign_length = 0;
818*15dc779aSAndroid Build Coastguard Worker         temp_0 = ptr_values[i + 0];
819*15dc779aSAndroid Build Coastguard Worker 
820*15dc779aSAndroid Build Coastguard Worker         if (temp_0 != 0) {
821*15dc779aSAndroid Build Coastguard Worker           sign_length++;
822*15dc779aSAndroid Build Coastguard Worker 
823*15dc779aSAndroid Build Coastguard Worker           sign <<= 1;
824*15dc779aSAndroid Build Coastguard Worker 
825*15dc779aSAndroid Build Coastguard Worker           if (temp_0 < 0) {
826*15dc779aSAndroid Build Coastguard Worker             sign |= 1;
827*15dc779aSAndroid Build Coastguard Worker 
828*15dc779aSAndroid Build Coastguard Worker             temp_0 = abs32(temp_0);
829*15dc779aSAndroid Build Coastguard Worker           }
830*15dc779aSAndroid Build Coastguard Worker         }
831*15dc779aSAndroid Build Coastguard Worker 
832*15dc779aSAndroid Build Coastguard Worker         temp_1 = ptr_values[i + 1];
833*15dc779aSAndroid Build Coastguard Worker 
834*15dc779aSAndroid Build Coastguard Worker         if (temp_1 != 0) {
835*15dc779aSAndroid Build Coastguard Worker           sign_length++;
836*15dc779aSAndroid Build Coastguard Worker 
837*15dc779aSAndroid Build Coastguard Worker           sign <<= 1;
838*15dc779aSAndroid Build Coastguard Worker 
839*15dc779aSAndroid Build Coastguard Worker           if (temp_1 < 0) {
840*15dc779aSAndroid Build Coastguard Worker             sign |= 1;
841*15dc779aSAndroid Build Coastguard Worker 
842*15dc779aSAndroid Build Coastguard Worker             temp_1 = abs32(temp_1);
843*15dc779aSAndroid Build Coastguard Worker           }
844*15dc779aSAndroid Build Coastguard Worker         }
845*15dc779aSAndroid Build Coastguard Worker 
846*15dc779aSAndroid Build Coastguard Worker         code_word = pstr_huffman_tbl->huff_ctab10[temp_0][temp_1];
847*15dc779aSAndroid Build Coastguard Worker 
848*15dc779aSAndroid Build Coastguard Worker         code_length = LO_LTAB(pstr_huffman_tbl->huff_ltab9_10[temp_0][temp_1]);
849*15dc779aSAndroid Build Coastguard Worker 
850*15dc779aSAndroid Build Coastguard Worker         ixheaace_write_bits(pstr_bitstream, code_word, (UWORD8)code_length);
851*15dc779aSAndroid Build Coastguard Worker 
852*15dc779aSAndroid Build Coastguard Worker         ixheaace_write_bits(pstr_bitstream, sign, (UWORD8)sign_length);
853*15dc779aSAndroid Build Coastguard Worker       }
854*15dc779aSAndroid Build Coastguard Worker       break;
855*15dc779aSAndroid Build Coastguard Worker 
856*15dc779aSAndroid Build Coastguard Worker     case CODE_BCK_ESC_NO:
857*15dc779aSAndroid Build Coastguard Worker 
858*15dc779aSAndroid Build Coastguard Worker       for (i = 0; i < width; i += 2) {
859*15dc779aSAndroid Build Coastguard Worker         sign = 0;
860*15dc779aSAndroid Build Coastguard Worker         sign_length = 0;
861*15dc779aSAndroid Build Coastguard Worker         temp_0 = ptr_values[i + 0];
862*15dc779aSAndroid Build Coastguard Worker 
863*15dc779aSAndroid Build Coastguard Worker         if (temp_0 != 0) {
864*15dc779aSAndroid Build Coastguard Worker           sign_length++;
865*15dc779aSAndroid Build Coastguard Worker 
866*15dc779aSAndroid Build Coastguard Worker           sign <<= 1;
867*15dc779aSAndroid Build Coastguard Worker 
868*15dc779aSAndroid Build Coastguard Worker           if (temp_0 < 0) {
869*15dc779aSAndroid Build Coastguard Worker             sign |= 1;
870*15dc779aSAndroid Build Coastguard Worker 
871*15dc779aSAndroid Build Coastguard Worker             temp_0 = abs32(temp_0);
872*15dc779aSAndroid Build Coastguard Worker           }
873*15dc779aSAndroid Build Coastguard Worker         }
874*15dc779aSAndroid Build Coastguard Worker 
875*15dc779aSAndroid Build Coastguard Worker         temp_1 = ptr_values[i + 1];
876*15dc779aSAndroid Build Coastguard Worker 
877*15dc779aSAndroid Build Coastguard Worker         if (temp_1 != 0) {
878*15dc779aSAndroid Build Coastguard Worker           sign_length++;
879*15dc779aSAndroid Build Coastguard Worker 
880*15dc779aSAndroid Build Coastguard Worker           sign <<= 1;
881*15dc779aSAndroid Build Coastguard Worker 
882*15dc779aSAndroid Build Coastguard Worker           if (temp_1 < 0) {
883*15dc779aSAndroid Build Coastguard Worker             sign |= 1;
884*15dc779aSAndroid Build Coastguard Worker 
885*15dc779aSAndroid Build Coastguard Worker             temp_1 = abs32(temp_1);
886*15dc779aSAndroid Build Coastguard Worker           }
887*15dc779aSAndroid Build Coastguard Worker         }
888*15dc779aSAndroid Build Coastguard Worker 
889*15dc779aSAndroid Build Coastguard Worker         t00 = MIN(temp_0, 16);
890*15dc779aSAndroid Build Coastguard Worker         t01 = MIN(temp_1, 16);
891*15dc779aSAndroid Build Coastguard Worker 
892*15dc779aSAndroid Build Coastguard Worker         code_word = pstr_huffman_tbl->huff_ctab11[t00][t01];
893*15dc779aSAndroid Build Coastguard Worker         code_length = pstr_huffman_tbl->huff_ltab11[t00][t01];
894*15dc779aSAndroid Build Coastguard Worker 
895*15dc779aSAndroid Build Coastguard Worker         ixheaace_write_bits(pstr_bitstream, code_word, (UWORD8)code_length);
896*15dc779aSAndroid Build Coastguard Worker 
897*15dc779aSAndroid Build Coastguard Worker         ixheaace_write_bits(pstr_bitstream, sign, (UWORD8)sign_length);
898*15dc779aSAndroid Build Coastguard Worker 
899*15dc779aSAndroid Build Coastguard Worker         if (temp_0 >= 16) {
900*15dc779aSAndroid Build Coastguard Worker           WORD32 n, p;
901*15dc779aSAndroid Build Coastguard Worker 
902*15dc779aSAndroid Build Coastguard Worker           n = 0;
903*15dc779aSAndroid Build Coastguard Worker           p = temp_0;
904*15dc779aSAndroid Build Coastguard Worker 
905*15dc779aSAndroid Build Coastguard Worker           while ((p >>= 1) >= 16) {
906*15dc779aSAndroid Build Coastguard Worker             ixheaace_write_bits(pstr_bitstream, 1, 1);
907*15dc779aSAndroid Build Coastguard Worker 
908*15dc779aSAndroid Build Coastguard Worker             n++;
909*15dc779aSAndroid Build Coastguard Worker           }
910*15dc779aSAndroid Build Coastguard Worker 
911*15dc779aSAndroid Build Coastguard Worker           ixheaace_write_bits(pstr_bitstream, 0, 1);
912*15dc779aSAndroid Build Coastguard Worker 
913*15dc779aSAndroid Build Coastguard Worker           ixheaace_write_bits(pstr_bitstream, temp_0 - (1 << (n + 4)), (UWORD8)(n + 4));
914*15dc779aSAndroid Build Coastguard Worker         }
915*15dc779aSAndroid Build Coastguard Worker         if (temp_1 >= 16) {
916*15dc779aSAndroid Build Coastguard Worker           WORD32 n, p;
917*15dc779aSAndroid Build Coastguard Worker 
918*15dc779aSAndroid Build Coastguard Worker           n = 0;
919*15dc779aSAndroid Build Coastguard Worker           p = temp_1;
920*15dc779aSAndroid Build Coastguard Worker 
921*15dc779aSAndroid Build Coastguard Worker           while ((p >>= 1) >= 16) {
922*15dc779aSAndroid Build Coastguard Worker             ixheaace_write_bits(pstr_bitstream, 1, 1);
923*15dc779aSAndroid Build Coastguard Worker 
924*15dc779aSAndroid Build Coastguard Worker             n++;
925*15dc779aSAndroid Build Coastguard Worker           }
926*15dc779aSAndroid Build Coastguard Worker 
927*15dc779aSAndroid Build Coastguard Worker           ixheaace_write_bits(pstr_bitstream, 0, 1);
928*15dc779aSAndroid Build Coastguard Worker 
929*15dc779aSAndroid Build Coastguard Worker           ixheaace_write_bits(pstr_bitstream, temp_1 - (1 << (n + 4)), (UWORD8)(n + 4));
930*15dc779aSAndroid Build Coastguard Worker         }
931*15dc779aSAndroid Build Coastguard Worker       }
932*15dc779aSAndroid Build Coastguard Worker       break;
933*15dc779aSAndroid Build Coastguard Worker 
934*15dc779aSAndroid Build Coastguard Worker     default:
935*15dc779aSAndroid Build Coastguard Worker       break;
936*15dc779aSAndroid Build Coastguard Worker   }
937*15dc779aSAndroid Build Coastguard Worker }
938*15dc779aSAndroid Build Coastguard Worker 
ia_enhaacplus_enc_code_scale_factor_delta(WORD32 delta,ixheaace_bit_buf_handle h_bitstream,ixheaace_huffman_tables * pstr_huffman_tbl)939*15dc779aSAndroid Build Coastguard Worker VOID ia_enhaacplus_enc_code_scale_factor_delta(WORD32 delta,
940*15dc779aSAndroid Build Coastguard Worker                                                ixheaace_bit_buf_handle h_bitstream,
941*15dc779aSAndroid Build Coastguard Worker                                                ixheaace_huffman_tables *pstr_huffman_tbl) {
942*15dc779aSAndroid Build Coastguard Worker   WORD32 code_word, code_length;
943*15dc779aSAndroid Build Coastguard Worker 
944*15dc779aSAndroid Build Coastguard Worker   code_word = pstr_huffman_tbl->huff_ctabscf[delta + CODE_BCK_SCF_LAV];
945*15dc779aSAndroid Build Coastguard Worker   code_length = pstr_huffman_tbl->huff_ltabscf[delta + CODE_BCK_SCF_LAV];
946*15dc779aSAndroid Build Coastguard Worker 
947*15dc779aSAndroid Build Coastguard Worker   ixheaace_write_bits(h_bitstream, code_word, (UWORD8)code_length);
948*15dc779aSAndroid Build Coastguard Worker }
949