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