annotate aactab.h @ 10874:bcfe2acbf190 libavcodec

AAC: Compress codebook tables and optimise sign bit handling The codebooks each consist of small number of values repeated in groups of 2 or 4. Storing the codebooks as a packed list of 2- or 4-bit indexes into a table reduces their size substantially (from 7.5k to 1.5k), resulting in less cache pressure. For the band types with sign bits in the bitstream, storing the number and position of non-zero codebook values using a few bits avoids multiple get_bits() calls and floating-point comparisons which gcc handles miserably. Some float/int type punning also avoids gcc brain damage. Overall speedup 20-35% on Cortex-A8, 20% on Core i7.
author mru
date Wed, 13 Jan 2010 16:46:28 +0000
parents 69d79f51b8ce
children 34a65026fa06
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7422
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
1 /*
7500
0499a257d17f Move shared tables to aactab.c and add declarations to aactab.h. Also sync with
superdump
parents: 7422
diff changeset
2 * AAC data declarations
7422
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
3 * Copyright (c) 2005-2006 Oded Shimon ( ods15 ods15 dyndns org )
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
4 * Copyright (c) 2006-2007 Maxim Gavrilov ( maxim.gavrilov gmail com )
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
5 *
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
6 * This file is part of FFmpeg.
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
7 *
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
8 * FFmpeg is free software; you can redistribute it and/or
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
10 * License as published by the Free Software Foundation; either
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
11 * version 2.1 of the License, or (at your option) any later version.
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
12 *
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
13 * FFmpeg is distributed in the hope that it will be useful,
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
16 * Lesser General Public License for more details.
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
17 *
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
19 * License along with FFmpeg; if not, write to the Free Software
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
21 */
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
22
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
23 /**
8718
e9d9d946f213 Use full internal pathname in doxygen @file directives.
diego
parents: 8671
diff changeset
24 * @file libavcodec/aactab.h
7500
0499a257d17f Move shared tables to aactab.c and add declarations to aactab.h. Also sync with
superdump
parents: 7422
diff changeset
25 * AAC data declarations
7422
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
26 * @author Oded Shimon ( ods15 ods15 dyndns org )
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
27 * @author Maxim Gavrilov ( maxim.gavrilov gmail com )
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
28 */
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
29
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7581
diff changeset
30 #ifndef AVCODEC_AACTAB_H
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7581
diff changeset
31 #define AVCODEC_AACTAB_H
7422
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
32
7523
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7500
diff changeset
33 #include "libavutil/mem.h"
7500
0499a257d17f Move shared tables to aactab.c and add declarations to aactab.h. Also sync with
superdump
parents: 7422
diff changeset
34 #include "aac.h"
0499a257d17f Move shared tables to aactab.c and add declarations to aactab.h. Also sync with
superdump
parents: 7422
diff changeset
35
7422
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
36 #include <stdint.h>
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
37
7539
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
38 /* NOTE:
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
39 * Tables in this file are used by the AAC decoder and will be used by the AAC
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
40 * encoder.
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
41 */
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
42
7581
6fdffa4836a7 More OKed AAC decoder hunks
superdump
parents: 7580
diff changeset
43 /* @name window coefficients
6fdffa4836a7 More OKed AAC decoder hunks
superdump
parents: 7580
diff changeset
44 * @{
6fdffa4836a7 More OKed AAC decoder hunks
superdump
parents: 7580
diff changeset
45 */
6fdffa4836a7 More OKed AAC decoder hunks
superdump
parents: 7580
diff changeset
46 DECLARE_ALIGNED(16, extern float, ff_aac_kbd_long_1024[1024]);
6fdffa4836a7 More OKed AAC decoder hunks
superdump
parents: 7580
diff changeset
47 DECLARE_ALIGNED(16, extern float, ff_aac_kbd_short_128[128]);
6fdffa4836a7 More OKed AAC decoder hunks
superdump
parents: 7580
diff changeset
48 // @}
6fdffa4836a7 More OKed AAC decoder hunks
superdump
parents: 7580
diff changeset
49
7539
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
50 /* @name number of scalefactor window bands for long and short transform windows respectively
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
51 * @{
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
52 */
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
53 extern const uint8_t ff_aac_num_swb_1024[];
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
54 extern const uint8_t ff_aac_num_swb_128 [];
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
55 // @}
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
56
8199
8a8d40fe77d9 AAC: Frequency domain prediction and hence Main profile support
superdump
parents: 7978
diff changeset
57 extern const uint8_t ff_aac_pred_sfb_max [];
8a8d40fe77d9 AAC: Frequency domain prediction and hence Main profile support
superdump
parents: 7978
diff changeset
58
7500
0499a257d17f Move shared tables to aactab.c and add declarations to aactab.h. Also sync with
superdump
parents: 7422
diff changeset
59 extern const uint32_t ff_aac_scalefactor_code[121];
0499a257d17f Move shared tables to aactab.c and add declarations to aactab.h. Also sync with
superdump
parents: 7422
diff changeset
60 extern const uint8_t ff_aac_scalefactor_bits[121];
7422
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
61
7978
dc1a7a6ec58d Add (additional) const to many global tables.
reimar
parents: 7760
diff changeset
62 extern const uint16_t * const ff_aac_spectral_codes[11];
dc1a7a6ec58d Add (additional) const to many global tables.
reimar
parents: 7760
diff changeset
63 extern const uint8_t * const ff_aac_spectral_bits [11];
7500
0499a257d17f Move shared tables to aactab.c and add declarations to aactab.h. Also sync with
superdump
parents: 7422
diff changeset
64 extern const uint16_t ff_aac_spectral_sizes[11];
7422
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
65
7580
c49ab52db74c Synchronise AAC decoder code with that from SoC
superdump
parents: 7539
diff changeset
66 extern const float *ff_aac_codebook_vectors[];
10874
bcfe2acbf190 AAC: Compress codebook tables and optimise sign bit handling
mru
parents: 10141
diff changeset
67 extern const float *ff_aac_codebook_vector_vals[];
bcfe2acbf190 AAC: Compress codebook tables and optimise sign bit handling
mru
parents: 10141
diff changeset
68 extern const uint16_t *ff_aac_codebook_vector_idx[];
7422
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
69
10141
69d79f51b8ce ff_swb_offset_* tables should be const.
reimar
parents: 9846
diff changeset
70 extern const uint16_t * const ff_swb_offset_1024[13];
69d79f51b8ce ff_swb_offset_* tables should be const.
reimar
parents: 9846
diff changeset
71 extern const uint16_t * const ff_swb_offset_128 [13];
9846
4cac4001dd23 Move TNS and swb_offset tables from aacdectab.h to aactab.c so that they can be
alexc
parents: 8718
diff changeset
72
4cac4001dd23 Move TNS and swb_offset tables from aacdectab.h to aactab.c so that they can be
alexc
parents: 8718
diff changeset
73 extern const uint8_t ff_tns_max_bands_1024[13];
4cac4001dd23 Move TNS and swb_offset tables from aacdectab.h to aactab.c so that they can be
alexc
parents: 8718
diff changeset
74 extern const uint8_t ff_tns_max_bands_128 [13];
4cac4001dd23 Move TNS and swb_offset tables from aacdectab.h to aactab.c so that they can be
alexc
parents: 8718
diff changeset
75
8590
7a463923ecd1 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 8199
diff changeset
76 #if CONFIG_HARDCODED_TABLES
8671
77a633d4f4cc Fix AAC data smuggling:
kostya
parents: 8590
diff changeset
77 extern const float ff_aac_pow2sf_tab[428];
7581
6fdffa4836a7 More OKed AAC decoder hunks
superdump
parents: 7580
diff changeset
78 #else
8671
77a633d4f4cc Fix AAC data smuggling:
kostya
parents: 8590
diff changeset
79 extern float ff_aac_pow2sf_tab[428];
7422
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
80 #endif /* CONFIG_HARDCODED_TABLES */
e29ac68d3152 AAC tables and data that have been OKed by Michael
superdump
parents:
diff changeset
81
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7581
diff changeset
82 #endif /* AVCODEC_AACTAB_H */