47 #define AAC_MAX_CHANNELS 6
50 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8,
51 12, 12, 12, 12, 12, 16, 16, 24, 28, 36, 44,
52 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64
56 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8,
57 12, 12, 12, 16, 16, 16, 20, 24, 24, 28, 36,
58 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40
62 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8,
63 12, 12, 12, 12, 16, 16, 20, 20, 24, 24, 28, 28,
64 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
69 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8,
70 12, 12, 12, 12, 16, 16, 20, 20, 24, 24, 28, 28,
71 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32
75 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
76 12, 12, 12, 12, 16, 16, 16, 20, 20, 24, 24, 28, 28,
77 32, 36, 36, 40, 44, 48, 52, 52, 64, 64, 64, 64, 64
81 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
82 12, 12, 12, 12, 12, 12, 12, 12, 12, 16, 16, 16, 16, 20, 20, 20, 24, 24, 28, 28,
83 32, 36, 40, 40, 44, 48, 52, 56, 60, 64, 64, 64
87 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
88 16, 16, 16, 16, 16, 16, 16, 20, 20, 20, 20, 24, 24, 24, 28, 28,
89 32, 36, 36, 40, 44, 48, 52, 56, 60, 64, 80
100 4, 4, 4, 4, 4, 4, 8, 8, 8, 16, 28, 36
104 4, 4, 4, 4, 4, 8, 8, 8, 12, 12, 12, 16, 16, 16
108 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 12, 12, 16, 16, 20
112 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 12, 12, 16, 20, 20
116 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 12, 16, 20, 20
167 const uint8_t *
sizes[2];
173 for (i = 0; i < 16; i++)
214 for (i = 0; i < s->
chan_map[0]; i++)
235 float *output = sce->
ret;
238 memcpy(output, sce->
saved,
sizeof(
float)*1024);
240 memset(output, 0,
sizeof(output[0]) * 448);
241 for (i = 448; i < 576; i++)
242 output[i] = sce->
saved[i] * pwindow[i - 448];
243 for (i = 576; i < 704; i++)
244 output[i] = sce->
saved[i];
247 for (i = 0; i < 1024; i++) {
248 output[i+1024] = audio[i * chans] * lwindow[1024 - i - 1];
249 sce->
saved[i] = audio[i * chans] * lwindow[i];
252 for (i = 0; i < 448; i++)
253 output[i+1024] = audio[i * chans];
255 output[i+1024] = audio[i * chans] * swindow[576 - i - 1];
256 memset(output+1024+576, 0,
sizeof(output[0]) * 448);
257 for (i = 0; i < 1024; i++)
258 sce->
saved[i] = audio[i * chans];
262 for (k = 0; k < 1024; k += 128) {
263 for (i = 448 + k; i < 448 + k + 256; i++)
264 output[i - 448 - k] = (i < 1024)
266 : audio[(i-1024)*chans];
271 for (i = 0; i < 1024; i++)
272 sce->
saved[i] = audio[i * chans];
292 for (w = 1; w < 8; w++)
318 int start, maxsfb, cmaxsfb;
320 for (ch = 0; ch < chans; ch++) {
326 for (g = 0; g < ics->
num_swb; g++) {
336 for (cmaxsfb = ics->
num_swb; cmaxsfb > 0 && cpe->
ch[ch].
zeroes[w+cmaxsfb-1]; cmaxsfb--)
338 maxsfb =
FFMAX(maxsfb, cmaxsfb);
344 for (g = 0; g < ics->
max_sfb; g++) {
346 for (w2 = w; w2 < w + ics->
group_len[w]; w2++) {
347 if (!cpe->
ch[ch].
zeroes[w2*16 + g]) {
364 for (i = 0; i < ics0->
max_sfb; i++)
367 if (msc == 0 || ics0->
max_sfb == 0)
396 if (!sce->
zeroes[w*16 + i]) {
398 if (diff < 0 || diff > 120)
400 off = sce->
sf_idx[w*16 + i];
436 if (sce->
zeroes[w*16 + i]) {
476 int i, namelen, padbits;
478 namelen = strlen(name) + 2;
486 for (i = 0; i < namelen - 2; i++)
492 uint8_t *frame,
int buf_size,
void *
data)
497 int i, ch, w,
g, chans,
tag, start_ch;
498 int chan_el_counter[4];
510 for (i = 0; i < s->
chan_map[0]; i++) {
514 samples2 + start_ch, start_ch, chans);
526 for (i = 0; i < s->
chan_map[0]; i++) {
531 for (ch = 0; ch < chans; ch++) {
533 int cur_channel = start_ch + ch;
534 samples2 = samples + cur_channel;
535 la = samples2 + (448+64) * avctx->
channels;
573 memset(chan_el_counter, 0,
sizeof(chan_el_counter));
574 for (i = 0; i < s->
chan_map[0]; i++) {
582 for (ch = 0; ch < chans; ch++)
585 for (ch = 0; ch < chans; ch++) {
591 && wi[0].window_type[0] == wi[1].window_type[0]
592 && wi[0].window_shape == wi[1].window_shape) {
596 if (wi[0].grouping[w] != wi[1].grouping[w]) {
607 for (g = 0; g < ics->
num_swb; g++)
621 for (ch = 0; ch < chans; ch++) {
629 if (frame_bits <= 6144 * avctx->channels - 3) {
669 #define AACENC_FLAGS AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM
671 {
"stereo_mode",
"Stereo coding method", offsetof(
AACEncContext,
options.stereo_mode),
AV_OPT_TYPE_INT, {.dbl = 0}, -1, 1,
AACENC_FLAGS,
"stereo_mode"},
674 {
"ms_force",
"Force Mid/Side for the whole frame if possible", 0,
AV_OPT_TYPE_CONST, {.dbl = 1 }, INT_MIN, INT_MAX,
AACENC_FLAGS,
"stereo_mode"},