comparison aacenc.c @ 12190:4be87c8091bf libavcodec

aacenc: Refactor apply_window_and_mdct() so it no longer takes an offset channel. Patch by Nathan Caldwell <saintdev@gmail.com>
author alexc
date Mon, 19 Jul 2010 18:19:53 +0000
parents eb5059b0a051
children 335efeae3bb7
comparison
equal deleted inserted replaced
12189:0f0035942790 12190:4be87c8091bf
211 211
212 return 0; 212 return 0;
213 } 213 }
214 214
215 static void apply_window_and_mdct(AVCodecContext *avctx, AACEncContext *s, 215 static void apply_window_and_mdct(AVCodecContext *avctx, AACEncContext *s,
216 SingleChannelElement *sce, short *audio, int channel) 216 SingleChannelElement *sce, short *audio)
217 { 217 {
218 int i, j, k; 218 int i, k;
219 const int chans = avctx->channels;
219 const float * lwindow = sce->ics.use_kb_window[0] ? ff_aac_kbd_long_1024 : ff_sine_1024; 220 const float * lwindow = sce->ics.use_kb_window[0] ? ff_aac_kbd_long_1024 : ff_sine_1024;
220 const float * swindow = sce->ics.use_kb_window[0] ? ff_aac_kbd_short_128 : ff_sine_128; 221 const float * swindow = sce->ics.use_kb_window[0] ? ff_aac_kbd_short_128 : ff_sine_128;
221 const float * pwindow = sce->ics.use_kb_window[1] ? ff_aac_kbd_short_128 : ff_sine_128; 222 const float * pwindow = sce->ics.use_kb_window[1] ? ff_aac_kbd_short_128 : ff_sine_128;
222 223
223 if (sce->ics.window_sequence[0] != EIGHT_SHORT_SEQUENCE) { 224 if (sce->ics.window_sequence[0] != EIGHT_SHORT_SEQUENCE) {
228 s->output[i] = sce->saved[i] * pwindow[i - 448]; 229 s->output[i] = sce->saved[i] * pwindow[i - 448];
229 for (i = 576; i < 704; i++) 230 for (i = 576; i < 704; i++)
230 s->output[i] = sce->saved[i]; 231 s->output[i] = sce->saved[i];
231 } 232 }
232 if (sce->ics.window_sequence[0] != LONG_START_SEQUENCE) { 233 if (sce->ics.window_sequence[0] != LONG_START_SEQUENCE) {
233 for (i = 0, j = channel; i < 1024; i++, j += avctx->channels) { 234 for (i = 0; i < 1024; i++) {
234 s->output[i+1024] = audio[j] * lwindow[1024 - i - 1]; 235 s->output[i+1024] = audio[i * chans] * lwindow[1024 - i - 1];
235 sce->saved[i] = audio[j] * lwindow[i]; 236 sce->saved[i] = audio[i * chans] * lwindow[i];
236 } 237 }
237 } else { 238 } else {
238 for (i = 0, j = channel; i < 448; i++, j += avctx->channels) 239 for (i = 0; i < 448; i++)
239 s->output[i+1024] = audio[j]; 240 s->output[i+1024] = audio[i * chans];
240 for (; i < 576; i++, j += avctx->channels) 241 for (; i < 576; i++)
241 s->output[i+1024] = audio[j] * swindow[576 - i - 1]; 242 s->output[i+1024] = audio[i * chans] * swindow[576 - i - 1];
242 memset(s->output+1024+576, 0, sizeof(s->output[0]) * 448); 243 memset(s->output+1024+576, 0, sizeof(s->output[0]) * 448);
243 for (i = 0, j = channel; i < 1024; i++, j += avctx->channels) 244 for (i = 0; i < 1024; i++)
244 sce->saved[i] = audio[j]; 245 sce->saved[i] = audio[i * chans];
245 } 246 }
246 ff_mdct_calc(&s->mdct1024, sce->coeffs, s->output); 247 ff_mdct_calc(&s->mdct1024, sce->coeffs, s->output);
247 } else { 248 } else {
248 for (k = 0; k < 1024; k += 128) { 249 for (k = 0; k < 1024; k += 128) {
249 for (i = 448 + k; i < 448 + k + 256; i++) 250 for (i = 448 + k; i < 448 + k + 256; i++)
250 s->output[i - 448 - k] = (i < 1024) 251 s->output[i - 448 - k] = (i < 1024)
251 ? sce->saved[i] 252 ? sce->saved[i]
252 : audio[channel + (i-1024)*avctx->channels]; 253 : audio[(i-1024)*chans];
253 s->dsp.vector_fmul (s->output, k ? swindow : pwindow, 128); 254 s->dsp.vector_fmul (s->output, k ? swindow : pwindow, 128);
254 s->dsp.vector_fmul_reverse(s->output+128, s->output+128, swindow, 128); 255 s->dsp.vector_fmul_reverse(s->output+128, s->output+128, swindow, 128);
255 ff_mdct_calc(&s->mdct128, sce->coeffs + k, s->output); 256 ff_mdct_calc(&s->mdct128, sce->coeffs + k, s->output);
256 } 257 }
257 for (i = 0, j = channel; i < 1024; i++, j += avctx->channels) 258 for (i = 0; i < 1024; i++)
258 sce->saved[i] = audio[j]; 259 sce->saved[i] = audio[i * chans];
259 } 260 }
260 } 261 }
261 262
262 /** 263 /**
263 * Encode ics_info element. 264 * Encode ics_info element.
541 ics->num_swb = tag == TYPE_LFE ? 12 : s->psy.num_bands[ics->num_windows == 8]; 542 ics->num_swb = tag == TYPE_LFE ? 12 : s->psy.num_bands[ics->num_windows == 8];
542 for (k = 0; k < ics->num_windows; k++) 543 for (k = 0; k < ics->num_windows; k++)
543 ics->group_len[k] = wi[j].grouping[k]; 544 ics->group_len[k] = wi[j].grouping[k];
544 545
545 s->cur_channel = start_ch + j; 546 s->cur_channel = start_ch + j;
546 apply_window_and_mdct(avctx, s, &cpe->ch[j], samples2, j); 547 apply_window_and_mdct(avctx, s, &cpe->ch[j], samples2 + j);
547 } 548 }
548 start_ch += chans; 549 start_ch += chans;
549 } 550 }
550 do { 551 do {
551 int frame_bits; 552 int frame_bits;