Mercurial > libavcodec.hg
comparison atrac1.c @ 10197:024dff84e511 libavcodec
K&R coding style whitespace cosmetics
author | diego |
---|---|
date | Sun, 20 Sep 2009 17:16:12 +0000 |
parents | 1b1ac77dee05 |
children | 78af613fc316 |
comparison
equal
deleted
inserted
replaced
10196:9dcd906bd334 | 10197:024dff84e511 |
---|---|
58 int log2_block_count[AT1_QMF_BANDS]; ///< log2 number of blocks in a band | 58 int log2_block_count[AT1_QMF_BANDS]; ///< log2 number of blocks in a band |
59 int num_bfus; ///< number of Block Floating Units | 59 int num_bfus; ///< number of Block Floating Units |
60 int idwls[AT1_MAX_BFU]; ///< the word length indexes for each BFU | 60 int idwls[AT1_MAX_BFU]; ///< the word length indexes for each BFU |
61 int idsfs[AT1_MAX_BFU]; ///< the scalefactor indexes for each BFU | 61 int idsfs[AT1_MAX_BFU]; ///< the scalefactor indexes for each BFU |
62 float* spectrum[2]; | 62 float* spectrum[2]; |
63 DECLARE_ALIGNED_16(float,spec1[AT1_SU_SAMPLES]); ///< mdct buffer | 63 DECLARE_ALIGNED_16(float, spec1[AT1_SU_SAMPLES]); ///< mdct buffer |
64 DECLARE_ALIGNED_16(float,spec2[AT1_SU_SAMPLES]); ///< mdct buffer | 64 DECLARE_ALIGNED_16(float, spec2[AT1_SU_SAMPLES]); ///< mdct buffer |
65 DECLARE_ALIGNED_16(float,fst_qmf_delay[46]); ///< delay line for the 1st stacked QMF filter | 65 DECLARE_ALIGNED_16(float, fst_qmf_delay[46]); ///< delay line for the 1st stacked QMF filter |
66 DECLARE_ALIGNED_16(float,snd_qmf_delay[46]); ///< delay line for the 2nd stacked QMF filter | 66 DECLARE_ALIGNED_16(float, snd_qmf_delay[46]); ///< delay line for the 2nd stacked QMF filter |
67 DECLARE_ALIGNED_16(float,last_qmf_delay[256+23]); ///< delay line for the last stacked QMF filter | 67 DECLARE_ALIGNED_16(float, last_qmf_delay[256+23]); ///< delay line for the last stacked QMF filter |
68 } AT1SUCtx; | 68 } AT1SUCtx; |
69 | 69 |
70 /** | 70 /** |
71 * The atrac1 context, holds all needed parameters for decoding | 71 * The atrac1 context, holds all needed parameters for decoding |
72 */ | 72 */ |
73 typedef struct { | 73 typedef struct { |
74 AT1SUCtx SUs[AT1_MAX_CHANNELS]; ///< channel sound unit | 74 AT1SUCtx SUs[AT1_MAX_CHANNELS]; ///< channel sound unit |
75 DECLARE_ALIGNED_16(float,spec[AT1_SU_SAMPLES]); ///< the mdct spectrum buffer | 75 DECLARE_ALIGNED_16(float, spec[AT1_SU_SAMPLES]); ///< the mdct spectrum buffer |
76 | 76 |
77 DECLARE_ALIGNED_16(float, low[256]); | 77 DECLARE_ALIGNED_16(float, low[256]); |
78 DECLARE_ALIGNED_16(float, mid[256]); | 78 DECLARE_ALIGNED_16(float, mid[256]); |
79 DECLARE_ALIGNED_16(float,high[512]); | 79 DECLARE_ALIGNED_16(float, high[512]); |
80 float* bands[3]; | 80 float* bands[3]; |
81 DECLARE_ALIGNED_16(float,out_samples[AT1_MAX_CHANNELS][AT1_SU_SAMPLES]); | 81 DECLARE_ALIGNED_16(float, out_samples[AT1_MAX_CHANNELS][AT1_SU_SAMPLES]); |
82 MDCTContext mdct_ctx[3]; | 82 MDCTContext mdct_ctx[3]; |
83 int channels; | 83 int channels; |
84 DSPContext dsp; | 84 DSPContext dsp; |
85 } AT1Ctx; | 85 } AT1Ctx; |
86 | 86 |
95 int rev_spec) | 95 int rev_spec) |
96 { | 96 { |
97 MDCTContext* mdct_context; | 97 MDCTContext* mdct_context; |
98 int transf_size = 1 << nbits; | 98 int transf_size = 1 << nbits; |
99 | 99 |
100 mdct_context = &q->mdct_ctx[nbits - 5 - (nbits>6)]; | 100 mdct_context = &q->mdct_ctx[nbits - 5 - (nbits > 6)]; |
101 | 101 |
102 if (rev_spec) { | 102 if (rev_spec) { |
103 int i; | 103 int i; |
104 for (i=0 ; i<transf_size/2 ; i++) | 104 for (i = 0; i < transf_size / 2; i++) |
105 FFSWAP(float, spec[i], spec[transf_size - 1 - i]); | 105 FFSWAP(float, spec[i], spec[transf_size - 1 - i]); |
106 } | 106 } |
107 ff_imdct_half(mdct_context, out, spec); | 107 ff_imdct_half(mdct_context, out, spec); |
108 } | 108 } |
109 | 109 |
110 | 110 |
111 static int at1_imdct_block(AT1SUCtx* su, AT1Ctx *q) | 111 static int at1_imdct_block(AT1SUCtx* su, AT1Ctx *q) |
112 { | 112 { |
113 int band_num, band_samples, log2_block_count, nbits, num_blocks, block_size; | 113 int band_num, band_samples, log2_block_count, nbits, num_blocks, block_size; |
114 unsigned int start_pos, ref_pos=0, pos = 0; | 114 unsigned int start_pos, ref_pos = 0 pos = 0; |
115 | 115 |
116 for (band_num=0 ; band_num<AT1_QMF_BANDS ; band_num++) { | 116 for (band_num = 0; band_num < AT1_QMF_BANDS; band_num++) { |
117 band_samples = samples_per_band[band_num]; | 117 band_samples = samples_per_band[band_num]; |
118 log2_block_count = su->log2_block_count[band_num]; | 118 log2_block_count = su->log2_block_count[band_num]; |
119 | 119 |
120 /* number of mdct blocks in the current QMF band: 1 - for long mode */ | 120 /* number of mdct blocks in the current QMF band: 1 - for long mode */ |
121 /* 4 for short mode(low/middle bands) and 8 for short mode(high band)*/ | 121 /* 4 for short mode(low/middle bands) and 8 for short mode(high band)*/ |
126 block_size = band_samples >> log2_block_count; | 126 block_size = band_samples >> log2_block_count; |
127 | 127 |
128 /* calc transform size in bits according to the block_size_mode */ | 128 /* calc transform size in bits according to the block_size_mode */ |
129 nbits = mdct_long_nbits[band_num] - log2_block_count; | 129 nbits = mdct_long_nbits[band_num] - log2_block_count; |
130 | 130 |
131 if (nbits!=5 && nbits!=7 && nbits!=8) | 131 if (nbits != 5 && nbits != 7 && nbits != 8) |
132 return -1; | 132 return -1; |
133 | 133 |
134 if (num_blocks == 1) { | 134 if (num_blocks == 1) { |
135 /* long blocks */ | 135 /* long blocks */ |
136 at1_imdct(q, &q->spec[pos], &su->spectrum[0][ref_pos], nbits, band_num); | 136 at1_imdct(q, &q->spec[pos], &su->spectrum[0][ref_pos], nbits, band_num); |
137 pos += block_size; // move to the next mdct block in the spectrum | 137 pos += block_size; // move to the next mdct block in the spectrum |
138 | 138 |
139 /* overlap and window long blocks */ | 139 /* overlap and window long blocks */ |
140 q->dsp.vector_fmul_window(q->bands[band_num], &su->spectrum[1][ref_pos+band_samples-16], | 140 q->dsp.vector_fmul_window(q->bands[band_num], &su->spectrum[1][ref_pos + band_samples - 16], |
141 &su->spectrum[0][ref_pos], short_window, 0, 16); | 141 &su->spectrum[0][ref_pos], short_window, 0, 16); |
142 memcpy(q->bands[band_num]+32, &su->spectrum[0][ref_pos+16], 240 * sizeof(float)); | 142 memcpy(q->bands[band_num] + 32, &su->spectrum[0][ref_pos + 16], 240 * sizeof(float)); |
143 | |
144 } else { | 143 } else { |
145 /* short blocks */ | 144 /* short blocks */ |
146 float *prev_buf; | 145 float *prev_buf; |
147 start_pos = 0; | 146 start_pos = 0; |
148 prev_buf = &su->spectrum[1][ref_pos+band_samples-16]; | 147 prev_buf = &su->spectrum[1][ref_pos + band_samples - 16]; |
149 for (; num_blocks!=0 ; num_blocks--) { | 148 for (; num_blocks != 0; num_blocks--) { |
150 at1_imdct(q, &q->spec[pos], &su->spectrum[0][ref_pos+start_pos], 5, band_num); | 149 at1_imdct(q, &q->spec[pos], &su->spectrum[0][ref_pos + start_pos], 5, band_num); |
151 | 150 |
152 /* overlap and window between short blocks */ | 151 /* overlap and window between short blocks */ |
153 q->dsp.vector_fmul_window(&q->bands[band_num][start_pos], prev_buf, | 152 q->dsp.vector_fmul_window(&q->bands[band_num][start_pos], prev_buf, |
154 &su->spectrum[0][ref_pos+start_pos], short_window, 0, 16); | 153 &su->spectrum[0][ref_pos + start_pos], short_window, 0, 16); |
155 | 154 |
156 prev_buf = &su->spectrum[0][ref_pos+start_pos+16]; | 155 prev_buf = &su->spectrum[0][ref_pos+start_pos + 16]; |
157 start_pos += 32; // use hardcoded block_size | 156 start_pos += 32; // use hardcoded block_size |
158 pos += 32; | 157 pos += 32; |
159 } | 158 } |
160 } | 159 } |
161 ref_pos += band_samples; | 160 ref_pos += band_samples; |
173 | 172 |
174 static int at1_parse_bsm(GetBitContext* gb, int log2_block_cnt[AT1_QMF_BANDS]) | 173 static int at1_parse_bsm(GetBitContext* gb, int log2_block_cnt[AT1_QMF_BANDS]) |
175 { | 174 { |
176 int log2_block_count_tmp, i; | 175 int log2_block_count_tmp, i; |
177 | 176 |
178 for(i=0 ; i<2 ; i++) { | 177 for (i = 0; i < 2; i++) { |
179 /* low and mid band */ | 178 /* low and mid band */ |
180 log2_block_count_tmp = get_bits(gb, 2); | 179 log2_block_count_tmp = get_bits(gb, 2); |
181 if (log2_block_count_tmp & 1) | 180 if (log2_block_count_tmp & 1) |
182 return -1; | 181 return -1; |
183 log2_block_cnt[i] = 2 - log2_block_count_tmp; | 182 log2_block_cnt[i] = 2 - log2_block_count_tmp; |
208 bits_used = su->num_bfus * 10 + 32 + | 207 bits_used = su->num_bfus * 10 + 32 + |
209 bfu_amount_tab2[get_bits(gb, 2)] + | 208 bfu_amount_tab2[get_bits(gb, 2)] + |
210 (bfu_amount_tab3[get_bits(gb, 3)] << 1); | 209 (bfu_amount_tab3[get_bits(gb, 3)] << 1); |
211 | 210 |
212 /* get word length index (idwl) for each BFU */ | 211 /* get word length index (idwl) for each BFU */ |
213 for (i=0 ; i<su->num_bfus ; i++) | 212 for (i = 0; i < su->num_bfus; i++) |
214 su->idwls[i] = get_bits(gb, 4); | 213 su->idwls[i] = get_bits(gb, 4); |
215 | 214 |
216 /* get scalefactor index (idsf) for each BFU */ | 215 /* get scalefactor index (idsf) for each BFU */ |
217 for (i=0 ; i<su->num_bfus ; i++) | 216 for (i = 0; i < su->num_bfus; i++) |
218 su->idsfs[i] = get_bits(gb, 6); | 217 su->idsfs[i] = get_bits(gb, 6); |
219 | 218 |
220 /* zero idwl/idsf for empty BFUs */ | 219 /* zero idwl/idsf for empty BFUs */ |
221 for (i = su->num_bfus; i < AT1_MAX_BFU; i++) | 220 for (i = su->num_bfus; i < AT1_MAX_BFU; i++) |
222 su->idwls[i] = su->idsfs[i] = 0; | 221 su->idwls[i] = su->idsfs[i] = 0; |
223 | 222 |
224 /* read in the spectral data and reconstruct MDCT spectrum of this channel */ | 223 /* read in the spectral data and reconstruct MDCT spectrum of this channel */ |
225 for (band_num=0 ; band_num<AT1_QMF_BANDS ; band_num++) { | 224 for (band_num = 0; band_num < AT1_QMF_BANDS; band_num++) { |
226 for (bfu_num=bfu_bands_t[band_num] ; bfu_num<bfu_bands_t[band_num+1] ; bfu_num++) { | 225 for (bfu_num = bfu_bands_t[band_num]; bfu_num < bfu_bands_t[band_num+1]; bfu_num++) { |
227 int pos; | 226 int pos; |
228 | 227 |
229 int num_specs = specs_per_bfu[bfu_num]; | 228 int num_specs = specs_per_bfu[bfu_num]; |
230 int word_len = !!su->idwls[bfu_num] + su->idwls[bfu_num]; | 229 int word_len = !!su->idwls[bfu_num] + su->idwls[bfu_num]; |
231 float scale_factor = sf_table[su->idsfs[bfu_num]]; | 230 float scale_factor = sf_table[su->idsfs[bfu_num]]; |
239 pos = su->log2_block_count[band_num] ? bfu_start_short[bfu_num] : bfu_start_long[bfu_num]; | 238 pos = su->log2_block_count[band_num] ? bfu_start_short[bfu_num] : bfu_start_long[bfu_num]; |
240 | 239 |
241 if (word_len) { | 240 if (word_len) { |
242 float max_quant = 1.0 / (float)((1 << (word_len - 1)) - 1); | 241 float max_quant = 1.0 / (float)((1 << (word_len - 1)) - 1); |
243 | 242 |
244 for (i=0 ; i<num_specs ; i++) { | 243 for (i = 0; i < num_specs; i++) { |
245 /* read in a quantized spec and convert it to | 244 /* read in a quantized spec and convert it to |
246 * signed int and then inverse quantization | 245 * signed int and then inverse quantization |
247 */ | 246 */ |
248 spec[pos+i] = get_sbits(gb, word_len) * scale_factor * max_quant; | 247 spec[pos+i] = get_sbits(gb, word_len) * scale_factor * max_quant; |
249 } | 248 } |
250 } else { /* word_len = 0 -> empty BFU, zero all specs in the emty BFU */ | 249 } else { /* word_len = 0 -> empty BFU, zero all specs in the emty BFU */ |
251 memset(&spec[pos], 0, num_specs*sizeof(float)); | 250 memset(&spec[pos], 0, num_specs * sizeof(float)); |
252 } | 251 } |
253 } | 252 } |
254 } | 253 } |
255 | 254 |
256 return 0; | 255 return 0; |
257 } | 256 } |
258 | 257 |
259 | 258 |
260 void at1_subband_synthesis(AT1Ctx *q, AT1SUCtx* su, float *pOut) | 259 void at1_subband_synthesis(AT1Ctx *q, AT1SUCtx* su, float *pOut) |
261 { | 260 { |
262 float temp[256]; | 261 float temp[256]; |
263 float iqmf_temp[512 + 46]; | 262 float iqmf_temp[512 + 46]; |
264 | 263 |
265 /* combine low and middle bands */ | 264 /* combine low and middle bands */ |
266 atrac_iqmf(q->bands[0], q->bands[1], 128, temp, su->fst_qmf_delay, iqmf_temp); | 265 atrac_iqmf(q->bands[0], q->bands[1], 128, temp, su->fst_qmf_delay, iqmf_temp); |
267 | 266 |
268 /* delay the signal of the high band by 23 samples */ | 267 /* delay the signal of the high band by 23 samples */ |
269 memcpy( su->last_qmf_delay, &su->last_qmf_delay[256], sizeof(float)*23); | 268 memcpy( su->last_qmf_delay, &su->last_qmf_delay[256], sizeof(float) * 23); |
270 memcpy(&su->last_qmf_delay[23], q->bands[2], sizeof(float)*256); | 269 memcpy(&su->last_qmf_delay[23], q->bands[2], sizeof(float) * 256); |
271 | 270 |
272 /* combine (low + middle) and high bands */ | 271 /* combine (low + middle) and high bands */ |
273 atrac_iqmf(temp, su->last_qmf_delay, 256, pOut, su->snd_qmf_delay, iqmf_temp); | 272 atrac_iqmf(temp, su->last_qmf_delay, 256, pOut, su->snd_qmf_delay, iqmf_temp); |
274 } | 273 } |
275 | 274 |
288 if (buf_size < 212 * q->channels) { | 287 if (buf_size < 212 * q->channels) { |
289 av_log(q,AV_LOG_ERROR,"Not enought data to decode!\n"); | 288 av_log(q,AV_LOG_ERROR,"Not enought data to decode!\n"); |
290 return -1; | 289 return -1; |
291 } | 290 } |
292 | 291 |
293 for (ch=0 ; ch<q->channels ; ch++) { | 292 for (ch = 0; ch < q->channels; ch++) { |
294 AT1SUCtx* su = &q->SUs[ch]; | 293 AT1SUCtx* su = &q->SUs[ch]; |
295 | 294 |
296 init_get_bits(&gb, &buf[212*ch], 212*8); | 295 init_get_bits(&gb, &buf[212 * ch], 212 * 8); |
297 | 296 |
298 /* parse block_size_mode, 1st byte */ | 297 /* parse block_size_mode, 1st byte */ |
299 ret = at1_parse_bsm(&gb, su->log2_block_count); | 298 ret = at1_parse_bsm(&gb, su->log2_block_count); |
300 if (ret < 0) | 299 if (ret < 0) |
301 return ret; | 300 return ret; |
311 } | 310 } |
312 | 311 |
313 /* round, convert to 16bit and interleave */ | 312 /* round, convert to 16bit and interleave */ |
314 if (q->channels == 1) { | 313 if (q->channels == 1) { |
315 /* mono */ | 314 /* mono */ |
316 q->dsp.vector_clipf(samples, q->out_samples[0], -32700.0 / (1<<15), | 315 q->dsp.vector_clipf(samples, q->out_samples[0], -32700.0 / (1 << 15), |
317 32700.0 / (1<<15), AT1_SU_SAMPLES); | 316 32700.0 / (1 << 15), AT1_SU_SAMPLES); |
318 } else { | 317 } else { |
319 /* stereo */ | 318 /* stereo */ |
320 for (i = 0; i < AT1_SU_SAMPLES; i++) { | 319 for (i = 0; i < AT1_SU_SAMPLES; i++) { |
321 samples[i*2] = av_clipf(q->out_samples[0][i], -32700.0 / (1<<15), | 320 samples[i * 2] = av_clipf(q->out_samples[0][i], |
322 32700.0 / (1<<15)); | 321 -32700.0 / (1 << 15), |
323 samples[i*2+1] = av_clipf(q->out_samples[1][i], -32700.0 / (1<<15), | 322 32700.0 / (1 << 15)); |
324 32700.0 / (1<<15)); | 323 samples[i * 2 + 1] = av_clipf(q->out_samples[1][i], |
324 -32700.0 / (1 << 15), | |
325 32700.0 / (1 << 15)); | |
325 } | 326 } |
326 } | 327 } |
327 | 328 |
328 *data_size = q->channels * AT1_SU_SAMPLES * sizeof(*samples); | 329 *data_size = q->channels * AT1_SU_SAMPLES * sizeof(*samples); |
329 return avctx->block_align; | 330 return avctx->block_align; |
337 avctx->sample_fmt = SAMPLE_FMT_FLT; | 338 avctx->sample_fmt = SAMPLE_FMT_FLT; |
338 | 339 |
339 q->channels = avctx->channels; | 340 q->channels = avctx->channels; |
340 | 341 |
341 /* Init the mdct transforms */ | 342 /* Init the mdct transforms */ |
342 ff_mdct_init(&q->mdct_ctx[0], 6, 1, -1.0/ (1<<15)); | 343 ff_mdct_init(&q->mdct_ctx[0], 6, 1, -1.0/ (1 << 15)); |
343 ff_mdct_init(&q->mdct_ctx[1], 8, 1, -1.0/ (1<<15)); | 344 ff_mdct_init(&q->mdct_ctx[1], 8, 1, -1.0/ (1 << 15)); |
344 ff_mdct_init(&q->mdct_ctx[2], 9, 1, -1.0/ (1<<15)); | 345 ff_mdct_init(&q->mdct_ctx[2], 9, 1, -1.0/ (1 << 15)); |
345 | 346 |
346 ff_sine_window_init(short_window, 32); | 347 ff_sine_window_init(short_window, 32); |
347 | 348 |
348 atrac_generate_tables(); | 349 atrac_generate_tables(); |
349 | 350 |