Mercurial > mplayer.hg
annotate libfaad2/ssr_fb.c @ 31523:7ab5787e625c
configure: Fix detection of SDL backend for vo_gl on OS X
SDL overrides main, and provides a prototype for SDL_main
which uses argc and argv. Since the prototype didn't match
the main() in the test program, it failed to compile, making
the test fail when it should have worked.
author | astrange |
---|---|
date | Wed, 30 Jun 2010 09:27:03 +0000 |
parents | e83eef58b30a |
children |
rev | line source |
---|---|
10725 | 1 /* |
2 ** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding | |
12527 | 3 ** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
4 ** |
10725 | 5 ** This program is free software; you can redistribute it and/or modify |
6 ** it under the terms of the GNU General Public License as published by | |
7 ** the Free Software Foundation; either version 2 of the License, or | |
8 ** (at your option) any later version. | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
9 ** |
10725 | 10 ** This program is distributed in the hope that it will be useful, |
11 ** but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 ** GNU General Public License for more details. | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
14 ** |
10725 | 15 ** You should have received a copy of the GNU General Public License |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
16 ** along with this program; if not, write to the Free Software |
10725 | 17 ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
18 ** | |
19 ** Any non-GPL usage of this software or parts of this software is strictly | |
20 ** forbidden. | |
21 ** | |
22 ** Commercial non-GPL licensing of this software is possible. | |
23 ** For more info contact Ahead Software through Mpeg4AAClicense@nero.com. | |
24 ** | |
18141 | 25 ** $Id: ssr_fb.c,v 1.13 2004/09/04 14:56:29 menno Exp $ |
10725 | 26 **/ |
27 | |
28 #include "common.h" | |
29 #include "structs.h" | |
30 | |
31 #ifdef SSR_DEC | |
32 | |
33 #include <string.h> | |
34 #include <stdlib.h> | |
35 #include "syntax.h" | |
36 #include "filtbank.h" | |
37 #include "mdct.h" | |
38 #include "ssr_fb.h" | |
39 #include "ssr_win.h" | |
40 | |
41 fb_info *ssr_filter_bank_init(uint16_t frame_len) | |
42 { | |
43 uint16_t nshort = frame_len/8; | |
44 | |
12527 | 45 fb_info *fb = (fb_info*)faad_malloc(sizeof(fb_info)); |
10725 | 46 memset(fb, 0, sizeof(fb_info)); |
47 | |
48 /* normal */ | |
49 fb->mdct256 = faad_mdct_init(2*nshort); | |
50 fb->mdct2048 = faad_mdct_init(2*frame_len); | |
51 | |
52 fb->long_window[0] = sine_long_256; | |
53 fb->short_window[0] = sine_short_32; | |
54 fb->long_window[1] = kbd_long_256; | |
55 fb->short_window[1] = kbd_short_32; | |
56 | |
57 return fb; | |
58 } | |
59 | |
60 void ssr_filter_bank_end(fb_info *fb) | |
61 { | |
62 faad_mdct_end(fb->mdct256); | |
63 faad_mdct_end(fb->mdct2048); | |
64 | |
12527 | 65 if (fb) faad_free(fb); |
10725 | 66 } |
67 | |
68 static INLINE void imdct_ssr(fb_info *fb, real_t *in_data, | |
69 real_t *out_data, uint16_t len) | |
70 { | |
71 mdct_info *mdct; | |
72 | |
73 switch (len) | |
74 { | |
75 case 512: | |
76 mdct = fb->mdct2048; | |
77 break; | |
78 case 64: | |
79 mdct = fb->mdct256; | |
80 break; | |
81 } | |
82 | |
83 faad_imdct(mdct, in_data, out_data); | |
84 } | |
85 | |
86 /* NON-overlapping inverse filterbank for use with SSR */ | |
87 void ssr_ifilter_bank(fb_info *fb, uint8_t window_sequence, uint8_t window_shape, | |
88 uint8_t window_shape_prev, real_t *freq_in, | |
89 real_t *time_out, uint16_t frame_len) | |
90 { | |
91 int16_t i; | |
92 real_t *transf_buf; | |
93 | |
94 real_t *window_long; | |
95 real_t *window_long_prev; | |
96 real_t *window_short; | |
97 real_t *window_short_prev; | |
98 | |
99 uint16_t nlong = frame_len; | |
100 uint16_t nshort = frame_len/8; | |
101 uint16_t trans = nshort/2; | |
102 | |
103 uint16_t nflat_ls = (nlong-nshort)/2; | |
104 | |
12527 | 105 transf_buf = (real_t*)faad_malloc(2*nlong*sizeof(real_t)); |
10725 | 106 |
107 window_long = fb->long_window[window_shape]; | |
108 window_long_prev = fb->long_window[window_shape_prev]; | |
109 window_short = fb->short_window[window_shape]; | |
110 window_short_prev = fb->short_window[window_shape_prev]; | |
111 | |
112 switch (window_sequence) | |
113 { | |
114 case ONLY_LONG_SEQUENCE: | |
115 imdct_ssr(fb, freq_in, transf_buf, 2*nlong); | |
116 for (i = nlong-1; i >= 0; i--) | |
117 { | |
118 time_out[i] = MUL_R_C(transf_buf[i],window_long_prev[i]); | |
119 time_out[nlong+i] = MUL_R_C(transf_buf[nlong+i],window_long[nlong-1-i]); | |
120 } | |
121 break; | |
122 | |
123 case LONG_START_SEQUENCE: | |
124 imdct_ssr(fb, freq_in, transf_buf, 2*nlong); | |
125 for (i = 0; i < nlong; i++) | |
126 time_out[i] = MUL_R_C(transf_buf[i],window_long_prev[i]); | |
127 for (i = 0; i < nflat_ls; i++) | |
128 time_out[nlong+i] = transf_buf[nlong+i]; | |
129 for (i = 0; i < nshort; i++) | |
130 time_out[nlong+nflat_ls+i] = MUL_R_C(transf_buf[nlong+nflat_ls+i],window_short[nshort-i-1]); | |
131 for (i = 0; i < nflat_ls; i++) | |
132 time_out[nlong+nflat_ls+nshort+i] = 0; | |
133 break; | |
134 | |
135 case EIGHT_SHORT_SEQUENCE: | |
136 imdct_ssr(fb, freq_in+0*nshort, transf_buf+2*nshort*0, 2*nshort); | |
137 imdct_ssr(fb, freq_in+1*nshort, transf_buf+2*nshort*1, 2*nshort); | |
138 imdct_ssr(fb, freq_in+2*nshort, transf_buf+2*nshort*2, 2*nshort); | |
139 imdct_ssr(fb, freq_in+3*nshort, transf_buf+2*nshort*3, 2*nshort); | |
140 imdct_ssr(fb, freq_in+4*nshort, transf_buf+2*nshort*4, 2*nshort); | |
141 imdct_ssr(fb, freq_in+5*nshort, transf_buf+2*nshort*5, 2*nshort); | |
142 imdct_ssr(fb, freq_in+6*nshort, transf_buf+2*nshort*6, 2*nshort); | |
143 imdct_ssr(fb, freq_in+7*nshort, transf_buf+2*nshort*7, 2*nshort); | |
144 for(i = nshort-1; i >= 0; i--) | |
145 { | |
146 time_out[i+0*nshort] = MUL_R_C(transf_buf[nshort*0+i],window_short_prev[i]); | |
147 time_out[i+1*nshort] = MUL_R_C(transf_buf[nshort*1+i],window_short[i]); | |
148 time_out[i+2*nshort] = MUL_R_C(transf_buf[nshort*2+i],window_short_prev[i]); | |
149 time_out[i+3*nshort] = MUL_R_C(transf_buf[nshort*3+i],window_short[i]); | |
150 time_out[i+4*nshort] = MUL_R_C(transf_buf[nshort*4+i],window_short_prev[i]); | |
151 time_out[i+5*nshort] = MUL_R_C(transf_buf[nshort*5+i],window_short[i]); | |
152 time_out[i+6*nshort] = MUL_R_C(transf_buf[nshort*6+i],window_short_prev[i]); | |
153 time_out[i+7*nshort] = MUL_R_C(transf_buf[nshort*7+i],window_short[i]); | |
154 time_out[i+8*nshort] = MUL_R_C(transf_buf[nshort*8+i],window_short_prev[i]); | |
155 time_out[i+9*nshort] = MUL_R_C(transf_buf[nshort*9+i],window_short[i]); | |
156 time_out[i+10*nshort] = MUL_R_C(transf_buf[nshort*10+i],window_short_prev[i]); | |
157 time_out[i+11*nshort] = MUL_R_C(transf_buf[nshort*11+i],window_short[i]); | |
158 time_out[i+12*nshort] = MUL_R_C(transf_buf[nshort*12+i],window_short_prev[i]); | |
159 time_out[i+13*nshort] = MUL_R_C(transf_buf[nshort*13+i],window_short[i]); | |
160 time_out[i+14*nshort] = MUL_R_C(transf_buf[nshort*14+i],window_short_prev[i]); | |
161 time_out[i+15*nshort] = MUL_R_C(transf_buf[nshort*15+i],window_short[i]); | |
162 } | |
163 break; | |
164 | |
165 case LONG_STOP_SEQUENCE: | |
166 imdct_ssr(fb, freq_in, transf_buf, 2*nlong); | |
167 for (i = 0; i < nflat_ls; i++) | |
168 time_out[i] = 0; | |
169 for (i = 0; i < nshort; i++) | |
170 time_out[nflat_ls+i] = MUL_R_C(transf_buf[nflat_ls+i],window_short_prev[i]); | |
171 for (i = 0; i < nflat_ls; i++) | |
172 time_out[nflat_ls+nshort+i] = transf_buf[nflat_ls+nshort+i]; | |
173 for (i = 0; i < nlong; i++) | |
174 time_out[nlong+i] = MUL_R_C(transf_buf[nlong+i],window_long[nlong-1-i]); | |
175 break; | |
176 } | |
177 | |
12527 | 178 faad_free(transf_buf); |
10725 | 179 } |
180 | |
181 | |
182 #endif |