annotate libfaad2/decoder.c @ 27249:4be2b34aa431

Try to keep decoded audio buffer aligned. Seems to be enough to avoid crashes (due to unaligned SSE2) with FFmpeg vorbis decoding for now.
author reimar
date Mon, 14 Jul 2008 16:38:58 +0000
parents bc425ba00960
children e83eef58b30a
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
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
3 ** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
4 **
10725
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.
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
9 **
10725
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.
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
14 **
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
15 ** You should have received a copy of the GNU General Public License
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
16 ** along with this program; if not, write to the Free Software
10725
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 **
18141
59b6fa5b4201 Update to faad2 cvs 20040915+MPlayer fixes
rtognimp
parents: 14727
diff changeset
25 ** $Id: decoder.c,v 1.107 2004/09/08 09:43:11 gcp 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 #include "common.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
29 #include "structs.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
30
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
31 #include <stdlib.h>
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
32 #include <string.h>
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
33
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
34 #include "decoder.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
35 #include "mp4.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
36 #include "syntax.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
37 #include "error.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
38 #include "output.h"
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
39 #include "filtbank.h"
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
40 #include "drc.h"
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
41 #ifdef SBR_DEC
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
42 #include "sbr_dec.h"
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
43 #include "sbr_syntax.h"
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
44 #endif
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
45 #ifdef SSR_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
46 #include "ssr.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
47 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
48
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
49 #ifdef ANALYSIS
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
50 uint16_t dbg_count;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
51 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
52
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
53 /* static function declarations */
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
54 static void* aac_frame_decode(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo,
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
55 uint8_t *buffer, uint32_t buffer_size,
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
56 void **sample_buffer, uint32_t sample_buffer_size);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
57 static void create_channel_config(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
58
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
59
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
60 char* NEAACDECAPI NeAACDecGetErrorMessage(uint8_t errcode)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
61 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
62 if (errcode >= NUM_ERROR_MESSAGES)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
63 return NULL;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
64 return err_msg[errcode];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
65 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
66
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
67 uint32_t NEAACDECAPI NeAACDecGetCapabilities(void)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
68 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
69 uint32_t cap = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
70
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
71 /* can't do without it */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
72 cap += LC_DEC_CAP;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
73
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
74 #ifdef MAIN_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
75 cap += MAIN_DEC_CAP;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
76 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
77 #ifdef LTP_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
78 cap += LTP_DEC_CAP;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
79 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
80 #ifdef LD_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
81 cap += LD_DEC_CAP;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
82 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
83 #ifdef ERROR_RESILIENCE
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
84 cap += ERROR_RESILIENCE_CAP;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
85 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
86 #ifdef FIXED_POINT
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
87 cap += FIXED_POINT_CAP;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
88 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
89
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
90 return cap;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
91 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
92
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
93 NeAACDecHandle NEAACDECAPI NeAACDecOpen(void)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
94 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
95 uint8_t i;
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
96 NeAACDecHandle hDecoder = NULL;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
97
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
98 if ((hDecoder = (NeAACDecHandle)faad_malloc(sizeof(NeAACDecStruct))) == NULL)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
99 return NULL;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
100
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
101 memset(hDecoder, 0, sizeof(NeAACDecStruct));
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
102
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
103 hDecoder->config.outputFormat = FAAD_FMT_16BIT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
104 hDecoder->config.defObjectType = MAIN;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
105 hDecoder->config.defSampleRate = 44100; /* Default: 44.1kHz */
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
106 hDecoder->config.downMatrix = 0;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
107 hDecoder->adts_header_present = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
108 hDecoder->adif_header_present = 0;
25835
645cbba10a57 added AudioSpecificConfigFromBitfile() -that reads from an initizialized
nicodvb
parents: 18141
diff changeset
109 hDecoder->latm_header_present = 0;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
110 #ifdef ERROR_RESILIENCE
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
111 hDecoder->aacSectionDataResilienceFlag = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
112 hDecoder->aacScalefactorDataResilienceFlag = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
113 hDecoder->aacSpectralDataResilienceFlag = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
114 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
115 hDecoder->frameLength = 1024;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
116
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
117 hDecoder->frame = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
118 hDecoder->sample_buffer = NULL;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
119
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
120 for (i = 0; i < MAX_CHANNELS; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
121 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
122 hDecoder->window_shape_prev[i] = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
123 hDecoder->time_out[i] = NULL;
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
124 hDecoder->fb_intermed[i] = NULL;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
125 #ifdef SSR_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
126 hDecoder->ssr_overlap[i] = NULL;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
127 hDecoder->prev_fmd[i] = NULL;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
128 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
129 #ifdef MAIN_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
130 hDecoder->pred_stat[i] = NULL;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
131 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
132 #ifdef LTP_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
133 hDecoder->ltp_lag[i] = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
134 hDecoder->lt_pred_stat[i] = NULL;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
135 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
136 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
137
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
138 #ifdef SBR_DEC
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
139 for (i = 0; i < MAX_SYNTAX_ELEMENTS; i++)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
140 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
141 hDecoder->sbr[i] = NULL;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
142 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
143 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
144
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
145 hDecoder->drc = drc_init(REAL_CONST(1.0), REAL_CONST(1.0));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
146
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
147 return hDecoder;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
148 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
149
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
150 NeAACDecConfigurationPtr NEAACDECAPI NeAACDecGetCurrentConfiguration(NeAACDecHandle hDecoder)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
151 {
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
152 if (hDecoder)
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
153 {
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
154 NeAACDecConfigurationPtr config = &(hDecoder->config);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
155
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
156 return config;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
157 }
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
158
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
159 return NULL;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
160 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
161
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
162 uint8_t NEAACDECAPI NeAACDecSetConfiguration(NeAACDecHandle hDecoder,
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
163 NeAACDecConfigurationPtr config)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
164 {
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
165 if (hDecoder && config)
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
166 {
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
167 /* check if we can decode this object type */
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
168 if (can_decode_ot(config->defObjectType) < 0)
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
169 return 0;
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
170 hDecoder->config.defObjectType = config->defObjectType;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
171
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
172 /* samplerate: anything but 0 should be possible */
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
173 if (config->defSampleRate == 0)
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
174 return 0;
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
175 hDecoder->config.defSampleRate = config->defSampleRate;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
176
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
177 /* check output format */
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
178 #ifdef FIXED_POINT
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
179 if ((config->outputFormat < 1) || (config->outputFormat > 4))
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
180 return 0;
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
181 #else
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
182 if ((config->outputFormat < 1) || (config->outputFormat > 5))
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
183 return 0;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
184 #endif
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
185 hDecoder->config.outputFormat = config->outputFormat;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
186
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
187 if (config->downMatrix > 1)
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
188 return 0;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
189 hDecoder->config.downMatrix = config->downMatrix;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
190
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
191 /* OK */
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
192 return 1;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
193 }
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
194
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
195 return 0;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
196 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
197
25836
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
198 static int latmCheck(latm_header *latm, bitfile *ld)
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
199 {
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
200 uint32_t good=0, bad=0, bits, m;
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
201
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
202 while(!ld->error && !ld->no_more_reading)
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
203 {
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
204 bits = faad_latm_frame(latm, ld);
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
205 if(bits==-1U)
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
206 bad++;
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
207 else
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
208 {
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
209 good++;
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
210 while(bits>0)
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
211 {
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
212 m = min(bits, 8);
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
213 faad_getbits(ld, m);
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
214 bits -= m;
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
215 }
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
216 }
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
217 }
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
218
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
219 return (good>0);
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
220 }
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
221
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
222
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
223 int32_t NEAACDECAPI NeAACDecInit(NeAACDecHandle hDecoder, uint8_t *buffer,
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
224 uint32_t buffer_size,
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
225 uint32_t *samplerate, uint8_t *channels)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
226 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
227 uint32_t bits = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
228 bitfile ld;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
229 adif_header adif;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
230 adts_header adts;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
231
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
232 if ((hDecoder == NULL) || (samplerate == NULL) || (channels == NULL))
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
233 return -1;
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
234
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
235 hDecoder->sf_index = get_sr_index(hDecoder->config.defSampleRate);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
236 hDecoder->object_type = hDecoder->config.defObjectType;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
237 *samplerate = get_sample_rate(hDecoder->sf_index);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
238 *channels = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
239
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
240 if (buffer != NULL)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
241 {
25836
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
242 int is_latm;
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
243 latm_header *l = &hDecoder->latm_config;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
244 faad_initbits(&ld, buffer, buffer_size);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
245
25836
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
246 memset(l, 0, sizeof(latm_header));
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
247 is_latm = latmCheck(l, &ld);
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
248 l->inited = 0;
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
249 l->frameLength = 0;
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
250 faad_rewindbits(&ld);
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
251 if(is_latm && l->ASCbits>0)
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
252 {
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
253 int32_t x;
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
254 hDecoder->latm_header_present = 1;
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
255 x = NeAACDecInit2(hDecoder, &l->ASC, (l->ASCbits+7)/8, samplerate, channels);
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
256 if(x!=0)
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
257 hDecoder->latm_header_present = 0;
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
258 return x;
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
259 }
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
260 else
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
261 /* Check if an ADIF header is present */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
262 if ((buffer[0] == 'A') && (buffer[1] == 'D') &&
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
263 (buffer[2] == 'I') && (buffer[3] == 'F'))
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
264 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
265 hDecoder->adif_header_present = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
266
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
267 get_adif_header(&adif, &ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
268 faad_byte_align(&ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
269
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
270 hDecoder->sf_index = adif.pce[0].sf_index;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
271 hDecoder->object_type = adif.pce[0].object_type + 1;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
272
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
273 *samplerate = get_sample_rate(hDecoder->sf_index);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
274 *channels = adif.pce[0].channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
275
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
276 memcpy(&(hDecoder->pce), &(adif.pce[0]), sizeof(program_config));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
277 hDecoder->pce_set = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
278
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
279 bits = bit2byte(faad_get_processed_bits(&ld));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
280
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
281 /* Check if an ADTS header is present */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
282 } else if (faad_showbits(&ld, 12) == 0xfff) {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
283 hDecoder->adts_header_present = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
284
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
285 adts.old_format = hDecoder->config.useOldADTSFormat;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
286 adts_frame(&adts, &ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
287
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
288 hDecoder->sf_index = adts.sf_index;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
289 hDecoder->object_type = adts.profile + 1;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
290
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
291 *samplerate = get_sample_rate(hDecoder->sf_index);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
292 *channels = (adts.channel_configuration > 6) ?
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
293 2 : adts.channel_configuration;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
294 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
295
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
296 if (ld.error)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
297 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
298 faad_endbits(&ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
299 return -1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
300 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
301 faad_endbits(&ld);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
302 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
303 hDecoder->channelConfiguration = *channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
304
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
305 #if (defined(PS_DEC) || defined(DRM_PS))
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
306 /* check if we have a mono file */
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
307 if (*channels == 1)
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
308 {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
309 /* upMatrix to 2 channels for implicit signalling of PS */
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
310 *channels = 2;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
311 }
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
312 #endif
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
313
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
314 #ifdef SBR_DEC
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
315 /* implicit signalling */
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
316 if (*samplerate <= 24000 && !(hDecoder->config.dontUpSampleImplicitSBR))
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
317 {
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
318 *samplerate *= 2;
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
319 hDecoder->forceUpSampling = 1;
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
320 } else if (*samplerate > 24000 && !(hDecoder->config.dontUpSampleImplicitSBR)) {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
321 hDecoder->downSampledSBR = 1;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
322 }
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
323 #endif
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
324
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
325 /* must be done before frameLength is divided by 2 for LD */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
326 #ifdef SSR_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
327 if (hDecoder->object_type == SSR)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
328 hDecoder->fb = ssr_filter_bank_init(hDecoder->frameLength/SSR_BANDS);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
329 else
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
330 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
331 hDecoder->fb = filter_bank_init(hDecoder->frameLength);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
332
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
333 #ifdef LD_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
334 if (hDecoder->object_type == LD)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
335 hDecoder->frameLength >>= 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
336 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
337
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
338 if (can_decode_ot(hDecoder->object_type) < 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
339 return -1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
340
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
341 return bits;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
342 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
343
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
344 /* Init the library using a DecoderSpecificInfo */
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
345 int8_t NEAACDECAPI NeAACDecInit2(NeAACDecHandle hDecoder, uint8_t *pBuffer,
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
346 uint32_t SizeOfDecoderSpecificInfo,
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
347 uint32_t *samplerate, uint8_t *channels)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
348 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
349 int8_t rc;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
350 mp4AudioSpecificConfig mp4ASC;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
351
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
352 if((hDecoder == NULL)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
353 || (pBuffer == NULL)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
354 || (SizeOfDecoderSpecificInfo < 2)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
355 || (samplerate == NULL)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
356 || (channels == NULL))
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
357 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
358 return -1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
359 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
360
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
361 hDecoder->adif_header_present = 0;
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
362 hDecoder->adts_header_present = 0;
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
363
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
364 /* decode the audio specific config */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
365 rc = AudioSpecificConfig2(pBuffer, SizeOfDecoderSpecificInfo, &mp4ASC,
25835
645cbba10a57 added AudioSpecificConfigFromBitfile() -that reads from an initizialized
nicodvb
parents: 18141
diff changeset
366 &(hDecoder->pce), hDecoder->latm_header_present);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
367
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
368 /* copy the relevant info to the decoder handle */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
369 *samplerate = mp4ASC.samplingFrequency;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
370 if (mp4ASC.channelsConfiguration)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
371 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
372 *channels = mp4ASC.channelsConfiguration;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
373 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
374 *channels = hDecoder->pce.channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
375 hDecoder->pce_set = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
376 }
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
377 #if (defined(PS_DEC) || defined(DRM_PS))
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
378 /* check if we have a mono file */
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
379 if (*channels == 1)
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
380 {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
381 /* upMatrix to 2 channels for implicit signalling of PS */
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
382 *channels = 2;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
383 }
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
384 #endif
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
385 hDecoder->sf_index = mp4ASC.samplingFrequencyIndex;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
386 hDecoder->object_type = mp4ASC.objectTypeIndex;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
387 #ifdef ERROR_RESILIENCE
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
388 hDecoder->aacSectionDataResilienceFlag = mp4ASC.aacSectionDataResilienceFlag;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
389 hDecoder->aacScalefactorDataResilienceFlag = mp4ASC.aacScalefactorDataResilienceFlag;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
390 hDecoder->aacSpectralDataResilienceFlag = mp4ASC.aacSpectralDataResilienceFlag;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
391 #endif
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
392 #ifdef SBR_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
393 hDecoder->sbr_present_flag = mp4ASC.sbr_present_flag;
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
394 hDecoder->downSampledSBR = mp4ASC.downSampledSBR;
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
395 if (hDecoder->config.dontUpSampleImplicitSBR == 0)
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
396 hDecoder->forceUpSampling = mp4ASC.forceUpSampling;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
397 else
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
398 hDecoder->forceUpSampling = 0;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
399
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
400 /* AAC core decoder samplerate is 2 times as low */
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
401 if (((hDecoder->sbr_present_flag == 1)&&(!hDecoder->downSampledSBR)) || hDecoder->forceUpSampling == 1)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
402 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
403 hDecoder->sf_index = get_sr_index(mp4ASC.samplingFrequency / 2);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
404 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
405 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
406
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
407 if (rc != 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
408 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
409 return rc;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
410 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
411 hDecoder->channelConfiguration = mp4ASC.channelsConfiguration;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
412 if (mp4ASC.frameLengthFlag)
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
413 #ifdef ALLOW_SMALL_FRAMELENGTH
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
414 hDecoder->frameLength = 960;
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
415 #else
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
416 return -1;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
417 #endif
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
418
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
419 /* must be done before frameLength is divided by 2 for LD */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
420 #ifdef SSR_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
421 if (hDecoder->object_type == SSR)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
422 hDecoder->fb = ssr_filter_bank_init(hDecoder->frameLength/SSR_BANDS);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
423 else
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
424 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
425 hDecoder->fb = filter_bank_init(hDecoder->frameLength);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
426
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
427 #ifdef LD_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
428 if (hDecoder->object_type == LD)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
429 hDecoder->frameLength >>= 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
430 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
431
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
432 return 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
433 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
434
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
435 #ifdef DRM
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
436 int8_t NEAACDECAPI NeAACDecInitDRM(NeAACDecHandle *hDecoder, uint32_t samplerate,
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
437 uint8_t channels)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
438 {
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
439 if (hDecoder == NULL)
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
440 return 1; /* error */
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
441
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
442 NeAACDecClose(*hDecoder);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
443
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
444 *hDecoder = NeAACDecOpen();
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
445
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
446 /* Special object type defined for DRM */
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
447 (*hDecoder)->config.defObjectType = DRM_ER_LC;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
448
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
449 (*hDecoder)->config.defSampleRate = samplerate;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
450 #ifdef ERROR_RESILIENCE // This shoudl always be defined for DRM
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
451 (*hDecoder)->aacSectionDataResilienceFlag = 1; /* VCB11 */
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
452 (*hDecoder)->aacScalefactorDataResilienceFlag = 0; /* no RVLC */
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
453 (*hDecoder)->aacSpectralDataResilienceFlag = 1; /* HCR */
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
454 #endif
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
455 (*hDecoder)->frameLength = 960;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
456 (*hDecoder)->sf_index = get_sr_index((*hDecoder)->config.defSampleRate);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
457 (*hDecoder)->object_type = (*hDecoder)->config.defObjectType;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
458
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
459 if ((channels == DRMCH_STEREO) || (channels == DRMCH_SBR_STEREO))
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
460 (*hDecoder)->channelConfiguration = 2;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
461 else
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
462 (*hDecoder)->channelConfiguration = 1;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
463
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
464 #ifdef SBR_DEC
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
465 if ((channels == DRMCH_MONO) || (channels == DRMCH_STEREO))
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
466 (*hDecoder)->sbr_present_flag = 0;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
467 else
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
468 (*hDecoder)->sbr_present_flag = 1;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
469 #endif
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
470
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
471 (*hDecoder)->fb = filter_bank_init((*hDecoder)->frameLength);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
472
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
473 return 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
474 }
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
475 #endif
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
476
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
477 void NEAACDECAPI NeAACDecClose(NeAACDecHandle hDecoder)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
478 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
479 uint8_t i;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
480
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
481 if (hDecoder == NULL)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
482 return;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
483
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
484 #ifdef PROFILE
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
485 printf("AAC decoder total: %I64d cycles\n", hDecoder->cycles);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
486 printf("requant: %I64d cycles\n", hDecoder->requant_cycles);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
487 printf("spectral_data: %I64d cycles\n", hDecoder->spectral_cycles);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
488 printf("scalefactors: %I64d cycles\n", hDecoder->scalefac_cycles);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
489 printf("output: %I64d cycles\n", hDecoder->output_cycles);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
490 #endif
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
491
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
492 for (i = 0; i < MAX_CHANNELS; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
493 {
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
494 if (hDecoder->time_out[i]) faad_free(hDecoder->time_out[i]);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
495 if (hDecoder->fb_intermed[i]) faad_free(hDecoder->fb_intermed[i]);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
496 #ifdef SSR_DEC
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
497 if (hDecoder->ssr_overlap[i]) faad_free(hDecoder->ssr_overlap[i]);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
498 if (hDecoder->prev_fmd[i]) faad_free(hDecoder->prev_fmd[i]);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
499 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
500 #ifdef MAIN_DEC
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
501 if (hDecoder->pred_stat[i]) faad_free(hDecoder->pred_stat[i]);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
502 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
503 #ifdef LTP_DEC
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
504 if (hDecoder->lt_pred_stat[i]) faad_free(hDecoder->lt_pred_stat[i]);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
505 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
506 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
507
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
508 #ifdef SSR_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
509 if (hDecoder->object_type == SSR)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
510 ssr_filter_bank_end(hDecoder->fb);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
511 else
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
512 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
513 filter_bank_end(hDecoder->fb);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
514
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
515 drc_end(hDecoder->drc);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
516
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
517 if (hDecoder->sample_buffer) faad_free(hDecoder->sample_buffer);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
518
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
519 #ifdef SBR_DEC
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
520 for (i = 0; i < MAX_SYNTAX_ELEMENTS; i++)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
521 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
522 if (hDecoder->sbr[i])
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
523 sbrDecodeEnd(hDecoder->sbr[i]);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
524 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
525 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
526
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
527 if (hDecoder) faad_free(hDecoder);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
528 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
529
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
530 void NEAACDECAPI NeAACDecPostSeekReset(NeAACDecHandle hDecoder, int32_t frame)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
531 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
532 if (hDecoder)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
533 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
534 hDecoder->postSeekResetFlag = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
535
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
536 if (frame != -1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
537 hDecoder->frame = frame;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
538 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
539 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
540
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
541 static void create_channel_config(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
542 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
543 hInfo->num_front_channels = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
544 hInfo->num_side_channels = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
545 hInfo->num_back_channels = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
546 hInfo->num_lfe_channels = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
547 memset(hInfo->channel_position, 0, MAX_CHANNELS*sizeof(uint8_t));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
548
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
549 if (hDecoder->downMatrix)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
550 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
551 hInfo->num_front_channels = 2;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
552 hInfo->channel_position[0] = FRONT_CHANNEL_LEFT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
553 hInfo->channel_position[1] = FRONT_CHANNEL_RIGHT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
554 return;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
555 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
556
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
557 /* check if there is a PCE */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
558 if (hDecoder->pce_set)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
559 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
560 uint8_t i, chpos = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
561 uint8_t chdir, back_center = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
562
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
563 hInfo->num_front_channels = hDecoder->pce.num_front_channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
564 hInfo->num_side_channels = hDecoder->pce.num_side_channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
565 hInfo->num_back_channels = hDecoder->pce.num_back_channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
566 hInfo->num_lfe_channels = hDecoder->pce.num_lfe_channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
567
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
568 chdir = hInfo->num_front_channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
569 if (chdir & 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
570 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
571 hInfo->channel_position[chpos++] = FRONT_CHANNEL_CENTER;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
572 chdir--;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
573 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
574 for (i = 0; i < chdir; i += 2)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
575 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
576 hInfo->channel_position[chpos++] = FRONT_CHANNEL_LEFT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
577 hInfo->channel_position[chpos++] = FRONT_CHANNEL_RIGHT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
578 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
579
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
580 for (i = 0; i < hInfo->num_side_channels; i += 2)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
581 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
582 hInfo->channel_position[chpos++] = SIDE_CHANNEL_LEFT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
583 hInfo->channel_position[chpos++] = SIDE_CHANNEL_RIGHT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
584 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
585
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
586 chdir = hInfo->num_back_channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
587 if (chdir & 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
588 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
589 back_center = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
590 chdir--;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
591 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
592 for (i = 0; i < chdir; i += 2)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
593 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
594 hInfo->channel_position[chpos++] = BACK_CHANNEL_LEFT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
595 hInfo->channel_position[chpos++] = BACK_CHANNEL_RIGHT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
596 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
597 if (back_center)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
598 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
599 hInfo->channel_position[chpos++] = BACK_CHANNEL_CENTER;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
600 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
601
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
602 for (i = 0; i < hInfo->num_lfe_channels; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
603 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
604 hInfo->channel_position[chpos++] = LFE_CHANNEL;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
605 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
606
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
607 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
608 switch (hDecoder->channelConfiguration)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
609 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
610 case 1:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
611 hInfo->num_front_channels = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
612 hInfo->channel_position[0] = FRONT_CHANNEL_CENTER;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
613 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
614 case 2:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
615 hInfo->num_front_channels = 2;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
616 hInfo->channel_position[0] = FRONT_CHANNEL_LEFT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
617 hInfo->channel_position[1] = FRONT_CHANNEL_RIGHT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
618 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
619 case 3:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
620 hInfo->num_front_channels = 3;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
621 hInfo->channel_position[0] = FRONT_CHANNEL_CENTER;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
622 hInfo->channel_position[1] = FRONT_CHANNEL_LEFT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
623 hInfo->channel_position[2] = FRONT_CHANNEL_RIGHT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
624 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
625 case 4:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
626 hInfo->num_front_channels = 3;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
627 hInfo->num_back_channels = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
628 hInfo->channel_position[0] = FRONT_CHANNEL_CENTER;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
629 hInfo->channel_position[1] = FRONT_CHANNEL_LEFT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
630 hInfo->channel_position[2] = FRONT_CHANNEL_RIGHT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
631 hInfo->channel_position[3] = BACK_CHANNEL_CENTER;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
632 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
633 case 5:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
634 hInfo->num_front_channels = 3;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
635 hInfo->num_back_channels = 2;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
636 hInfo->channel_position[0] = FRONT_CHANNEL_CENTER;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
637 hInfo->channel_position[1] = FRONT_CHANNEL_LEFT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
638 hInfo->channel_position[2] = FRONT_CHANNEL_RIGHT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
639 hInfo->channel_position[3] = BACK_CHANNEL_LEFT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
640 hInfo->channel_position[4] = BACK_CHANNEL_RIGHT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
641 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
642 case 6:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
643 hInfo->num_front_channels = 3;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
644 hInfo->num_back_channels = 2;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
645 hInfo->num_lfe_channels = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
646 hInfo->channel_position[0] = FRONT_CHANNEL_CENTER;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
647 hInfo->channel_position[1] = FRONT_CHANNEL_LEFT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
648 hInfo->channel_position[2] = FRONT_CHANNEL_RIGHT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
649 hInfo->channel_position[3] = BACK_CHANNEL_LEFT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
650 hInfo->channel_position[4] = BACK_CHANNEL_RIGHT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
651 hInfo->channel_position[5] = LFE_CHANNEL;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
652 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
653 case 7:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
654 hInfo->num_front_channels = 3;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
655 hInfo->num_side_channels = 2;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
656 hInfo->num_back_channels = 2;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
657 hInfo->num_lfe_channels = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
658 hInfo->channel_position[0] = FRONT_CHANNEL_CENTER;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
659 hInfo->channel_position[1] = FRONT_CHANNEL_LEFT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
660 hInfo->channel_position[2] = FRONT_CHANNEL_RIGHT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
661 hInfo->channel_position[3] = SIDE_CHANNEL_LEFT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
662 hInfo->channel_position[4] = SIDE_CHANNEL_RIGHT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
663 hInfo->channel_position[5] = BACK_CHANNEL_LEFT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
664 hInfo->channel_position[6] = BACK_CHANNEL_RIGHT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
665 hInfo->channel_position[7] = LFE_CHANNEL;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
666 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
667 default: /* channelConfiguration == 0 || channelConfiguration > 7 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
668 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
669 uint8_t i;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
670 uint8_t ch = hDecoder->fr_channels - hDecoder->has_lfe;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
671 if (ch & 1) /* there's either a center front or a center back channel */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
672 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
673 uint8_t ch1 = (ch-1)/2;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
674 if (hDecoder->first_syn_ele == ID_SCE)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
675 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
676 hInfo->num_front_channels = ch1 + 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
677 hInfo->num_back_channels = ch1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
678 hInfo->channel_position[0] = FRONT_CHANNEL_CENTER;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
679 for (i = 1; i <= ch1; i+=2)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
680 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
681 hInfo->channel_position[i] = FRONT_CHANNEL_LEFT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
682 hInfo->channel_position[i+1] = FRONT_CHANNEL_RIGHT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
683 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
684 for (i = ch1+1; i < ch; i+=2)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
685 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
686 hInfo->channel_position[i] = BACK_CHANNEL_LEFT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
687 hInfo->channel_position[i+1] = BACK_CHANNEL_RIGHT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
688 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
689 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
690 hInfo->num_front_channels = ch1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
691 hInfo->num_back_channels = ch1 + 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
692 for (i = 0; i < ch1; i+=2)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
693 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
694 hInfo->channel_position[i] = FRONT_CHANNEL_LEFT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
695 hInfo->channel_position[i+1] = FRONT_CHANNEL_RIGHT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
696 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
697 for (i = ch1; i < ch-1; i+=2)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
698 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
699 hInfo->channel_position[i] = BACK_CHANNEL_LEFT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
700 hInfo->channel_position[i+1] = BACK_CHANNEL_RIGHT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
701 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
702 hInfo->channel_position[ch-1] = BACK_CHANNEL_CENTER;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
703 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
704 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
705 uint8_t ch1 = (ch)/2;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
706 hInfo->num_front_channels = ch1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
707 hInfo->num_back_channels = ch1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
708 if (ch1 & 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
709 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
710 hInfo->channel_position[0] = FRONT_CHANNEL_CENTER;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
711 for (i = 1; i <= ch1; i+=2)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
712 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
713 hInfo->channel_position[i] = FRONT_CHANNEL_LEFT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
714 hInfo->channel_position[i+1] = FRONT_CHANNEL_RIGHT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
715 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
716 for (i = ch1+1; i < ch-1; i+=2)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
717 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
718 hInfo->channel_position[i] = BACK_CHANNEL_LEFT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
719 hInfo->channel_position[i+1] = BACK_CHANNEL_RIGHT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
720 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
721 hInfo->channel_position[ch-1] = BACK_CHANNEL_CENTER;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
722 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
723 for (i = 0; i < ch1; i+=2)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
724 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
725 hInfo->channel_position[i] = FRONT_CHANNEL_LEFT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
726 hInfo->channel_position[i+1] = FRONT_CHANNEL_RIGHT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
727 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
728 for (i = ch1; i < ch; i+=2)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
729 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
730 hInfo->channel_position[i] = BACK_CHANNEL_LEFT;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
731 hInfo->channel_position[i+1] = BACK_CHANNEL_RIGHT;
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 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
735 hInfo->num_lfe_channels = hDecoder->has_lfe;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
736 for (i = ch; i < hDecoder->fr_channels; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
737 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
738 hInfo->channel_position[i] = LFE_CHANNEL;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
739 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
740 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
741 break;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
742 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
743 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
744 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
745
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
746 void* NEAACDECAPI NeAACDecDecode(NeAACDecHandle hDecoder,
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
747 NeAACDecFrameInfo *hInfo,
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
748 uint8_t *buffer, uint32_t buffer_size)
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
749 {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
750 return aac_frame_decode(hDecoder, hInfo, buffer, buffer_size, NULL, 0);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
751 }
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
752
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
753 void* NEAACDECAPI NeAACDecDecode2(NeAACDecHandle hDecoder,
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
754 NeAACDecFrameInfo *hInfo,
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
755 uint8_t *buffer, uint32_t buffer_size,
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
756 void **sample_buffer, uint32_t sample_buffer_size)
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
757 {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
758 if ((sample_buffer == NULL) || (sample_buffer_size == 0))
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
759 {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
760 hInfo->error = 27;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
761 return NULL;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
762 }
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
763
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
764 return aac_frame_decode(hDecoder, hInfo, buffer, buffer_size,
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
765 sample_buffer, sample_buffer_size);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
766 }
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
767
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
768 static void* aac_frame_decode(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo,
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
769 uint8_t *buffer, uint32_t buffer_size,
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
770 void **sample_buffer2, uint32_t sample_buffer_size)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
771 {
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
772 uint8_t channels = 0;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
773 uint8_t output_channels = 0;
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
774 bitfile ld;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
775 uint32_t bitsconsumed;
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
776 uint16_t frame_len;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
777 void *sample_buffer;
25836
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
778 uint32_t startbit=0, endbit=0, payload_bits=0;
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
779
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
780 #ifdef PROFILE
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
781 int64_t count = faad_get_ts();
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
782 #endif
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
783
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
784 /* safety checks */
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
785 if ((hDecoder == NULL) || (hInfo == NULL) || (buffer == NULL))
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
786 {
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
787 return NULL;
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
788 }
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
789
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
790 #if 0
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
791 printf("%d\n", buffer_size*8);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
792 #endif
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
793
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
794 frame_len = hDecoder->frameLength;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
795
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
796
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
797 memset(hInfo, 0, sizeof(NeAACDecFrameInfo));
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
798 memset(hDecoder->internal_channel, 0, MAX_CHANNELS*sizeof(hDecoder->internal_channel[0]));
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
799
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
800 /* initialize the bitstream */
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
801 faad_initbits(&ld, buffer, buffer_size);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
802
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
803 #if 0
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
804 {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
805 int i;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
806 for (i = 0; i < ((buffer_size+3)>>2); i++)
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
807 {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
808 uint8_t *buf;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
809 uint32_t temp = 0;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
810 buf = faad_getbitbuffer(&ld, 32);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
811 //temp = getdword((void*)buf);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
812 temp = *((uint32_t*)buf);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
813 printf("0x%.8X\n", temp);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
814 free(buf);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
815 }
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
816 faad_endbits(&ld);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
817 faad_initbits(&ld, buffer, buffer_size);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
818 }
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
819 #endif
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
820
25836
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
821 if(hDecoder->latm_header_present)
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
822 {
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
823 payload_bits = faad_latm_frame(&hDecoder->latm_config, &ld);
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
824 startbit = faad_get_processed_bits(&ld);
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
825 if(payload_bits == -1U)
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
826 {
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
827 hInfo->error = 1;
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
828 goto error;
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
829 }
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
830 }
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
831
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
832 #ifdef DRM
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
833 if (hDecoder->object_type == DRM_ER_LC)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
834 {
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
835 /* We do not support stereo right now */
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
836 if (0) //(hDecoder->channelConfiguration == 2)
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
837 {
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
838 hInfo->error = 8; // Throw CRC error
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
839 goto error;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
840 }
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
841
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
842 faad_getbits(&ld, 8
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
843 DEBUGVAR(1,1,"NeAACDecDecode(): skip CRC"));
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
844 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
845 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
846
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
847 if (hDecoder->adts_header_present)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
848 {
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
849 adts_header adts;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
850
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
851 adts.old_format = hDecoder->config.useOldADTSFormat;
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
852 if ((hInfo->error = adts_frame(&adts, &ld)) > 0)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
853 goto error;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
854
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
855 /* MPEG2 does byte_alignment() here,
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
856 * but ADTS header is always multiple of 8 bits in MPEG2
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
857 * so not needed to actually do it.
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
858 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
859 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
860
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
861 #ifdef ANALYSIS
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
862 dbg_count = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
863 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
864
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
865 /* decode the complete bitstream */
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
866 #ifdef SCALABLE_DEC
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
867 if ((hDecoder->object_type == 6) || (hDecoder->object_type == DRM_ER_LC))
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
868 {
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
869 aac_scalable_main_element(hDecoder, hInfo, &ld, &hDecoder->pce, hDecoder->drc);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
870 } else {
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
871 #endif
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
872 raw_data_block(hDecoder, hInfo, &ld, &hDecoder->pce, hDecoder->drc);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
873 #ifdef SCALABLE_DEC
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
874 }
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
875 #endif
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
876
25836
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
877 if(hDecoder->latm_header_present)
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
878 {
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
879 endbit = faad_get_processed_bits(&ld);
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
880 if(endbit-startbit > payload_bits)
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
881 fprintf(stderr, "\r\nERROR, too many payload bits read: %u > %d. Please. report with a link to a sample\n",
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
882 endbit-startbit, payload_bits);
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
883 if(hDecoder->latm_config.otherDataLenBits > 0)
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
884 faad_getbits(&ld, hDecoder->latm_config.otherDataLenBits);
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
885 faad_byte_align(&ld);
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
886 }
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
887
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
888 channels = hDecoder->fr_channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
889
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
890 if (hInfo->error > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
891 goto error;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
892
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
893 /* safety check */
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
894 if (channels == 0 || channels > MAX_CHANNELS)
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
895 {
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
896 /* invalid number of channels */
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
897 hInfo->error = 12;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
898 goto error;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
899 }
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
900
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
901 /* no more bit reading after this */
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
902 bitsconsumed = faad_get_processed_bits(&ld);
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
903 hInfo->bytesconsumed = bit2byte(bitsconsumed);
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
904 if (ld.error)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
905 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
906 hInfo->error = 14;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
907 goto error;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
908 }
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
909 faad_endbits(&ld);
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
910
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
911
25836
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
912 if (!hDecoder->adts_header_present && !hDecoder->adif_header_present && !hDecoder->latm_header_present)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
913 {
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
914 if (hDecoder->channelConfiguration == 0)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
915 hDecoder->channelConfiguration = channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
916
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
917 if (channels == 8) /* 7.1 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
918 hDecoder->channelConfiguration = 7;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
919 if (channels == 7) /* not a standard channelConfiguration */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
920 hDecoder->channelConfiguration = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
921 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
922
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
923 if ((channels == 5 || channels == 6) && hDecoder->config.downMatrix)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
924 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
925 hDecoder->downMatrix = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
926 output_channels = 2;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
927 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
928 output_channels = channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
929 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
930
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
931 #if (defined(PS_DEC) || defined(DRM_PS))
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
932 hDecoder->upMatrix = 0;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
933 /* check if we have a mono file */
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
934 if (output_channels == 1)
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
935 {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
936 /* upMatrix to 2 channels for implicit signalling of PS */
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
937 hDecoder->upMatrix = 1;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
938 output_channels = 2;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
939 }
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
940 #endif
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
941
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
942 /* Make a channel configuration based on either a PCE or a channelConfiguration */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
943 create_channel_config(hDecoder, hInfo);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
944
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
945 /* number of samples in this frame */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
946 hInfo->samples = frame_len*output_channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
947 /* number of channels in this frame */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
948 hInfo->channels = output_channels;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
949 /* samplerate */
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
950 hInfo->samplerate = get_sample_rate(hDecoder->sf_index);
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
951 /* object type */
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
952 hInfo->object_type = hDecoder->object_type;
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
953 /* sbr */
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
954 hInfo->sbr = NO_SBR;
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
955 /* header type */
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
956 hInfo->header_type = RAW;
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
957 if (hDecoder->adif_header_present)
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
958 hInfo->header_type = ADIF;
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
959 if (hDecoder->adts_header_present)
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
960 hInfo->header_type = ADTS;
25836
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
961 if (hDecoder->latm_header_present)
bc425ba00960 added code to check and handle the presence of LATM streams in the init() and decode() functions
nicodvb
parents: 25835
diff changeset
962 hInfo->header_type = LATM;
18141
59b6fa5b4201 Update to faad2 cvs 20040915+MPlayer fixes
rtognimp
parents: 14727
diff changeset
963 #if (defined(PS_DEC) || defined(DRM_PS))
59b6fa5b4201 Update to faad2 cvs 20040915+MPlayer fixes
rtognimp
parents: 14727
diff changeset
964 hInfo->ps = hDecoder->ps_used_global;
59b6fa5b4201 Update to faad2 cvs 20040915+MPlayer fixes
rtognimp
parents: 14727
diff changeset
965 #endif
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
966
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
967 /* check if frame has channel elements */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
968 if (channels == 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
969 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
970 hDecoder->frame++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
971 return NULL;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
972 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
973
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
974 /* allocate the buffer for the final samples */
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
975 if ((hDecoder->sample_buffer == NULL) ||
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
976 (hDecoder->alloced_channels != output_channels))
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
977 {
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
978 static const uint8_t str[] = { sizeof(int16_t), sizeof(int32_t), sizeof(int32_t),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
979 sizeof(float32_t), sizeof(double), sizeof(int16_t), sizeof(int16_t),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
980 sizeof(int16_t), sizeof(int16_t), 0, 0, 0
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
981 };
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
982 uint8_t stride = str[hDecoder->config.outputFormat-1];
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
983 #ifdef SBR_DEC
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
984 if (((hDecoder->sbr_present_flag == 1)&&(!hDecoder->downSampledSBR)) || (hDecoder->forceUpSampling == 1))
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
985 {
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
986 stride = 2 * stride;
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
987 }
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
988 #endif
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
989 /* check if we want to use internal sample_buffer */
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
990 if (sample_buffer_size == 0)
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
991 {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
992 if (hDecoder->sample_buffer)
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
993 faad_free(hDecoder->sample_buffer);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
994 hDecoder->sample_buffer = NULL;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
995 hDecoder->sample_buffer = faad_malloc(frame_len*output_channels*stride);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
996 } else if (sample_buffer_size < frame_len*output_channels*stride) {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
997 /* provided sample buffer is not big enough */
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
998 hInfo->error = 27;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
999 return NULL;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
1000 }
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1001 hDecoder->alloced_channels = output_channels;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1002 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1003
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
1004 if (sample_buffer_size == 0)
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
1005 {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
1006 sample_buffer = hDecoder->sample_buffer;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
1007 } else {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
1008 sample_buffer = *sample_buffer2;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
1009 }
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1010
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1011 #ifdef SBR_DEC
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1012 if ((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1013 {
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1014 uint8_t ele;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1015
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1016 /* this data is different when SBR is used or when the data is upsampled */
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
1017 if (!hDecoder->downSampledSBR)
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
1018 {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
1019 frame_len *= 2;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
1020 hInfo->samples *= 2;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
1021 hInfo->samplerate *= 2;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
1022 }
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1023
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1024 /* check if every element was provided with SBR data */
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1025 for (ele = 0; ele < hDecoder->fr_ch_ele; ele++)
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1026 {
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1027 if (hDecoder->sbr[ele] == NULL)
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1028 {
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1029 hInfo->error = 25;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1030 goto error;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1031 }
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1032 }
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1033
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1034 /* sbr */
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1035 if (hDecoder->sbr_present_flag == 1)
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1036 {
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1037 hInfo->object_type = HE_AAC;
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1038 hInfo->sbr = SBR_UPSAMPLED;
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1039 } else {
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1040 hInfo->sbr = NO_SBR_UPSAMPLED;
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
1041 }
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
1042 if (hDecoder->downSampledSBR)
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
1043 {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
1044 hInfo->sbr = SBR_DOWNSAMPLED;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
1045 }
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1046 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1047 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1048
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1049 sample_buffer = output_to_PCM(hDecoder, hDecoder->time_out, sample_buffer,
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1050 output_channels, frame_len, hDecoder->config.outputFormat);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1051
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1052
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1053 hDecoder->postSeekResetFlag = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1054
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1055 hDecoder->frame++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1056 #ifdef LD_DEC
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1057 if (hDecoder->object_type != LD)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1058 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1059 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1060 if (hDecoder->frame <= 1)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1061 hInfo->samples = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1062 #ifdef LD_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1063 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1064 /* LD encoders will give lower delay */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1065 if (hDecoder->frame <= 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1066 hInfo->samples = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1067 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1068 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1069
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1070 /* cleanup */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1071 #ifdef ANALYSIS
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1072 fflush(stdout);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1073 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1074
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1075 #ifdef PROFILE
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1076 count = faad_get_ts() - count;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1077 hDecoder->cycles += count;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1078 #endif
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1079
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1080 return sample_buffer;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1081
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1082 error:
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1083
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
1084 faad_endbits(&ld);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1085
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1086 /* cleanup */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1087 #ifdef ANALYSIS
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1088 fflush(stdout);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1089 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1090
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1091 return NULL;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1092 }