annotate libfaad2/syntax.c @ 11007:48b7d7aa444d

configure altivec patch by Magnus Damm <damm@opensource.se> * CC is not checked for Altivec support (see above). The patch adds checks for FSF-style flags and Darwin-style flags. The check is performed regardless of the gcc version. * Disabling of Altivec. --disable-altivec is broken today if /proc/cpuinfo shows that your cpu supports altivec. The patch takes care of that. * "GCC & CPU optimization abilities" always show that it is optimizing for the cpu configure is running on, it should show the optimization that is enabled for gcc instead. Cosmetic change only, but confusing as it is today IMHO. * Runtime CPU-detection now enables altivec for powerpc. Now with the patch it should be possible to use --enable-altivec, --disable-altivec, --enable-runtime-cpudetection regardless of powerpc cpu type. The configure script handles altivec support in the following order: 1. Altivec is enabled by default if your cpu supports it. 2. --enable-runtime-cpudetection will enable altivec support. 3. If you have forced altivec on/off with --enable-altivec/--disable-altivec, then your selection will override the previous altivec configuration. 4. If altivec is enabled but the compiler doesn't support it, altivec gets turned off.
author attila
date Sat, 04 Oct 2003 23:06:04 +0000
parents 3185f64f6350
children 4a370c80fe5c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1 /*
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
2 ** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
3 ** Copyright (C) 2003 M. Bakker, Ahead Software AG, http://www.nero.com
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
4 **
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
5 ** This program is free software; you can redistribute it and/or modify
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
6 ** it under the terms of the GNU General Public License as published by
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
7 ** the Free Software Foundation; either version 2 of the License, or
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
8 ** (at your option) any later version.
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
9 **
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
10 ** This program is distributed in the hope that it will be useful,
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
11 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
12 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
13 ** GNU General Public License for more details.
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
14 **
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
15 ** You should have received a copy of the GNU General Public License
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
16 ** along with this program; if not, write to the Free Software
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
17 ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
18 **
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
19 ** Any non-GPL usage of this software or parts of this software is strictly
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
20 ** forbidden.
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
21 **
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
22 ** Commercial non-GPL licensing of this software is possible.
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
23 ** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
24 **
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
25 ** $Id: syntax.c,v 1.56 2003/09/30 12:43:05 menno Exp $
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
26 **/
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
27
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
28 /*
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
29 Reads the AAC bitstream as defined in 14496-3 (MPEG-4 Audio)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
30 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
31
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
32 #include "common.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
33 #include "structs.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
34
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
35 #include <stdlib.h>
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
36 #include <string.h>
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
37
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
38 #include "decoder.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
39 #include "syntax.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
40 #include "specrec.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
41 #include "huffman.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
42 #include "bits.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
43 #include "pulse.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
44 #include "analysis.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
45 #include "drc.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
46 #ifdef ERROR_RESILIENCE
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
47 #include "rvlc.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
48 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
49 #ifdef SBR_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
50 #include "sbr_syntax.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
51 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
52
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
53
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
54 /* Table 4.4.1 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
55 int8_t GASpecificConfig(bitfile *ld, mp4AudioSpecificConfig *mp4ASC,
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
56 program_config *pce_out)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
57 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
58 program_config pce;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
59
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
60 /* 1024 or 960 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
61 mp4ASC->frameLengthFlag = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
62 DEBUGVAR(1,138,"GASpecificConfig(): FrameLengthFlag"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
63
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
64 mp4ASC->dependsOnCoreCoder = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
65 DEBUGVAR(1,139,"GASpecificConfig(): DependsOnCoreCoder"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
66 if (mp4ASC->dependsOnCoreCoder == 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
67 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
68 mp4ASC->coreCoderDelay = (uint16_t)faad_getbits(ld, 14
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
69 DEBUGVAR(1,140,"GASpecificConfig(): CoreCoderDelay"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
70 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
71
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
72 mp4ASC->extensionFlag = faad_get1bit(ld DEBUGVAR(1,141,"GASpecificConfig(): ExtensionFlag"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
73 if (mp4ASC->channelsConfiguration == 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
74 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
75 program_config_element(&pce, ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
76 //mp4ASC->channelsConfiguration = pce.channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
77
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
78 if (pce_out != NULL)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
79 memcpy(pce_out, &pce, sizeof(program_config));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
80
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
81 /*
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
82 if (pce.num_valid_cc_elements)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
83 return -3;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
84 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
85 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
86
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
87 #ifdef ERROR_RESILIENCE
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
88 if (mp4ASC->extensionFlag == 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
89 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
90 /* Error resilience not supported yet */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
91 if (mp4ASC->objectTypeIndex >= ER_OBJECT_START)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
92 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
93 mp4ASC->aacSectionDataResilienceFlag = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
94 DEBUGVAR(1,144,"GASpecificConfig(): aacSectionDataResilienceFlag"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
95 mp4ASC->aacScalefactorDataResilienceFlag = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
96 DEBUGVAR(1,145,"GASpecificConfig(): aacScalefactorDataResilienceFlag"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
97 mp4ASC->aacSpectralDataResilienceFlag = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
98 DEBUGVAR(1,146,"GASpecificConfig(): aacSpectralDataResilienceFlag"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
99
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
100 /* 1 bit: extensionFlag3 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
101 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
102 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
103 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
104
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
105 return 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
106 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
107
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
108 /* Table 4.4.2 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
109 /* An MPEG-4 Audio decoder is only required to follow the Program
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
110 Configuration Element in GASpecificConfig(). The decoder shall ignore
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
111 any Program Configuration Elements that may occur in raw data blocks.
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
112 PCEs transmitted in raw data blocks cannot be used to convey decoder
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
113 configuration information.
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
114 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
115 uint8_t program_config_element(program_config *pce, bitfile *ld)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
116 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
117 uint8_t i;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
118
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
119 memset(pce, 0, sizeof(program_config));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
120
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
121 pce->channels = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
122
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
123 pce->element_instance_tag = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
124 DEBUGVAR(1,10,"program_config_element(): element_instance_tag"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
125
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
126 pce->object_type = (uint8_t)faad_getbits(ld, 2
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
127 DEBUGVAR(1,11,"program_config_element(): object_type"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
128 pce->sf_index = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
129 DEBUGVAR(1,12,"program_config_element(): sf_index"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
130 pce->num_front_channel_elements = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
131 DEBUGVAR(1,13,"program_config_element(): num_front_channel_elements"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
132 pce->num_side_channel_elements = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
133 DEBUGVAR(1,14,"program_config_element(): num_side_channel_elements"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
134 pce->num_back_channel_elements = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
135 DEBUGVAR(1,15,"program_config_element(): num_back_channel_elements"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
136 pce->num_lfe_channel_elements = (uint8_t)faad_getbits(ld, 2
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
137 DEBUGVAR(1,16,"program_config_element(): num_lfe_channel_elements"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
138 pce->num_assoc_data_elements = (uint8_t)faad_getbits(ld, 3
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
139 DEBUGVAR(1,17,"program_config_element(): num_assoc_data_elements"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
140 pce->num_valid_cc_elements = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
141 DEBUGVAR(1,18,"program_config_element(): num_valid_cc_elements"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
142
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
143 pce->mono_mixdown_present = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
144 DEBUGVAR(1,19,"program_config_element(): mono_mixdown_present"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
145 if (pce->mono_mixdown_present == 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
146 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
147 pce->mono_mixdown_element_number = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
148 DEBUGVAR(1,20,"program_config_element(): mono_mixdown_element_number"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
149 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
150
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
151 pce->stereo_mixdown_present = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
152 DEBUGVAR(1,21,"program_config_element(): stereo_mixdown_present"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
153 if (pce->stereo_mixdown_present == 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
154 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
155 pce->stereo_mixdown_element_number = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
156 DEBUGVAR(1,22,"program_config_element(): stereo_mixdown_element_number"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
157 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
158
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
159 pce->matrix_mixdown_idx_present = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
160 DEBUGVAR(1,23,"program_config_element(): matrix_mixdown_idx_present"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
161 if (pce->matrix_mixdown_idx_present == 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
162 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
163 pce->matrix_mixdown_idx = (uint8_t)faad_getbits(ld, 2
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
164 DEBUGVAR(1,24,"program_config_element(): matrix_mixdown_idx"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
165 pce->pseudo_surround_enable = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
166 DEBUGVAR(1,25,"program_config_element(): pseudo_surround_enable"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
167 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
168
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
169 for (i = 0; i < pce->num_front_channel_elements; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
170 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
171 pce->front_element_is_cpe[i] = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
172 DEBUGVAR(1,26,"program_config_element(): front_element_is_cpe"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
173 pce->front_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
174 DEBUGVAR(1,27,"program_config_element(): front_element_tag_select"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
175
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
176 if (pce->front_element_is_cpe[i] & 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
177 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
178 pce->cpe_channel[pce->front_element_tag_select[i]] = pce->channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
179 pce->num_front_channels += 2;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
180 pce->channels += 2;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
181 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
182 pce->sce_channel[pce->front_element_tag_select[i]] = pce->channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
183 pce->num_front_channels++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
184 pce->channels++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
185 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
186 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
187
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
188 for (i = 0; i < pce->num_side_channel_elements; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
189 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
190 pce->side_element_is_cpe[i] = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
191 DEBUGVAR(1,28,"program_config_element(): side_element_is_cpe"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
192 pce->side_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
193 DEBUGVAR(1,29,"program_config_element(): side_element_tag_select"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
194
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
195 if (pce->side_element_is_cpe[i] & 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
196 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
197 pce->cpe_channel[pce->side_element_tag_select[i]] = pce->channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
198 pce->num_side_channels += 2;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
199 pce->channels += 2;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
200 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
201 pce->sce_channel[pce->side_element_tag_select[i]] = pce->channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
202 pce->num_side_channels++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
203 pce->channels++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
204 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
205 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
206
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
207 for (i = 0; i < pce->num_back_channel_elements; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
208 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
209 pce->back_element_is_cpe[i] = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
210 DEBUGVAR(1,30,"program_config_element(): back_element_is_cpe"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
211 pce->back_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
212 DEBUGVAR(1,31,"program_config_element(): back_element_tag_select"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
213
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
214 if (pce->back_element_is_cpe[i] & 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
215 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
216 pce->cpe_channel[pce->back_element_tag_select[i]] = pce->channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
217 pce->channels += 2;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
218 pce->num_back_channels += 2;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
219 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
220 pce->sce_channel[pce->back_element_tag_select[i]] = pce->channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
221 pce->num_back_channels++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
222 pce->channels++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
223 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
224 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
225
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
226 for (i = 0; i < pce->num_lfe_channel_elements; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
227 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
228 pce->lfe_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
229 DEBUGVAR(1,32,"program_config_element(): lfe_element_tag_select"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
230
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
231 pce->sce_channel[pce->lfe_element_tag_select[i]] = pce->channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
232 pce->num_lfe_channels++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
233 pce->channels++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
234 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
235
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
236 for (i = 0; i < pce->num_assoc_data_elements; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
237 pce->assoc_data_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
238 DEBUGVAR(1,33,"program_config_element(): assoc_data_element_tag_select"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
239
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
240 for (i = 0; i < pce->num_valid_cc_elements; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
241 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
242 pce->cc_element_is_ind_sw[i] = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
243 DEBUGVAR(1,34,"program_config_element(): cc_element_is_ind_sw"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
244 pce->valid_cc_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
245 DEBUGVAR(1,35,"program_config_element(): valid_cc_element_tag_select"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
246 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
247
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
248 faad_byte_align(ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
249
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
250 pce->comment_field_bytes = (uint8_t)faad_getbits(ld, 8
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
251 DEBUGVAR(1,36,"program_config_element(): comment_field_bytes"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
252
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
253 for (i = 0; i < pce->comment_field_bytes; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
254 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
255 pce->comment_field_data[i] = (uint8_t)faad_getbits(ld, 8
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
256 DEBUGVAR(1,37,"program_config_element(): comment_field_data"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
257 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
258 pce->comment_field_data[i] = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
259
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
260 return 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
261 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
262
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
263 element *decode_sce_lfe(faacDecHandle hDecoder,
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
264 faacDecFrameInfo *hInfo, bitfile *ld,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
265 real_t **spec_coef, uint8_t id_syn_ele)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
266 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
267 element *ele;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
268 uint8_t channels = hDecoder->fr_channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
269
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
270 if (channels+1 > MAX_CHANNELS)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
271 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
272 hInfo->error = 12;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
273 return NULL;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
274 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
275 if (hDecoder->fr_ch_ele+1 > MAX_SYNTAX_ELEMENTS)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
276 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
277 hInfo->error = 13;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
278 return NULL;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
279 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
280
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
281 spec_coef[channels] = (real_t*)malloc(hDecoder->frameLength*sizeof(real_t));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
282
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
283 ele = (element*)malloc(sizeof(element));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
284 memset(ele, 0, sizeof(element));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
285 ele->ele_id = id_syn_ele;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
286 ele->channel = channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
287 ele->paired_channel = -1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
288
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
289 hInfo->error = single_lfe_channel_element(hDecoder, ele,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
290 ld, spec_coef[channels]);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
291
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
292 if (hDecoder->pce_set)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
293 hDecoder->internal_channel[hDecoder->pce.sce_channel[ele->element_instance_tag]] = channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
294 else
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
295 hDecoder->internal_channel[channels] = channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
296
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
297 if (id_syn_ele == ID_SCE)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
298 hDecoder->channel_element[channels] = hDecoder->fr_ch_ele;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
299 else /* LFE */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
300 hDecoder->channel_element[channels] = hDecoder->fr_ch_ele;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
301
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
302 hDecoder->fr_channels++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
303 hDecoder->fr_ch_ele++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
304
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
305 return ele;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
306 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
307
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
308 element *decode_cpe(faacDecHandle hDecoder,
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
309 faacDecFrameInfo *hInfo, bitfile *ld,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
310 real_t **spec_coef, uint8_t id_syn_ele)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
311 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
312 element *ele;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
313 uint8_t channels = hDecoder->fr_channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
314
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
315 if (channels+2 > MAX_CHANNELS)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
316 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
317 hInfo->error = 12;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
318 return NULL;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
319 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
320 if (hDecoder->fr_ch_ele+1 > MAX_SYNTAX_ELEMENTS)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
321 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
322 hInfo->error = 13;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
323 return NULL;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
324 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
325
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
326 spec_coef[channels] = (real_t*)malloc(hDecoder->frameLength*sizeof(real_t));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
327 spec_coef[channels+1] = (real_t*)malloc(hDecoder->frameLength*sizeof(real_t));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
328
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
329 ele = (element*)malloc(sizeof(element));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
330 memset(ele, 0, sizeof(element));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
331 ele->ele_id = id_syn_ele;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
332 ele->channel = channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
333 ele->paired_channel = channels+1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
334
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
335 hInfo->error = channel_pair_element(hDecoder, ele,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
336 ld, spec_coef[channels], spec_coef[channels+1]);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
337
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
338 if (hDecoder->pce_set)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
339 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
340 hDecoder->internal_channel[hDecoder->pce.cpe_channel[ele->element_instance_tag]] = channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
341 hDecoder->internal_channel[hDecoder->pce.cpe_channel[ele->element_instance_tag]+1] = channels+1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
342 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
343 hDecoder->internal_channel[channels] = channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
344 hDecoder->internal_channel[channels+1] = channels+1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
345 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
346
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
347 hDecoder->channel_element[channels] = hDecoder->fr_ch_ele;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
348 hDecoder->channel_element[channels+1] = hDecoder->fr_ch_ele;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
349
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
350 hDecoder->fr_channels += 2;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
351 hDecoder->fr_ch_ele++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
352
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
353 return ele;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
354 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
355
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
356 element **raw_data_block(faacDecHandle hDecoder, faacDecFrameInfo *hInfo,
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
357 bitfile *ld, element **elements,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
358 real_t **spec_coef, program_config *pce, drc_info *drc)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
359 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
360 uint8_t id_syn_ele;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
361 uint8_t ch_ele = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
362
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
363 hDecoder->fr_channels = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
364 hDecoder->fr_ch_ele = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
365 hDecoder->first_syn_ele = 25;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
366 hDecoder->has_lfe = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
367
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
368 #ifdef ERROR_RESILIENCE
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
369 if (hDecoder->object_type < ER_OBJECT_START)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
370 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
371 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
372 /* Table 4.4.3: raw_data_block() */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
373 while ((id_syn_ele = (uint8_t)faad_getbits(ld, LEN_SE_ID
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
374 DEBUGVAR(1,4,"faacDecDecode(): id_syn_ele"))) != ID_END)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
375 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
376 switch (id_syn_ele) {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
377 case ID_SCE:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
378 if (hDecoder->first_syn_ele == 25) hDecoder->first_syn_ele = id_syn_ele;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
379 hDecoder->last_syn_ele = id_syn_ele;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
380 elements[ch_ele++] = decode_sce_lfe(hDecoder,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
381 hInfo, ld, spec_coef, id_syn_ele);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
382 if (hInfo->error > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
383 return elements;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
384 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
385 case ID_CPE:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
386 if (hDecoder->first_syn_ele == 25) hDecoder->first_syn_ele = id_syn_ele;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
387 hDecoder->last_syn_ele = id_syn_ele;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
388 elements[ch_ele++] = decode_cpe(hDecoder,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
389 hInfo, ld, spec_coef, id_syn_ele);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
390 if (hInfo->error > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
391 return elements;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
392 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
393 case ID_LFE:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
394 hDecoder->has_lfe++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
395 elements[ch_ele++] = decode_sce_lfe(hDecoder,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
396 hInfo, ld, spec_coef, id_syn_ele);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
397 if (hInfo->error > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
398 return elements;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
399 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
400 case ID_CCE: /* not implemented yet, but skip the bits */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
401 hInfo->error = coupling_channel_element(hDecoder, ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
402 if (hInfo->error > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
403 return elements;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
404 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
405 case ID_DSE:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
406 data_stream_element(hDecoder, ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
407 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
408 case ID_PCE:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
409 if ((hInfo->error = program_config_element(pce, ld)) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
410 return elements;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
411 hDecoder->pce_set = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
412 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
413 case ID_FIL:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
414 /* one sbr_info describes a channel_element not a channel! */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
415 if ((hInfo->error = fill_element(hDecoder, ld, drc
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
416 #ifdef SBR_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
417 , (ch_ele-1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
418 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
419 )) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
420 return elements;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
421 #ifdef SBR_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
422 if (hDecoder->sbr_used[ch_ele-1])
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
423 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
424 hDecoder->sbr_present_flag = 1;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
425 hDecoder->sbr[ch_ele-1]->sample_rate = get_sample_rate(hDecoder->sf_index);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
426 hDecoder->sbr[ch_ele-1]->sample_rate *= 2;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
427 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
428 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
429 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
430 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
431 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
432 #ifdef ERROR_RESILIENCE
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
433 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
434 /* Table 262: er_raw_data_block() */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
435 switch (hDecoder->channelConfiguration)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
436 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
437 case 1:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
438 elements[ch_ele++] = decode_sce_lfe(hDecoder,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
439 hInfo, ld, spec_coef, ID_SCE);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
440 if (hInfo->error > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
441 return elements;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
442 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
443 case 2:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
444 elements[ch_ele++] = decode_cpe(hDecoder,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
445 hInfo, ld, spec_coef, ID_CPE);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
446 if (hInfo->error > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
447 return elements;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
448 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
449 case 3:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
450 elements[ch_ele++] = decode_sce_lfe(hDecoder,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
451 hInfo, ld, spec_coef, ID_SCE);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
452 elements[ch_ele++] = decode_cpe(hDecoder,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
453 hInfo, ld, spec_coef, ID_CPE);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
454 if (hInfo->error > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
455 return elements;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
456 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
457 case 4:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
458 elements[ch_ele++] = decode_sce_lfe(hDecoder,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
459 hInfo, ld, spec_coef, ID_SCE);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
460 elements[ch_ele++] = decode_cpe(hDecoder,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
461 hInfo, ld, spec_coef, ID_CPE);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
462 elements[ch_ele++] = decode_sce_lfe(hDecoder,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
463 hInfo, ld, spec_coef, ID_SCE);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
464 if (hInfo->error > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
465 return elements;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
466 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
467 case 5:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
468 elements[ch_ele++] = decode_sce_lfe(hDecoder,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
469 hInfo, ld, spec_coef, ID_SCE);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
470 elements[ch_ele++] = decode_cpe(hDecoder,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
471 hInfo, ld, spec_coef, ID_CPE);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
472 elements[ch_ele++] = decode_cpe(hDecoder,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
473 hInfo, ld, spec_coef, ID_CPE);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
474 if (hInfo->error > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
475 return elements;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
476 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
477 case 6:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
478 elements[ch_ele++] = decode_sce_lfe(hDecoder,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
479 hInfo, ld, spec_coef, ID_SCE);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
480 elements[ch_ele++] = decode_cpe(hDecoder,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
481 hInfo, ld, spec_coef, ID_CPE);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
482 elements[ch_ele++] = decode_cpe(hDecoder,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
483 hInfo, ld, spec_coef, ID_CPE);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
484 elements[ch_ele++] = decode_sce_lfe(hDecoder,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
485 hInfo, ld, spec_coef, ID_LFE);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
486 if (hInfo->error > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
487 return elements;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
488 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
489 case 7:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
490 elements[ch_ele++] = decode_sce_lfe(hDecoder,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
491 hInfo, ld, spec_coef, ID_SCE);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
492 elements[ch_ele++] = decode_cpe(hDecoder,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
493 hInfo, ld, spec_coef, ID_CPE);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
494 elements[ch_ele++] = decode_cpe(hDecoder,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
495 hInfo, ld, spec_coef, ID_CPE);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
496 elements[ch_ele++] = decode_cpe(hDecoder,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
497 hInfo, ld, spec_coef, ID_CPE);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
498 elements[ch_ele++] = decode_sce_lfe(hDecoder,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
499 hInfo, ld, spec_coef, ID_LFE);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
500 if (hInfo->error > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
501 return elements;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
502 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
503 default:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
504 hInfo->error = 7;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
505 return elements;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
506 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
507 #if 0
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
508 cnt = bits_to_decode() / 8;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
509 while (cnt >= 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
510 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
511 cnt -= extension_payload(cnt);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
512 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
513 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
514 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
515 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
516
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
517 /* new in corrigendum 14496-3:2002 */
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
518 #ifdef DRM
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
519 if (hDecoder->object_type != DRM_ER_LC)
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
520 #endif
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
521 {
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
522 faad_byte_align(ld);
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
523 }
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
524
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
525 return elements;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
526 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
527
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
528 /* Table 4.4.4 and */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
529 /* Table 4.4.9 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
530 static uint8_t single_lfe_channel_element(faacDecHandle hDecoder,
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
531 element *sce, bitfile *ld,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
532 real_t *spec_coef)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
533 {
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
534 uint8_t retval = 0;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
535 ic_stream *ics = &(sce->ics1);
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
536 int16_t spec_data[1024];
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
537 #ifdef DRM
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
538 uint8_t result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
539
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
540 if (hDecoder->object_type != DRM_ER_LC)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
541 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
542 sce->element_instance_tag = (uint8_t)faad_getbits(ld, LEN_TAG
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
543 DEBUGVAR(1,38,"single_lfe_channel_element(): element_instance_tag"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
544
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
545 #ifdef DRM
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
546 if (hDecoder->object_type == DRM_ER_LC)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
547 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
548 individual_channel_stream(hDecoder, sce, ld, ics, 0, spec_data);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
549
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
550 if (ics->tns_data_present)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
551 tns_data(ics, &(ics->tns), ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
552
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
553 if ((result = faad_check_CRC( ld, faad_get_processed_bits(ld) - 8 )) > 0)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
554 return result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
555
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
556 /* error resilient spectral data decoding */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
557 if ((result = reordered_spectral_data(hDecoder, ics, ld, spec_data)) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
558 return result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
559
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
560 /* pulse coding reconstruction */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
561 if (ics->pulse_data_present)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
562 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
563 if (ics->window_sequence != EIGHT_SHORT_SEQUENCE)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
564 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
565 if ((result = pulse_decode(ics, spec_data, hDecoder->frameLength)) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
566 return result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
567 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
568 return 2; /* pulse coding not allowed for short blocks */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
569 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
570 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
571 } else
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
572 #endif
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
573 {
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
574 retval = individual_channel_stream(hDecoder, sce, ld, ics, 0, spec_data);
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
575 if (retval > 0)
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
576 return retval;
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
577 }
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
578
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
579
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
580 /* noiseless coding is done, spectral reconstruction is done now */
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
581
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
582 /* inverse quantization */
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
583 inverse_quantization(spec_coef, spec_data, hDecoder->frameLength);
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
584
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
585 /* apply scalefactors */
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
586 apply_scalefactors(hDecoder, ics, spec_coef, hDecoder->frameLength);
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
587
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
588 /* deinterleave short block grouping */
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
589 if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
590 quant_to_spec(ics, spec_coef, hDecoder->frameLength);
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
591
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
592 return 0;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
593 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
594
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
595 /* Table 4.4.5 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
596 static uint8_t channel_pair_element(faacDecHandle hDecoder, element *cpe,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
597 bitfile *ld,
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
598 real_t *spec_coef1, real_t *spec_coef2)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
599 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
600 uint8_t result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
601 ic_stream *ics1 = &(cpe->ics1);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
602 ic_stream *ics2 = &(cpe->ics2);
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
603 int16_t spec_data1[1024];
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
604 int16_t spec_data2[1024];
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
605
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
606 #ifdef DRM
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
607 if (hDecoder->object_type != DRM_ER_LC)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
608 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
609 cpe->element_instance_tag = (uint8_t)faad_getbits(ld, LEN_TAG
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
610 DEBUGVAR(1,39,"channel_pair_element(): element_instance_tag"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
611
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
612 if ((cpe->common_window = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
613 DEBUGVAR(1,40,"channel_pair_element(): common_window"))) & 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
614 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
615 /* both channels have common ics information */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
616 if ((result = ics_info(hDecoder, ics1, ld, cpe->common_window)) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
617 return result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
618
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
619 ics1->ms_mask_present = (uint8_t)faad_getbits(ld, 2
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
620 DEBUGVAR(1,41,"channel_pair_element(): ms_mask_present"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
621 if (ics1->ms_mask_present == 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
622 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
623 uint8_t g, sfb;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
624 for (g = 0; g < ics1->num_window_groups; g++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
625 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
626 for (sfb = 0; sfb < ics1->max_sfb; sfb++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
627 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
628 ics1->ms_used[g][sfb] = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
629 DEBUGVAR(1,42,"channel_pair_element(): faad_get1bit"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
630 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
631 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
632 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
633
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
634 #ifdef ERROR_RESILIENCE
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
635 if ((hDecoder->object_type >= ER_OBJECT_START) && (ics1->predictor_data_present))
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
636 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
637 if ((ics1->ltp.data_present = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
638 DEBUGVAR(1,50,"channel_pair_element(): ltp.data_present"))) & 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
639 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
640 ltp_data(hDecoder, ics1, &(ics1->ltp), ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
641 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
642 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
643 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
644
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
645 memcpy(ics2, ics1, sizeof(ic_stream));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
646 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
647 ics1->ms_mask_present = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
648 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
649
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
650 if ((result = individual_channel_stream(hDecoder, cpe, ld, ics1,
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
651 0, spec_data1)) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
652 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
653 return result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
654 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
655
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
656 #ifdef ERROR_RESILIENCE
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
657 if (cpe->common_window && (hDecoder->object_type >= ER_OBJECT_START) &&
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
658 (ics1->predictor_data_present))
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
659 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
660 if ((ics1->ltp2.data_present = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
661 DEBUGVAR(1,50,"channel_pair_element(): ltp.data_present"))) & 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
662 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
663 ltp_data(hDecoder, ics1, &(ics1->ltp2), ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
664 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
665 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
666 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
667
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
668 if ((result = individual_channel_stream(hDecoder, cpe, ld, ics2,
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
669 0, spec_data2)) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
670 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
671 return result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
672 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
673
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
674 #ifdef DRM
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
675 if (hDecoder->object_type == DRM_ER_LC)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
676 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
677 if (ics1->tns_data_present)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
678 tns_data(ics1, &(ics1->tns), ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
679
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
680 if (ics1->tns_data_present)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
681 tns_data(ics2, &(ics2->tns), ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
682
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
683 if ((result = faad_check_CRC( ld, faad_get_processed_bits(ld) - 8 )) > 0)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
684 return result;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
685
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
686 /* error resilient spectral data decoding */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
687 if ((result = reordered_spectral_data(hDecoder, ics1, ld, spec_data1)) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
688 return result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
689 if ((result = reordered_spectral_data(hDecoder, ics2, ld, spec_data2)) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
690 return result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
691 /* pulse coding reconstruction */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
692 if (ics1->pulse_data_present)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
693 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
694 if (ics1->window_sequence != EIGHT_SHORT_SEQUENCE)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
695 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
696 if ((result = pulse_decode(ics1, spec_data1, hDecoder->frameLength)) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
697 return result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
698 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
699 return 2; /* pulse coding not allowed for short blocks */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
700 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
701 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
702 if (ics2->pulse_data_present)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
703 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
704 if (ics2->window_sequence != EIGHT_SHORT_SEQUENCE)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
705 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
706 if ((result = pulse_decode(ics2, spec_data2, hDecoder->frameLength)) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
707 return result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
708 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
709 return 2; /* pulse coding not allowed for short blocks */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
710 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
711 }
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
712 }
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
713 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
714
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
715 /* noiseless coding is done, spectral reconstruction is done now */
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
716
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
717 /* inverse quantization */
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
718 inverse_quantization(spec_coef1, spec_data1, hDecoder->frameLength);
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
719 inverse_quantization(spec_coef2, spec_data2, hDecoder->frameLength);
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
720
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
721 /* apply scalefactors */
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
722 apply_scalefactors(hDecoder, ics1, spec_coef1, hDecoder->frameLength);
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
723 apply_scalefactors(hDecoder, ics2, spec_coef2, hDecoder->frameLength);
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
724
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
725 /* deinterleave short block grouping */
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
726 if (ics1->window_sequence == EIGHT_SHORT_SEQUENCE)
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
727 quant_to_spec(ics1, spec_coef1, hDecoder->frameLength);
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
728 if (ics2->window_sequence == EIGHT_SHORT_SEQUENCE)
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
729 quant_to_spec(ics2, spec_coef2, hDecoder->frameLength);
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
730
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
731 return 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
732 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
733
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
734 static uint8_t pred_sfb_max[] =
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
735 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
736 33, /* 96000 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
737 33, /* 88200 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
738 38, /* 64000 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
739 40, /* 48000 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
740 40, /* 44100 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
741 40, /* 32000 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
742 41, /* 24000 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
743 41, /* 22050 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
744 37, /* 16000 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
745 37, /* 12000 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
746 37, /* 11025 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
747 34 /* 8000 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
748 };
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
749
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
750 /* Table 4.4.6 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
751 static uint8_t ics_info(faacDecHandle hDecoder, ic_stream *ics, bitfile *ld,
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
752 uint8_t common_window)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
753 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
754 uint8_t retval = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
755
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
756 /* ics->ics_reserved_bit = */ faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
757 DEBUGVAR(1,43,"ics_info(): ics_reserved_bit"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
758 ics->window_sequence = (uint8_t)faad_getbits(ld, 2
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
759 DEBUGVAR(1,44,"ics_info(): window_sequence"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
760 ics->window_shape = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
761 DEBUGVAR(1,45,"ics_info(): window_shape"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
762
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
763 if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
764 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
765 ics->max_sfb = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
766 DEBUGVAR(1,46,"ics_info(): max_sfb (short)"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
767 ics->scale_factor_grouping = (uint8_t)faad_getbits(ld, 7
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
768 DEBUGVAR(1,47,"ics_info(): scale_factor_grouping"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
769 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
770 ics->max_sfb = (uint8_t)faad_getbits(ld, 6
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
771 DEBUGVAR(1,48,"ics_info(): max_sfb (long)"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
772 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
773
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
774 /* get the grouping information */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
775 if ((retval = window_grouping_info(hDecoder, ics)) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
776 return retval;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
777
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
778 /* should be an error */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
779 /* check the range of max_sfb */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
780 if (ics->max_sfb > ics->num_swb)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
781 return 16;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
782
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
783 if (ics->window_sequence != EIGHT_SHORT_SEQUENCE)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
784 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
785 if ((ics->predictor_data_present = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
786 DEBUGVAR(1,49,"ics_info(): predictor_data_present"))) & 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
787 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
788 if (hDecoder->object_type == MAIN) /* MPEG2 style AAC predictor */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
789 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
790 uint8_t sfb;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
791
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
792 ics->pred.limit = min(ics->max_sfb, pred_sfb_max[hDecoder->sf_index]);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
793
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
794 if ((ics->pred.predictor_reset = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
795 DEBUGVAR(1,53,"ics_info(): pred.predictor_reset"))) & 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
796 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
797 ics->pred.predictor_reset_group_number = (uint8_t)faad_getbits(ld, 5
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
798 DEBUGVAR(1,54,"ics_info(): pred.predictor_reset_group_number"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
799 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
800
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
801 for (sfb = 0; sfb < ics->pred.limit; sfb++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
802 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
803 ics->pred.prediction_used[sfb] = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
804 DEBUGVAR(1,55,"ics_info(): pred.prediction_used"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
805 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
806 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
807 #ifdef LTP_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
808 else { /* Long Term Prediction */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
809 if (hDecoder->object_type < ER_OBJECT_START)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
810 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
811 if ((ics->ltp.data_present = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
812 DEBUGVAR(1,50,"ics_info(): ltp.data_present"))) & 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
813 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
814 ltp_data(hDecoder, ics, &(ics->ltp), ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
815 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
816 if (common_window)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
817 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
818 if ((ics->ltp2.data_present = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
819 DEBUGVAR(1,51,"ics_info(): ltp2.data_present"))) & 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
820 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
821 ltp_data(hDecoder, ics, &(ics->ltp2), ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
822 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
823 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
824 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
825 #ifdef ERROR_RESILIENCE
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
826 if (!common_window && (hDecoder->object_type >= ER_OBJECT_START))
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
827 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
828 if ((ics->ltp.data_present = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
829 DEBUGVAR(1,50,"ics_info(): ltp.data_present"))) & 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
830 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
831 ltp_data(hDecoder, ics, &(ics->ltp), ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
832 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
833 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
834 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
835 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
836 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
837 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
838 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
839
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
840 return retval;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
841 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
842
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
843 /* Table 4.4.7 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
844 static uint8_t pulse_data(ic_stream *ics, pulse_info *pul, bitfile *ld)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
845 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
846 uint8_t i;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
847
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
848 pul->number_pulse = (uint8_t)faad_getbits(ld, 2
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
849 DEBUGVAR(1,56,"pulse_data(): number_pulse"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
850 pul->pulse_start_sfb = (uint8_t)faad_getbits(ld, 6
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
851 DEBUGVAR(1,57,"pulse_data(): pulse_start_sfb"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
852
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
853 /* check the range of pulse_start_sfb */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
854 if (pul->pulse_start_sfb > ics->num_swb)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
855 return 16;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
856
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
857 for (i = 0; i < pul->number_pulse+1; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
858 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
859 pul->pulse_offset[i] = (uint8_t)faad_getbits(ld, 5
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
860 DEBUGVAR(1,58,"pulse_data(): pulse_offset"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
861 pul->pulse_amp[i] = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
862 DEBUGVAR(1,59,"pulse_data(): pulse_amp"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
863 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
864
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
865 return 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
866 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
867
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
868 /* Table 4.4.8: Currently just for skipping the bits... */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
869 static uint8_t coupling_channel_element(faacDecHandle hDecoder, bitfile *ld)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
870 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
871 uint8_t c, result = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
872 uint8_t ind_sw_cce_flag = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
873 uint8_t num_gain_element_lists = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
874 uint8_t num_coupled_elements = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
875
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
876 element el_empty;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
877 ic_stream ics_empty;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
878 int16_t sh_data[1024];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
879
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
880 memset(&el_empty, 0, sizeof(element));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
881 memset(&ics_empty, 0, sizeof(ic_stream));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
882
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
883 c = faad_getbits(ld, LEN_TAG
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
884 DEBUGVAR(1,900,"coupling_channel_element(): element_instance_tag"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
885
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
886 ind_sw_cce_flag = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
887 DEBUGVAR(1,901,"coupling_channel_element(): ind_sw_cce_flag"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
888 num_coupled_elements = faad_getbits(ld, 3
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
889 DEBUGVAR(1,902,"coupling_channel_element(): num_coupled_elements"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
890
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
891 for (c = 0; c < num_coupled_elements + 1; c++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
892 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
893 uint8_t cc_target_is_cpe, cc_target_tag_select;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
894
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
895 num_gain_element_lists++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
896
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
897 cc_target_is_cpe = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
898 DEBUGVAR(1,903,"coupling_channel_element(): cc_target_is_cpe"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
899 cc_target_tag_select = faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
900 DEBUGVAR(1,904,"coupling_channel_element(): cc_target_tag_select"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
901
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
902 if (cc_target_is_cpe)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
903 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
904 uint8_t cc_l = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
905 DEBUGVAR(1,905,"coupling_channel_element(): cc_l"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
906 uint8_t cc_r = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
907 DEBUGVAR(1,906,"coupling_channel_element(): cc_r"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
908
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
909 if (cc_l && cc_r)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
910 num_gain_element_lists++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
911 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
912 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
913
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
914 faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
915 DEBUGVAR(1,907,"coupling_channel_element(): cc_domain"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
916 faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
917 DEBUGVAR(1,908,"coupling_channel_element(): gain_element_sign"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
918 faad_getbits(ld, 2
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
919 DEBUGVAR(1,909,"coupling_channel_element(): gain_element_scale"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
920
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
921 if ((result = individual_channel_stream(hDecoder, &el_empty, ld, &ics_empty,
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
922 0, sh_data)) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
923 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
924 return result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
925 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
926
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
927 for (c = 1; c < num_gain_element_lists; c++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
928 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
929 uint8_t cge;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
930
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
931 if (ind_sw_cce_flag)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
932 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
933 cge = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
934 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
935 cge = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
936 DEBUGVAR(1,910,"coupling_channel_element(): common_gain_element_present"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
937 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
938
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
939 if (cge)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
940 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
941 huffman_scale_factor(ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
942 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
943 uint8_t g, sfb;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
944
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
945 for (g = 0; g < ics_empty.num_window_groups; g++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
946 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
947 for (sfb = 0; sfb < ics_empty.max_sfb; sfb++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
948 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
949 if (ics_empty.sfb_cb[g][sfb] != ZERO_HCB)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
950 huffman_scale_factor(ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
951 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
952 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
953 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
954 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
955
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
956 return 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
957 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
958
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
959 /* Table 4.4.10 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
960 static uint16_t data_stream_element(faacDecHandle hDecoder, bitfile *ld)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
961 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
962 uint8_t byte_aligned;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
963 uint16_t i, count;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
964
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
965 /* element_instance_tag = */ faad_getbits(ld, LEN_TAG
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
966 DEBUGVAR(1,60,"data_stream_element(): element_instance_tag"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
967 byte_aligned = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
968 DEBUGVAR(1,61,"data_stream_element(): byte_aligned"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
969 count = (uint16_t)faad_getbits(ld, 8
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
970 DEBUGVAR(1,62,"data_stream_element(): count"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
971 if (count == 255)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
972 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
973 count += (uint16_t)faad_getbits(ld, 8
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
974 DEBUGVAR(1,63,"data_stream_element(): extra count"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
975 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
976 if (byte_aligned)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
977 faad_byte_align(ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
978
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
979 for (i = 0; i < count; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
980 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
981 uint8_t data = faad_getbits(ld, LEN_BYTE
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
982 DEBUGVAR(1,64,"data_stream_element(): data_stream_byte"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
983 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
984
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
985 return count;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
986 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
987
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
988 /* Table 4.4.11 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
989 static uint8_t fill_element(faacDecHandle hDecoder, bitfile *ld, drc_info *drc
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
990 #ifdef SBR_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
991 ,uint8_t sbr_ele
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
992 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
993 )
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
994 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
995 uint16_t count;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
996 #ifdef SBR_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
997 uint8_t bs_extension_type;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
998 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
999
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1000 count = (uint16_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1001 DEBUGVAR(1,65,"fill_element(): count"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1002 if (count == 15)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1003 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1004 count += (uint16_t)faad_getbits(ld, 8
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1005 DEBUGVAR(1,66,"fill_element(): extra count")) - 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1006 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1007
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1008 if (count > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1009 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1010 #ifdef SBR_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1011 hDecoder->sbr_used[sbr_ele] = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1012 bs_extension_type = (uint8_t)faad_showbits(ld, 4);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1013
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1014 if ((bs_extension_type == EXT_SBR_DATA) ||
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1015 (bs_extension_type == EXT_SBR_DATA_CRC))
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1016 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1017 hDecoder->sbr_used[sbr_ele] = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1018
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1019 if (!hDecoder->sbr[sbr_ele])
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1020 {
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1021 hDecoder->sbr[sbr_ele] = sbrDecodeInit(hDecoder->frameLength
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1022 #ifdef DRM
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1023 , 0
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1024 #endif
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1025 );
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1026 }
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1027
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1028 /* read in all the SBR data for processing later on */
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1029 hDecoder->sbr[sbr_ele]->data = (uint8_t*)faad_getbitbuffer(ld, count*8);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1030 hDecoder->sbr[sbr_ele]->data_size = count;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1031 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1032 hDecoder->sbr_used[sbr_ele] = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1033 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1034 while (count > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1035 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1036 count -= extension_payload(ld, drc, count);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1037 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1038 #ifdef SBR_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1039 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1040 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1041 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1042
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1043 return 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1044 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1045
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1046 /* Table 4.4.12 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1047 #ifdef SSR_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1048 static void gain_control_data(bitfile *ld, ic_stream *ics)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1049 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1050 uint8_t bd, wd, ad;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1051 ssr_info *ssr = &(ics->ssr);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1052
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1053 ssr->max_band = (uint8_t)faad_getbits(ld, 2
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1054 DEBUGVAR(1,1000,"gain_control_data(): max_band"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1055
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1056 if (ics->window_sequence == ONLY_LONG_SEQUENCE)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1057 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1058 for (bd = 1; bd <= ssr->max_band; bd++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1059 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1060 for (wd = 0; wd < 1; wd++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1061 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1062 ssr->adjust_num[bd][wd] = (uint8_t)faad_getbits(ld, 3
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1063 DEBUGVAR(1,1001,"gain_control_data(): adjust_num"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1064
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1065 for (ad = 0; ad < ssr->adjust_num[bd][wd]; ad++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1066 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1067 ssr->alevcode[bd][wd][ad] = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1068 DEBUGVAR(1,1002,"gain_control_data(): alevcode"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1069 ssr->aloccode[bd][wd][ad] = (uint8_t)faad_getbits(ld, 5
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1070 DEBUGVAR(1,1003,"gain_control_data(): aloccode"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1071 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1072 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1073 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1074 } else if (ics->window_sequence == LONG_START_SEQUENCE) {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1075 for (bd = 1; bd <= ssr->max_band; bd++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1076 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1077 for (wd = 0; wd < 2; wd++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1078 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1079 ssr->adjust_num[bd][wd] = (uint8_t)faad_getbits(ld, 3
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1080 DEBUGVAR(1,1001,"gain_control_data(): adjust_num"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1081
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1082 for (ad = 0; ad < ssr->adjust_num[bd][wd]; ad++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1083 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1084 ssr->alevcode[bd][wd][ad] = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1085 DEBUGVAR(1,1002,"gain_control_data(): alevcode"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1086 if (wd == 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1087 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1088 ssr->aloccode[bd][wd][ad] = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1089 DEBUGVAR(1,1003,"gain_control_data(): aloccode"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1090 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1091 ssr->aloccode[bd][wd][ad] = (uint8_t)faad_getbits(ld, 2
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1092 DEBUGVAR(1,1003,"gain_control_data(): aloccode"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1093 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1094 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1095 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1096 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1097 } else if (ics->window_sequence == EIGHT_SHORT_SEQUENCE) {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1098 for (bd = 1; bd <= ssr->max_band; bd++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1099 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1100 for (wd = 0; wd < 8; wd++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1101 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1102 ssr->adjust_num[bd][wd] = (uint8_t)faad_getbits(ld, 3
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1103 DEBUGVAR(1,1001,"gain_control_data(): adjust_num"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1104
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1105 for (ad = 0; ad < ssr->adjust_num[bd][wd]; ad++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1106 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1107 ssr->alevcode[bd][wd][ad] = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1108 DEBUGVAR(1,1002,"gain_control_data(): alevcode"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1109 ssr->aloccode[bd][wd][ad] = (uint8_t)faad_getbits(ld, 2
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1110 DEBUGVAR(1,1003,"gain_control_data(): aloccode"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1111 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1112 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1113 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1114 } else if (ics->window_sequence == LONG_STOP_SEQUENCE) {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1115 for (bd = 1; bd <= ssr->max_band; bd++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1116 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1117 for (wd = 0; wd < 2; wd++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1118 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1119 ssr->adjust_num[bd][wd] = (uint8_t)faad_getbits(ld, 3
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1120 DEBUGVAR(1,1001,"gain_control_data(): adjust_num"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1121
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1122 for (ad = 0; ad < ssr->adjust_num[bd][wd]; ad++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1123 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1124 ssr->alevcode[bd][wd][ad] = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1125 DEBUGVAR(1,1002,"gain_control_data(): alevcode"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1126
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1127 if (wd == 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1128 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1129 ssr->aloccode[bd][wd][ad] = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1130 DEBUGVAR(1,1003,"gain_control_data(): aloccode"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1131 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1132 ssr->aloccode[bd][wd][ad] = (uint8_t)faad_getbits(ld, 5
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1133 DEBUGVAR(1,1003,"gain_control_data(): aloccode"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1134 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1135 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1136 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1137 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1138 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1139 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1140 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1141
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1142 /* Table 4.4.24 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1143 static uint8_t individual_channel_stream(faacDecHandle hDecoder, element *ele,
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1144 bitfile *ld, ic_stream *ics, uint8_t scal_flag,
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1145 int16_t *spec_data)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1146 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1147 uint8_t result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1148
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1149 ics->global_gain = (uint8_t)faad_getbits(ld, 8
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1150 DEBUGVAR(1,67,"individual_channel_stream(): global_gain"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1151
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1152 if (!ele->common_window && !scal_flag)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1153 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1154 if ((result = ics_info(hDecoder, ics, ld, ele->common_window)) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1155 return result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1156 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1157
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1158 if ((result = section_data(hDecoder, ics, ld)) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1159 return result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1160
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1161 if ((result = scale_factor_data(hDecoder, ics, ld)) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1162 return result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1163
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1164 if (!scal_flag)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1165 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1166 /**
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1167 ** NOTE: It could be that pulse data is available in scalable AAC too,
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1168 ** as said in Amendment 1, this could be only the case for ER AAC,
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1169 ** though. (have to check this out later)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1170 **/
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1171 /* get pulse data */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1172 if ((ics->pulse_data_present = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1173 DEBUGVAR(1,68,"individual_channel_stream(): pulse_data_present"))) & 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1174 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1175 if ((result = pulse_data(ics, &(ics->pul), ld)) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1176 return result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1177 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1178
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1179 /* get tns data */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1180 if ((ics->tns_data_present = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1181 DEBUGVAR(1,69,"individual_channel_stream(): tns_data_present"))) & 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1182 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1183 #ifdef ERROR_RESILIENCE
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1184 if (hDecoder->object_type < ER_OBJECT_START)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1185 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1186 tns_data(ics, &(ics->tns), ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1187 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1188
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1189 /* get gain control data */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1190 if ((ics->gain_control_data_present = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1191 DEBUGVAR(1,70,"individual_channel_stream(): gain_control_data_present"))) & 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1192 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1193 #ifdef SSR_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1194 if (hDecoder->object_type != SSR)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1195 return 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1196 else
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1197 gain_control_data(ld, ics);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1198 #else
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1199 return 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1200 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1201 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1202 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1203
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1204 #ifdef ERROR_RESILIENCE
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1205 if (hDecoder->aacSpectralDataResilienceFlag)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1206 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1207 ics->length_of_reordered_spectral_data = (uint16_t)faad_getbits(ld, 14
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1208 DEBUGVAR(1,147,"individual_channel_stream(): length_of_reordered_spectral_data"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1209
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1210 if (hDecoder->channelConfiguration == 2)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1211 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1212 if (ics->length_of_reordered_spectral_data > 6144)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1213 ics->length_of_reordered_spectral_data = 6144;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1214 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1215 if (ics->length_of_reordered_spectral_data > 12288)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1216 ics->length_of_reordered_spectral_data = 12288;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1217 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1218
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1219 ics->length_of_longest_codeword = (uint8_t)faad_getbits(ld, 6
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1220 DEBUGVAR(1,148,"individual_channel_stream(): length_of_longest_codeword"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1221 if (ics->length_of_longest_codeword >= 49)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1222 ics->length_of_longest_codeword = 49;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1223 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1224
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1225 /* RVLC spectral data is put here */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1226 if (hDecoder->aacScalefactorDataResilienceFlag)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1227 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1228 if ((result = rvlc_decode_scale_factors(ics, ld)) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1229 return result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1230 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1231
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1232 #ifdef DRM
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1233 if (hDecoder->object_type == DRM_ER_LC)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1234 return 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1235 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1236
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1237 if (hDecoder->object_type >= ER_OBJECT_START)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1238 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1239 if (ics->tns_data_present)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1240 tns_data(ics, &(ics->tns), ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1241 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1242
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1243 if (hDecoder->aacSpectralDataResilienceFlag)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1244 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1245 /* error resilient spectral data decoding */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1246 if ((result = reordered_spectral_data(hDecoder, ics, ld, spec_data)) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1247 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1248 return result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1249 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1250 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1251 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1252 /* decode the spectral data */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1253 if ((result = spectral_data(hDecoder, ics, ld, spec_data)) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1254 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1255 return result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1256 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1257 #ifdef ERROR_RESILIENCE
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1258 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1259 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1260
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1261 /* pulse coding reconstruction */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1262 if (ics->pulse_data_present)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1263 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1264 if (ics->window_sequence != EIGHT_SHORT_SEQUENCE)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1265 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1266 if ((result = pulse_decode(ics, spec_data, hDecoder->frameLength)) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1267 return result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1268 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1269 return 2; /* pulse coding not allowed for short blocks */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1270 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1271 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1272
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1273 return 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1274 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1275
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1276 /* Table 4.4.25 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1277 static uint8_t section_data(faacDecHandle hDecoder, ic_stream *ics, bitfile *ld)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1278 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1279 uint8_t g;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1280 uint8_t sect_esc_val, sect_bits;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1281
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1282 if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1283 sect_bits = 3;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1284 else
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1285 sect_bits = 5;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1286 sect_esc_val = (1<<sect_bits) - 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1287
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1288 #if 0
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1289 printf("\ntotal sfb %d\n", ics->max_sfb);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1290 printf(" sect top cb\n");
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1291 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1292
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1293 for (g = 0; g < ics->num_window_groups; g++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1294 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1295 uint8_t k = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1296 uint8_t i = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1297
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1298 while (k < ics->max_sfb)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1299 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1300 #ifdef ERROR_RESILIENCE
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1301 uint8_t vcb11 = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1302 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1303 uint8_t sfb;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1304 uint8_t sect_len_incr;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1305 uint16_t sect_len = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1306 uint8_t sect_cb_bits = 4;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1307
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1308 /* if "faad_getbits" detects error and returns "0", "k" is never
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1309 incremented and we cannot leave the while loop */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1310 if ((ld->error != 0) || (ld->no_more_reading))
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1311 return 14;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1312
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1313 #ifdef ERROR_RESILIENCE
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1314 if (hDecoder->aacSectionDataResilienceFlag)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1315 sect_cb_bits = 5;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1316 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1317
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1318 ics->sect_cb[g][i] = (uint8_t)faad_getbits(ld, sect_cb_bits
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1319 DEBUGVAR(1,71,"section_data(): sect_cb"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1320
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1321 if (ics->sect_cb[g][i] == NOISE_HCB)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1322 ics->noise_used = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1323
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1324 #ifdef ERROR_RESILIENCE
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1325 if (hDecoder->aacSectionDataResilienceFlag)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1326 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1327 if ((ics->sect_cb[g][i] == 11) ||
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1328 ((ics->sect_cb[g][i] >= 16) && (ics->sect_cb[g][i] <= 32)))
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1329 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1330 vcb11 = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1331 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1332 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1333 if (vcb11)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1334 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1335 sect_len_incr = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1336 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1337 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1338 sect_len_incr = (uint8_t)faad_getbits(ld, sect_bits
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1339 DEBUGVAR(1,72,"section_data(): sect_len_incr"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1340 #ifdef ERROR_RESILIENCE
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1341 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1342 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1343 while ((sect_len_incr == sect_esc_val) /* &&
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1344 (k+sect_len < ics->max_sfb)*/)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1345 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1346 sect_len += sect_len_incr;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1347 sect_len_incr = (uint8_t)faad_getbits(ld, sect_bits
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1348 DEBUGVAR(1,72,"section_data(): sect_len_incr"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1349 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1350
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1351 sect_len += sect_len_incr;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1352
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1353 ics->sect_start[g][i] = k;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1354 ics->sect_end[g][i] = k + sect_len;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1355
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1356 if (k + sect_len >= 8*15)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1357 return 15;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1358 if (i >= 8*15)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1359 return 15;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1360
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1361 for (sfb = k; sfb < k + sect_len; sfb++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1362 ics->sfb_cb[g][sfb] = ics->sect_cb[g][i];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1363
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1364 #if 0
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1365 printf(" %6d %6d %6d\n",
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1366 i,
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1367 ics->sect_end[g][i],
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1368 ics->sect_cb[g][i]);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1369 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1370
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1371 k += sect_len;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1372 i++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1373 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1374 ics->num_sec[g] = i;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1375 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1376
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1377 #if 0
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1378 printf("\n");
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1379 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1380
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1381 return 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1382 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1383
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1384 /*
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1385 * decode_scale_factors()
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1386 * decodes the scalefactors from the bitstream
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1387 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1388 /*
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1389 * All scalefactors (and also the stereo positions and pns energies) are
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1390 * transmitted using Huffman coded DPCM relative to the previous active
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1391 * scalefactor (respectively previous stereo position or previous pns energy,
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1392 * see subclause 4.6.2 and 4.6.3). The first active scalefactor is
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1393 * differentially coded relative to the global gain.
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1394 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1395 static uint8_t decode_scale_factors(ic_stream *ics, bitfile *ld)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1396 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1397 uint8_t g, sfb;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1398 int16_t t;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1399 int8_t noise_pcm_flag = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1400
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1401 int16_t scale_factor = ics->global_gain;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1402 int16_t is_position = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1403 int16_t noise_energy = ics->global_gain - 90;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1404
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1405 for (g = 0; g < ics->num_window_groups; g++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1406 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1407 for (sfb = 0; sfb < ics->max_sfb; sfb++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1408 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1409 switch (ics->sfb_cb[g][sfb])
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1410 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1411 case ZERO_HCB: /* zero book */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1412 ics->scale_factors[g][sfb] = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1413 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1414 case INTENSITY_HCB: /* intensity books */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1415 case INTENSITY_HCB2:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1416
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1417 /* decode intensity position */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1418 t = huffman_scale_factor(ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1419 if (t < 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1420 return 9;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1421 is_position += (t - 60);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1422 ics->scale_factors[g][sfb] = is_position;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1423
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1424 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1425 case NOISE_HCB: /* noise books */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1426
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1427 /* decode noise energy */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1428 if (noise_pcm_flag)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1429 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1430 noise_pcm_flag = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1431 t = (int16_t)faad_getbits(ld, 9
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1432 DEBUGVAR(1,73,"scale_factor_data(): first noise")) - 256;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1433 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1434 t = huffman_scale_factor(ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1435 if (t < 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1436 return 9;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1437 t -= 60;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1438 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1439 noise_energy += t;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1440 ics->scale_factors[g][sfb] = noise_energy;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1441
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1442 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1443 default: /* spectral books */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1444
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1445 /* decode scale factor */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1446 t = huffman_scale_factor(ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1447 if (t < 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1448 return 9;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1449 scale_factor += (t - 60);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1450 if (scale_factor < 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1451 return 4;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1452 ics->scale_factors[g][sfb] = scale_factor;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1453
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1454 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1455 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1456 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1457 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1458
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1459 return 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1460 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1461
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1462 /* Table 4.4.26 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1463 static uint8_t scale_factor_data(faacDecHandle hDecoder, ic_stream *ics, bitfile *ld)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1464 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1465 #ifdef ERROR_RESILIENCE
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1466 if (!hDecoder->aacScalefactorDataResilienceFlag)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1467 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1468 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1469 return decode_scale_factors(ics, ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1470 #ifdef ERROR_RESILIENCE
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1471 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1472 /* In ER AAC the parameters for RVLC are seperated from the actual
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1473 data that holds the scale_factors.
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1474 Strangely enough, 2 parameters for HCR are put inbetween them.
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1475 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1476 return rvlc_scale_factor_data(ics, ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1477 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1478 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1479 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1480
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1481 /* Table 4.4.27 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1482 static void tns_data(ic_stream *ics, tns_info *tns, bitfile *ld)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1483 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1484 uint8_t w, filt, i, start_coef_bits, coef_bits;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1485 uint8_t n_filt_bits = 2;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1486 uint8_t length_bits = 6;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1487 uint8_t order_bits = 5;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1488
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1489 if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1490 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1491 n_filt_bits = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1492 length_bits = 4;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1493 order_bits = 3;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1494 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1495
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1496 for (w = 0; w < ics->num_windows; w++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1497 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1498 tns->n_filt[w] = (uint8_t)faad_getbits(ld, n_filt_bits
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1499 DEBUGVAR(1,74,"tns_data(): n_filt"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1500
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1501 if (tns->n_filt[w])
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1502 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1503 if ((tns->coef_res[w] = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1504 DEBUGVAR(1,75,"tns_data(): coef_res"))) & 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1505 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1506 start_coef_bits = 4;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1507 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1508 start_coef_bits = 3;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1509 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1510 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1511
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1512 for (filt = 0; filt < tns->n_filt[w]; filt++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1513 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1514 tns->length[w][filt] = (uint8_t)faad_getbits(ld, length_bits
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1515 DEBUGVAR(1,76,"tns_data(): length"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1516 tns->order[w][filt] = (uint8_t)faad_getbits(ld, order_bits
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1517 DEBUGVAR(1,77,"tns_data(): order"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1518 if (tns->order[w][filt])
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1519 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1520 tns->direction[w][filt] = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1521 DEBUGVAR(1,78,"tns_data(): direction"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1522 tns->coef_compress[w][filt] = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1523 DEBUGVAR(1,79,"tns_data(): coef_compress"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1524
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1525 coef_bits = start_coef_bits - tns->coef_compress[w][filt];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1526 for (i = 0; i < tns->order[w][filt]; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1527 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1528 tns->coef[w][filt][i] = (uint8_t)faad_getbits(ld, coef_bits
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1529 DEBUGVAR(1,80,"tns_data(): coef"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1530 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1531 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1532 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1533 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1534 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1535
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1536 #ifdef LTP_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1537 /* Table 4.4.28 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1538 static void ltp_data(faacDecHandle hDecoder, ic_stream *ics, ltp_info *ltp, bitfile *ld)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1539 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1540 uint8_t sfb, w;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1541
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1542 #ifdef LD_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1543 if (hDecoder->object_type == LD)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1544 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1545 ltp->lag_update = (uint8_t)faad_getbits(ld, 1
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1546 DEBUGVAR(1,142,"ltp_data(): lag_update"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1547
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1548 if (ltp->lag_update)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1549 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1550 ltp->lag = (uint16_t)faad_getbits(ld, 10
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1551 DEBUGVAR(1,81,"ltp_data(): lag"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1552 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1553 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1554 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1555 ltp->lag = (uint16_t)faad_getbits(ld, 11
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1556 DEBUGVAR(1,81,"ltp_data(): lag"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1557 #ifdef LD_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1558 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1559 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1560 ltp->coef = (uint8_t)faad_getbits(ld, 3
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1561 DEBUGVAR(1,82,"ltp_data(): coef"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1562
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1563 if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1564 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1565 for (w = 0; w < ics->num_windows; w++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1566 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1567 if ((ltp->short_used[w] = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1568 DEBUGVAR(1,83,"ltp_data(): short_used"))) & 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1569 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1570 ltp->short_lag_present[w] = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1571 DEBUGVAR(1,84,"ltp_data(): short_lag_present"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1572 if (ltp->short_lag_present[w])
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1573 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1574 ltp->short_lag[w] = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1575 DEBUGVAR(1,85,"ltp_data(): short_lag"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1576 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1577 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1578 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1579 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1580 ltp->last_band = (ics->max_sfb < MAX_LTP_SFB ? ics->max_sfb : MAX_LTP_SFB);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1581
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1582 for (sfb = 0; sfb < ltp->last_band; sfb++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1583 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1584 ltp->long_used[sfb] = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1585 DEBUGVAR(1,86,"ltp_data(): long_used"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1586 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1587 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1588 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1589 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1590
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1591 /* Table 4.4.29 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1592 static uint8_t spectral_data(faacDecHandle hDecoder, ic_stream *ics, bitfile *ld,
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1593 int16_t *spectral_data)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1594 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1595 int8_t i;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1596 uint8_t g;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1597 int16_t *sp;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1598 uint16_t k, p = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1599 uint8_t groups = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1600 uint8_t sect_cb;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1601 uint8_t result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1602 uint16_t nshort = hDecoder->frameLength/8;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1603
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1604 sp = spectral_data;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1605 memset(sp, 0, hDecoder->frameLength*sizeof(int16_t));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1606
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1607 for(g = 0; g < ics->num_window_groups; g++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1608 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1609 p = groups*nshort;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1610
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1611 for (i = 0; i < ics->num_sec[g]; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1612 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1613 sect_cb = ics->sect_cb[g][i];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1614
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1615 switch (sect_cb)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1616 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1617 case ZERO_HCB:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1618 case NOISE_HCB:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1619 case INTENSITY_HCB:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1620 case INTENSITY_HCB2:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1621 p += (ics->sect_sfb_offset[g][ics->sect_end[g][i]] -
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1622 ics->sect_sfb_offset[g][ics->sect_start[g][i]]);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1623 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1624 default:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1625 for (k = ics->sect_sfb_offset[g][ics->sect_start[g][i]];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1626 k < ics->sect_sfb_offset[g][ics->sect_end[g][i]]; k += 4)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1627 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1628 sp = spectral_data + p;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1629
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1630 if ((result = huffman_spectral_data(sect_cb, ld, sp)) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1631 return result;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1632 if (sect_cb >= FIRST_PAIR_HCB)
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1633 {
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1634 if ((result = huffman_spectral_data(sect_cb, ld, sp+2)) > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1635 return result;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1636 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1637 p += 4;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1638 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1639 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1640 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1641 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1642 groups += ics->window_group_length[g];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1643 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1644
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1645 return 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1646 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1647
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1648 /* Table 4.4.30 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1649 static uint16_t extension_payload(bitfile *ld, drc_info *drc, uint16_t count)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1650 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1651 uint16_t i, n, dataElementLength;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1652 uint8_t dataElementLengthPart;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1653 uint8_t align = 4, data_element_version, loopCounter;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1654
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1655 uint8_t extension_type = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1656 DEBUGVAR(1,87,"extension_payload(): extension_type"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1657
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1658 switch (extension_type)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1659 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1660 case EXT_DYNAMIC_RANGE:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1661 drc->present = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1662 n = dynamic_range_info(ld, drc);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1663 return n;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1664 case EXT_FILL_DATA:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1665 /* fill_nibble = */ faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1666 DEBUGVAR(1,136,"extension_payload(): fill_nibble")); /* must be ‘0000’ */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1667 for (i = 0; i < count-1; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1668 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1669 /* fill_byte[i] = */ faad_getbits(ld, 8
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1670 DEBUGVAR(1,88,"extension_payload(): fill_byte")); /* must be ‘10100101’ */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1671 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1672 return count;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1673 case EXT_DATA_ELEMENT:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1674 data_element_version = faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1675 DEBUGVAR(1,400,"extension_payload(): data_element_version"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1676 switch (data_element_version)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1677 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1678 case ANC_DATA:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1679 loopCounter = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1680 dataElementLength = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1681 do {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1682 dataElementLengthPart = faad_getbits(ld, 8
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1683 DEBUGVAR(1,401,"extension_payload(): dataElementLengthPart"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1684 dataElementLength += dataElementLengthPart;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1685 loopCounter++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1686 } while (dataElementLengthPart == 255);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1687
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1688 for (i = 0; i < dataElementLength; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1689 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1690 /* data_element_byte[i] = */ faad_getbits(ld, 8
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1691 DEBUGVAR(1,402,"extension_payload(): data_element_byte"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1692 return (dataElementLength+loopCounter+1);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1693 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1694 default:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1695 align = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1696 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1697 case EXT_FIL:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1698 default:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1699 faad_getbits(ld, align
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1700 DEBUGVAR(1,88,"extension_payload(): fill_nibble"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1701 for (i = 0; i < count-1; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1702 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1703 /* other_bits[i] = */ faad_getbits(ld, 8
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1704 DEBUGVAR(1,89,"extension_payload(): fill_bit"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1705 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1706 return count;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1707 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1708 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1709
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1710 /* Table 4.4.31 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1711 static uint8_t dynamic_range_info(bitfile *ld, drc_info *drc)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1712 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1713 uint8_t i, n = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1714 uint8_t band_incr;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1715
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1716 drc->num_bands = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1717
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1718 if (faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1719 DEBUGVAR(1,90,"dynamic_range_info(): has instance_tag")) & 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1720 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1721 drc->pce_instance_tag = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1722 DEBUGVAR(1,91,"dynamic_range_info(): pce_instance_tag"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1723 /* drc->drc_tag_reserved_bits = */ faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1724 DEBUGVAR(1,92,"dynamic_range_info(): drc_tag_reserved_bits"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1725 n++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1726 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1727
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1728 drc->excluded_chns_present = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1729 DEBUGVAR(1,93,"dynamic_range_info(): excluded_chns_present"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1730 if (drc->excluded_chns_present == 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1731 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1732 n += excluded_channels(ld, drc);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1733 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1734
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1735 if (faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1736 DEBUGVAR(1,94,"dynamic_range_info(): has bands data")) & 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1737 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1738 band_incr = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1739 DEBUGVAR(1,95,"dynamic_range_info(): band_incr"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1740 /* drc->drc_bands_reserved_bits = */ faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1741 DEBUGVAR(1,96,"dynamic_range_info(): drc_bands_reserved_bits"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1742 n++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1743 drc->num_bands += band_incr;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1744
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1745 for (i = 0; i < drc->num_bands; i++);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1746 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1747 drc->band_top[i] = (uint8_t)faad_getbits(ld, 8
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1748 DEBUGVAR(1,97,"dynamic_range_info(): band_top"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1749 n++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1750 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1751 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1752
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1753 if (faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1754 DEBUGVAR(1,98,"dynamic_range_info(): has prog_ref_level")) & 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1755 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1756 drc->prog_ref_level = (uint8_t)faad_getbits(ld, 7
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1757 DEBUGVAR(1,99,"dynamic_range_info(): prog_ref_level"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1758 /* drc->prog_ref_level_reserved_bits = */ faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1759 DEBUGVAR(1,100,"dynamic_range_info(): prog_ref_level_reserved_bits"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1760 n++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1761 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1762
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1763 for (i = 0; i < drc->num_bands; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1764 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1765 drc->dyn_rng_sgn[i] = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1766 DEBUGVAR(1,101,"dynamic_range_info(): dyn_rng_sgn"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1767 drc->dyn_rng_ctl[i] = (uint8_t)faad_getbits(ld, 7
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1768 DEBUGVAR(1,102,"dynamic_range_info(): dyn_rng_ctl"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1769 n++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1770 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1771
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1772 return n;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1773 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1774
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1775 /* Table 4.4.32 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1776 static uint8_t excluded_channels(bitfile *ld, drc_info *drc)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1777 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1778 uint8_t i, n = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1779 uint8_t num_excl_chan = 7;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1780
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1781 for (i = 0; i < 7; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1782 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1783 drc->exclude_mask[i] = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1784 DEBUGVAR(1,103,"excluded_channels(): exclude_mask"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1785 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1786 n++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1787
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1788 while ((drc->additional_excluded_chns[n-1] = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1789 DEBUGVAR(1,104,"excluded_channels(): additional_excluded_chns"))) == 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1790 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1791 for (i = num_excl_chan; i < num_excl_chan+7; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1792 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1793 drc->exclude_mask[i] = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1794 DEBUGVAR(1,105,"excluded_channels(): exclude_mask"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1795 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1796 n++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1797 num_excl_chan += 7;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1798 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1799
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1800 return n;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1801 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1802
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1803 /* Annex A: Audio Interchange Formats */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1804
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1805 /* Table 1.A.2 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1806 void get_adif_header(adif_header *adif, bitfile *ld)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1807 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1808 uint8_t i;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1809
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1810 /* adif_id[0] = */ faad_getbits(ld, 8
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1811 DEBUGVAR(1,106,"get_adif_header(): adif_id[0]"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1812 /* adif_id[1] = */ faad_getbits(ld, 8
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1813 DEBUGVAR(1,107,"get_adif_header(): adif_id[1]"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1814 /* adif_id[2] = */ faad_getbits(ld, 8
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1815 DEBUGVAR(1,108,"get_adif_header(): adif_id[2]"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1816 /* adif_id[3] = */ faad_getbits(ld, 8
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1817 DEBUGVAR(1,109,"get_adif_header(): adif_id[3]"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1818 adif->copyright_id_present = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1819 DEBUGVAR(1,110,"get_adif_header(): copyright_id_present"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1820 if(adif->copyright_id_present)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1821 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1822 for (i = 0; i < 72/8; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1823 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1824 adif->copyright_id[i] = (int8_t)faad_getbits(ld, 8
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1825 DEBUGVAR(1,111,"get_adif_header(): copyright_id"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1826 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1827 adif->copyright_id[i] = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1828 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1829 adif->original_copy = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1830 DEBUGVAR(1,112,"get_adif_header(): original_copy"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1831 adif->home = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1832 DEBUGVAR(1,113,"get_adif_header(): home"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1833 adif->bitstream_type = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1834 DEBUGVAR(1,114,"get_adif_header(): bitstream_type"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1835 adif->bitrate = faad_getbits(ld, 23
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1836 DEBUGVAR(1,115,"get_adif_header(): bitrate"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1837 adif->num_program_config_elements = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1838 DEBUGVAR(1,116,"get_adif_header(): num_program_config_elements"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1839
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1840 for (i = 0; i < adif->num_program_config_elements + 1; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1841 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1842 if(adif->bitstream_type == 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1843 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1844 adif->adif_buffer_fullness = faad_getbits(ld, 20
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1845 DEBUGVAR(1,117,"get_adif_header(): adif_buffer_fullness"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1846 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1847 adif->adif_buffer_fullness = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1848 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1849
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1850 program_config_element(&adif->pce[i], ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1851 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1852 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1853
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1854 /* Table 1.A.5 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1855 uint8_t adts_frame(adts_header *adts, bitfile *ld)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1856 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1857 /* faad_byte_align(ld); */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1858 if (adts_fixed_header(adts, ld))
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1859 return 5;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1860 adts_variable_header(adts, ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1861 adts_error_check(adts, ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1862
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1863 return 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1864 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1865
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1866 /* Table 1.A.6 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1867 static uint8_t adts_fixed_header(adts_header *adts, bitfile *ld)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1868 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1869 uint16_t i;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1870 uint8_t sync_err = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1871
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1872 /* try to recover from sync errors */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1873 for (i = 0; i < 768; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1874 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1875 adts->syncword = (uint16_t)faad_showbits(ld, 12);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1876 if (adts->syncword != 0xFFF)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1877 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1878 faad_getbits(ld, 8
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1879 DEBUGVAR(0,0,""));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1880 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1881 sync_err = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1882 faad_getbits(ld, 12
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1883 DEBUGVAR(1,118,"adts_fixed_header(): syncword"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1884 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1885 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1886 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1887 if (sync_err)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1888 return 5;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1889
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1890 adts->id = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1891 DEBUGVAR(1,119,"adts_fixed_header(): id"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1892 adts->layer = (uint8_t)faad_getbits(ld, 2
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1893 DEBUGVAR(1,120,"adts_fixed_header(): layer"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1894 adts->protection_absent = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1895 DEBUGVAR(1,121,"adts_fixed_header(): protection_absent"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1896 adts->profile = (uint8_t)faad_getbits(ld, 2
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1897 DEBUGVAR(1,122,"adts_fixed_header(): profile"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1898 adts->sf_index = (uint8_t)faad_getbits(ld, 4
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1899 DEBUGVAR(1,123,"adts_fixed_header(): sf_index"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1900 adts->private_bit = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1901 DEBUGVAR(1,124,"adts_fixed_header(): private_bit"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1902 adts->channel_configuration = (uint8_t)faad_getbits(ld, 3
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1903 DEBUGVAR(1,125,"adts_fixed_header(): channel_configuration"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1904 adts->original = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1905 DEBUGVAR(1,126,"adts_fixed_header(): original"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1906 adts->home = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1907 DEBUGVAR(1,127,"adts_fixed_header(): home"));
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1908
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1909 if (adts->old_format == 1)
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1910 {
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1911 /* Removed in corrigendum 14496-3:2002 */
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1912 if (adts->id == 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1913 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1914 adts->emphasis = (uint8_t)faad_getbits(ld, 2
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1915 DEBUGVAR(1,128,"adts_fixed_header(): emphasis"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1916 }
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1917 }
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1918
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1919 return 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1920 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1921
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1922 /* Table 1.A.7 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1923 static void adts_variable_header(adts_header *adts, bitfile *ld)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1924 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1925 adts->copyright_identification_bit = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1926 DEBUGVAR(1,129,"adts_variable_header(): copyright_identification_bit"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1927 adts->copyright_identification_start = faad_get1bit(ld
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1928 DEBUGVAR(1,130,"adts_variable_header(): copyright_identification_start"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1929 adts->aac_frame_length = (uint16_t)faad_getbits(ld, 13
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1930 DEBUGVAR(1,131,"adts_variable_header(): aac_frame_length"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1931 adts->adts_buffer_fullness = (uint16_t)faad_getbits(ld, 11
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1932 DEBUGVAR(1,132,"adts_variable_header(): adts_buffer_fullness"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1933 adts->no_raw_data_blocks_in_frame = (uint8_t)faad_getbits(ld, 2
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1934 DEBUGVAR(1,133,"adts_variable_header(): no_raw_data_blocks_in_frame"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1935 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1936
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1937 /* Table 1.A.8 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1938 static void adts_error_check(adts_header *adts, bitfile *ld)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1939 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1940 if (adts->protection_absent == 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1941 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1942 adts->crc_check = (uint16_t)faad_getbits(ld, 16
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1943 DEBUGVAR(1,134,"adts_error_check(): crc_check"));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1944 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1945 }