Coverage Report

Created: 2026-03-31 06:52

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