3 * Copyright (C) 2008 Konstantin Shishkov
5 * This file is part of FFmpeg.
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 * @file libavcodec/aacenc.c
27 /***********************************
29 * add sane pulse detection
30 * add temporal noise shaping
31 ***********************************/
36 #include "mpeg4audio.h"
44 static const uint8_t swb_size_1024_96
[] = {
45 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8,
46 12, 12, 12, 12, 12, 16, 16, 24, 28, 36, 44,
47 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64
50 static const uint8_t swb_size_1024_64
[] = {
51 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8,
52 12, 12, 12, 16, 16, 16, 20, 24, 24, 28, 36,
53 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40
56 static const uint8_t swb_size_1024_48
[] = {
57 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8,
58 12, 12, 12, 12, 16, 16, 20, 20, 24, 24, 28, 28,
59 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
63 static const uint8_t swb_size_1024_32
[] = {
64 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8,
65 12, 12, 12, 12, 16, 16, 20, 20, 24, 24, 28, 28,
66 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32
69 static const uint8_t swb_size_1024_24
[] = {
70 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
71 12, 12, 12, 12, 16, 16, 16, 20, 20, 24, 24, 28, 28,
72 32, 36, 36, 40, 44, 48, 52, 52, 64, 64, 64, 64, 64
75 static const uint8_t swb_size_1024_16
[] = {
76 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
77 12, 12, 12, 12, 12, 12, 12, 12, 12, 16, 16, 16, 16, 20, 20, 20, 24, 24, 28, 28,
78 32, 36, 40, 40, 44, 48, 52, 56, 60, 64, 64, 64
81 static const uint8_t swb_size_1024_8
[] = {
82 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
83 16, 16, 16, 16, 16, 16, 16, 20, 20, 20, 20, 24, 24, 24, 28, 28,
84 32, 36, 36, 40, 44, 48, 52, 56, 60, 64, 80
87 static const uint8_t *swb_size_1024
[] = {
88 swb_size_1024_96
, swb_size_1024_96
, swb_size_1024_64
,
89 swb_size_1024_48
, swb_size_1024_48
, swb_size_1024_32
,
90 swb_size_1024_24
, swb_size_1024_24
, swb_size_1024_16
,
91 swb_size_1024_16
, swb_size_1024_16
, swb_size_1024_8
94 static const uint8_t swb_size_128_96
[] = {
95 4, 4, 4, 4, 4, 4, 8, 8, 8, 16, 28, 36
98 static const uint8_t swb_size_128_48
[] = {
99 4, 4, 4, 4, 4, 8, 8, 8, 12, 12, 12, 16, 16, 16
102 static const uint8_t swb_size_128_24
[] = {
103 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 12, 12, 16, 16, 20
106 static const uint8_t swb_size_128_16
[] = {
107 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 12, 12, 16, 20, 20
110 static const uint8_t swb_size_128_8
[] = {
111 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 12, 16, 20, 20
114 static const uint8_t *swb_size_128
[] = {
115 /* the last entry on the following row is swb_size_128_64 but is a
116 duplicate of swb_size_128_96 */
117 swb_size_128_96
, swb_size_128_96
, swb_size_128_96
,
118 swb_size_128_48
, swb_size_128_48
, swb_size_128_48
,
119 swb_size_128_24
, swb_size_128_24
, swb_size_128_16
,
120 swb_size_128_16
, swb_size_128_16
, swb_size_128_8
123 /** default channel configurations */
124 static const uint8_t aac_chan_configs
[6][5] = {
125 {1, TYPE_SCE
}, // 1 channel - single channel element
126 {1, TYPE_CPE
}, // 2 channels - channel pair
127 {2, TYPE_SCE
, TYPE_CPE
}, // 3 channels - center + stereo
128 {3, TYPE_SCE
, TYPE_CPE
, TYPE_SCE
}, // 4 channels - front center + stereo + back center
129 {3, TYPE_SCE
, TYPE_CPE
, TYPE_CPE
}, // 5 channels - front center + stereo + back stereo
130 {4, TYPE_SCE
, TYPE_CPE
, TYPE_CPE
, TYPE_LFE
}, // 6 channels - front center + stereo + back stereo + LFE
134 * Make AAC audio config object.
135 * @see 1.6.2.1 "Syntax - AudioSpecificConfig"
137 static void put_audio_specific_config(AVCodecContext
*avctx
)
140 AACEncContext
*s
= avctx
->priv_data
;
142 init_put_bits(&pb
, avctx
->extradata
, avctx
->extradata_size
*8);
143 put_bits(&pb
, 5, 2); //object type - AAC-LC
144 put_bits(&pb
, 4, s
->samplerate_index
); //sample rate index
145 put_bits(&pb
, 4, avctx
->channels
);
147 put_bits(&pb
, 1, 0); //frame length - 1024 samples
148 put_bits(&pb
, 1, 0); //does not depend on core coder
149 put_bits(&pb
, 1, 0); //is not extension
153 static av_cold
int aac_encode_init(AVCodecContext
*avctx
)
155 AACEncContext
*s
= avctx
->priv_data
;
157 const uint8_t *sizes
[2];
160 avctx
->frame_size
= 1024;
162 for (i
= 0; i
< 16; i
++)
163 if (avctx
->sample_rate
== ff_mpeg4audio_sample_rates
[i
])
166 av_log(avctx
, AV_LOG_ERROR
, "Unsupported sample rate %d\n", avctx
->sample_rate
);
169 if (avctx
->channels
> 6) {
170 av_log(avctx
, AV_LOG_ERROR
, "Unsupported number of channels: %d\n", avctx
->channels
);
173 s
->samplerate_index
= i
;
175 dsputil_init(&s
->dsp
, avctx
);
176 ff_mdct_init(&s
->mdct1024
, 11, 0, 1.0);
177 ff_mdct_init(&s
->mdct128
, 8, 0, 1.0);
179 ff_kbd_window_init(ff_aac_kbd_long_1024
, 4.0, 1024);
180 ff_kbd_window_init(ff_aac_kbd_short_128
, 6.0, 128);
181 ff_sine_window_init(ff_sine_1024
, 1024);
182 ff_sine_window_init(ff_sine_128
, 128);
184 s
->samples
= av_malloc(2 * 1024 * avctx
->channels
* sizeof(s
->samples
[0]));
185 s
->cpe
= av_mallocz(sizeof(ChannelElement
) * aac_chan_configs
[avctx
->channels
-1][0]);
186 avctx
->extradata
= av_malloc(2);
187 avctx
->extradata_size
= 2;
188 put_audio_specific_config(avctx
);
190 sizes
[0] = swb_size_1024
[i
];
191 sizes
[1] = swb_size_128
[i
];
192 lengths
[0] = ff_aac_num_swb_1024
[i
];
193 lengths
[1] = ff_aac_num_swb_128
[i
];
194 ff_psy_init(&s
->psy
, avctx
, 2, sizes
, lengths
);
195 s
->psypp
= ff_psy_preprocess_init(avctx
);
196 s
->coder
= &ff_aac_coders
[0];
198 s
->lambda
= avctx
->global_quality
? avctx
->global_quality
: 120;
199 #if !CONFIG_HARDCODED_TABLES
200 for (i
= 0; i
< 428; i
++)
201 ff_aac_pow2sf_tab
[i
] = pow(2, (i
- 200)/4.);
202 #endif /* CONFIG_HARDCODED_TABLES */
204 if (avctx
->channels
> 5)
205 av_log(avctx
, AV_LOG_ERROR
, "This encoder does not yet enforce the restrictions on LFEs. "
206 "The output will most likely be an illegal bitstream.\n");
211 static void apply_window_and_mdct(AVCodecContext
*avctx
, AACEncContext
*s
,
212 SingleChannelElement
*sce
, short *audio
, int channel
)
215 const float * lwindow
= sce
->ics
.use_kb_window
[0] ? ff_aac_kbd_long_1024
: ff_sine_1024
;
216 const float * swindow
= sce
->ics
.use_kb_window
[0] ? ff_aac_kbd_short_128
: ff_sine_128
;
217 const float * pwindow
= sce
->ics
.use_kb_window
[1] ? ff_aac_kbd_short_128
: ff_sine_128
;
219 if (sce
->ics
.window_sequence
[0] != EIGHT_SHORT_SEQUENCE
) {
220 memcpy(s
->output
, sce
->saved
, sizeof(float)*1024);
221 if (sce
->ics
.window_sequence
[0] == LONG_STOP_SEQUENCE
) {
222 memset(s
->output
, 0, sizeof(s
->output
[0]) * 448);
223 for (i
= 448; i
< 576; i
++)
224 s
->output
[i
] = sce
->saved
[i
] * pwindow
[i
- 448];
225 for (i
= 576; i
< 704; i
++)
226 s
->output
[i
] = sce
->saved
[i
];
228 if (sce
->ics
.window_sequence
[0] != LONG_START_SEQUENCE
) {
230 for (i
= 0; i
< 1024; i
++, j
+= avctx
->channels
) {
231 s
->output
[i
+1024] = audio
[j
] * lwindow
[1024 - i
- 1];
232 sce
->saved
[i
] = audio
[j
] * lwindow
[i
];
236 for (i
= 0; i
< 448; i
++, j
+= avctx
->channels
)
237 s
->output
[i
+1024] = audio
[j
];
238 for (i
= 448; i
< 576; i
++, j
+= avctx
->channels
)
239 s
->output
[i
+1024] = audio
[j
] * swindow
[576 - i
- 1];
240 memset(s
->output
+1024+576, 0, sizeof(s
->output
[0]) * 448);
242 for (i
= 0; i
< 1024; i
++, j
+= avctx
->channels
)
243 sce
->saved
[i
] = audio
[j
];
245 ff_mdct_calc(&s
->mdct1024
, sce
->coeffs
, s
->output
);
248 for (k
= 0; k
< 1024; k
+= 128) {
249 for (i
= 448 + k
; i
< 448 + k
+ 256; i
++)
250 s
->output
[i
- 448 - k
] = (i
< 1024)
252 : audio
[channel
+ (i
-1024)*avctx
->channels
];
253 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 ff_mdct_calc(&s
->mdct128
, sce
->coeffs
+ k
, s
->output
);
258 for (i
= 0; i
< 1024; i
++, j
+= avctx
->channels
)
259 sce
->saved
[i
] = audio
[j
];
264 * Encode ics_info element.
265 * @see Table 4.6 (syntax of ics_info)
267 static void put_ics_info(AACEncContext
*s
, IndividualChannelStream
*info
)
271 put_bits(&s
->pb
, 1, 0); // ics_reserved bit
272 put_bits(&s
->pb
, 2, info
->window_sequence
[0]);
273 put_bits(&s
->pb
, 1, info
->use_kb_window
[0]);
274 if (info
->window_sequence
[0] != EIGHT_SHORT_SEQUENCE
) {
275 put_bits(&s
->pb
, 6, info
->max_sfb
);
276 put_bits(&s
->pb
, 1, 0); // no prediction
278 put_bits(&s
->pb
, 4, info
->max_sfb
);
279 for (w
= 1; w
< 8; w
++)
280 put_bits(&s
->pb
, 1, !info
->group_len
[w
]);
286 * @see 4.6.8.1 "Joint Coding - M/S Stereo"
288 static void encode_ms_info(PutBitContext
*pb
, ChannelElement
*cpe
)
292 put_bits(pb
, 2, cpe
->ms_mode
);
293 if (cpe
->ms_mode
== 1)
294 for (w
= 0; w
< cpe
->ch
[0].ics
.num_windows
; w
+= cpe
->ch
[0].ics
.group_len
[w
])
295 for (i
= 0; i
< cpe
->ch
[0].ics
.max_sfb
; i
++)
296 put_bits(pb
, 1, cpe
->ms_mask
[w
*16 + i
]);
300 * Produce integer coefficients from scalefactors provided by the model.
302 static void adjust_frame_information(AACEncContext
*apc
, ChannelElement
*cpe
, int chans
)
305 int start
, sum
, maxsfb
, cmaxsfb
;
307 for (ch
= 0; ch
< chans
; ch
++) {
308 IndividualChannelStream
*ics
= &cpe
->ch
[ch
].ics
;
311 cpe
->ch
[ch
].pulse
.num_pulse
= 0;
312 for (w
= 0; w
< ics
->num_windows
*16; w
+= 16) {
313 for (g
= 0; g
< ics
->num_swb
; g
++) {
316 if (!ch
&& cpe
->ms_mask
[w
+ g
]) {
317 for (i
= 0; i
< ics
->swb_sizes
[g
]; i
++) {
318 cpe
->ch
[0].coeffs
[start
+i
] = (cpe
->ch
[0].coeffs
[start
+i
] + cpe
->ch
[1].coeffs
[start
+i
]) / 2.0;
319 cpe
->ch
[1].coeffs
[start
+i
] = cpe
->ch
[0].coeffs
[start
+i
] - cpe
->ch
[1].coeffs
[start
+i
];
322 start
+= ics
->swb_sizes
[g
];
324 for (cmaxsfb
= ics
->num_swb
; cmaxsfb
> 0 && cpe
->ch
[ch
].zeroes
[w
+cmaxsfb
-1]; cmaxsfb
--)
326 maxsfb
= FFMAX(maxsfb
, cmaxsfb
);
328 ics
->max_sfb
= maxsfb
;
330 //adjust zero bands for window groups
331 for (w
= 0; w
< ics
->num_windows
; w
+= ics
->group_len
[w
]) {
332 for (g
= 0; g
< ics
->max_sfb
; g
++) {
334 for (w2
= w
; w2
< w
+ ics
->group_len
[w
]; w2
++) {
335 if (!cpe
->ch
[ch
].zeroes
[w2
*16 + g
]) {
340 cpe
->ch
[ch
].zeroes
[w
*16 + g
] = i
;
345 if (chans
> 1 && cpe
->common_window
) {
346 IndividualChannelStream
*ics0
= &cpe
->ch
[0].ics
;
347 IndividualChannelStream
*ics1
= &cpe
->ch
[1].ics
;
349 ics0
->max_sfb
= FFMAX(ics0
->max_sfb
, ics1
->max_sfb
);
350 ics1
->max_sfb
= ics0
->max_sfb
;
351 for (w
= 0; w
< ics0
->num_windows
*16; w
+= 16)
352 for (i
= 0; i
< ics0
->max_sfb
; i
++)
353 if (cpe
->ms_mask
[w
+i
])
355 if (msc
== 0 || ics0
->max_sfb
== 0)
358 cpe
->ms_mode
= msc
< ics0
->max_sfb
? 1 : 2;
363 * Encode scalefactor band coding type.
365 static void encode_band_info(AACEncContext
*s
, SingleChannelElement
*sce
)
369 for (w
= 0; w
< sce
->ics
.num_windows
; w
+= sce
->ics
.group_len
[w
])
370 s
->coder
->encode_window_bands_info(s
, sce
, w
, sce
->ics
.group_len
[w
], s
->lambda
);
374 * Encode scalefactors.
376 static void encode_scale_factors(AVCodecContext
*avctx
, AACEncContext
*s
,
377 SingleChannelElement
*sce
)
379 int off
= sce
->sf_idx
[0], diff
;
382 for (w
= 0; w
< sce
->ics
.num_windows
; w
+= sce
->ics
.group_len
[w
]) {
383 for (i
= 0; i
< sce
->ics
.max_sfb
; i
++) {
384 if (!sce
->zeroes
[w
*16 + i
]) {
385 diff
= sce
->sf_idx
[w
*16 + i
] - off
+ SCALE_DIFF_ZERO
;
386 if (diff
< 0 || diff
> 120)
387 av_log(avctx
, AV_LOG_ERROR
, "Scalefactor difference is too big to be coded\n");
388 off
= sce
->sf_idx
[w
*16 + i
];
389 put_bits(&s
->pb
, ff_aac_scalefactor_bits
[diff
], ff_aac_scalefactor_code
[diff
]);
398 static void encode_pulses(AACEncContext
*s
, Pulse
*pulse
)
402 put_bits(&s
->pb
, 1, !!pulse
->num_pulse
);
403 if (!pulse
->num_pulse
)
406 put_bits(&s
->pb
, 2, pulse
->num_pulse
- 1);
407 put_bits(&s
->pb
, 6, pulse
->start
);
408 for (i
= 0; i
< pulse
->num_pulse
; i
++) {
409 put_bits(&s
->pb
, 5, pulse
->pos
[i
]);
410 put_bits(&s
->pb
, 4, pulse
->amp
[i
]);
415 * Encode spectral coefficients processed by psychoacoustic model.
417 static void encode_spectral_coeffs(AACEncContext
*s
, SingleChannelElement
*sce
)
421 for (w
= 0; w
< sce
->ics
.num_windows
; w
+= sce
->ics
.group_len
[w
]) {
423 for (i
= 0; i
< sce
->ics
.max_sfb
; i
++) {
424 if (sce
->zeroes
[w
*16 + i
]) {
425 start
+= sce
->ics
.swb_sizes
[i
];
428 for (w2
= w
; w2
< w
+ sce
->ics
.group_len
[w
]; w2
++)
429 s
->coder
->quantize_and_encode_band(s
, &s
->pb
, sce
->coeffs
+ start
+ w2
*128,
430 sce
->ics
.swb_sizes
[i
],
431 sce
->sf_idx
[w
*16 + i
],
432 sce
->band_type
[w
*16 + i
],
434 start
+= sce
->ics
.swb_sizes
[i
];
440 * Encode one channel of audio data.
442 static int encode_individual_channel(AVCodecContext
*avctx
, AACEncContext
*s
,
443 SingleChannelElement
*sce
,
446 put_bits(&s
->pb
, 8, sce
->sf_idx
[0]);
448 put_ics_info(s
, &sce
->ics
);
449 encode_band_info(s
, sce
);
450 encode_scale_factors(avctx
, s
, sce
);
451 encode_pulses(s
, &sce
->pulse
);
452 put_bits(&s
->pb
, 1, 0); //tns
453 put_bits(&s
->pb
, 1, 0); //ssr
454 encode_spectral_coeffs(s
, sce
);
459 * Write some auxiliary information about the created AAC file.
461 static void put_bitstream_info(AVCodecContext
*avctx
, AACEncContext
*s
,
464 int i
, namelen
, padbits
;
466 namelen
= strlen(name
) + 2;
467 put_bits(&s
->pb
, 3, TYPE_FIL
);
468 put_bits(&s
->pb
, 4, FFMIN(namelen
, 15));
470 put_bits(&s
->pb
, 8, namelen
- 16);
471 put_bits(&s
->pb
, 4, 0); //extension type - filler
472 padbits
= 8 - (put_bits_count(&s
->pb
) & 7);
473 align_put_bits(&s
->pb
);
474 for (i
= 0; i
< namelen
- 2; i
++)
475 put_bits(&s
->pb
, 8, name
[i
]);
476 put_bits(&s
->pb
, 12 - padbits
, 0);
479 static int aac_encode_frame(AVCodecContext
*avctx
,
480 uint8_t *frame
, int buf_size
, void *data
)
482 AACEncContext
*s
= avctx
->priv_data
;
483 int16_t *samples
= s
->samples
, *samples2
, *la
;
485 int i
, j
, chans
, tag
, start_ch
;
486 const uint8_t *chan_map
= aac_chan_configs
[avctx
->channels
-1];
487 int chan_el_counter
[4];
488 FFPsyWindowInfo windows
[avctx
->channels
];
494 memcpy(s
->samples
+ 1024 * avctx
->channels
, data
,
495 1024 * avctx
->channels
* sizeof(s
->samples
[0]));
498 samples2
= s
->samples
+ 1024 * avctx
->channels
;
499 for (i
= 0; i
< chan_map
[0]; i
++) {
501 chans
= tag
== TYPE_CPE
? 2 : 1;
502 ff_psy_preprocess(s
->psypp
, (uint16_t*)data
+ start_ch
,
503 samples2
+ start_ch
, start_ch
, chans
);
508 if (!avctx
->frame_number
) {
509 memcpy(s
->samples
, s
->samples
+ 1024 * avctx
->channels
,
510 1024 * avctx
->channels
* sizeof(s
->samples
[0]));
515 for (i
= 0; i
< chan_map
[0]; i
++) {
516 FFPsyWindowInfo
* wi
= windows
+ start_ch
;
518 chans
= tag
== TYPE_CPE
? 2 : 1;
520 samples2
= samples
+ start_ch
;
521 la
= samples2
+ 1024 * avctx
->channels
+ start_ch
;
524 for (j
= 0; j
< chans
; j
++) {
525 IndividualChannelStream
*ics
= &cpe
->ch
[j
].ics
;
527 wi
[j
] = ff_psy_suggest_window(&s
->psy
, samples2
, la
, start_ch
+ j
, ics
->window_sequence
[0]);
528 ics
->window_sequence
[1] = ics
->window_sequence
[0];
529 ics
->window_sequence
[0] = wi
[j
].window_type
[0];
530 ics
->use_kb_window
[1] = ics
->use_kb_window
[0];
531 ics
->use_kb_window
[0] = wi
[j
].window_shape
;
532 ics
->num_windows
= wi
[j
].num_windows
;
533 ics
->swb_sizes
= s
->psy
.bands
[ics
->num_windows
== 8];
534 ics
->num_swb
= s
->psy
.num_bands
[ics
->num_windows
== 8];
535 for (k
= 0; k
< ics
->num_windows
; k
++)
536 ics
->group_len
[k
] = wi
[j
].grouping
[k
];
538 s
->cur_channel
= start_ch
+ j
;
539 apply_window_and_mdct(avctx
, s
, &cpe
->ch
[j
], samples2
, j
);
545 init_put_bits(&s
->pb
, frame
, buf_size
*8);
546 if ((avctx
->frame_number
& 0xFF)==1 && !(avctx
->flags
& CODEC_FLAG_BITEXACT
))
547 put_bitstream_info(avctx
, s
, LIBAVCODEC_IDENT
);
549 memset(chan_el_counter
, 0, sizeof(chan_el_counter
));
550 for (i
= 0; i
< chan_map
[0]; i
++) {
551 FFPsyWindowInfo
* wi
= windows
+ start_ch
;
553 chans
= tag
== TYPE_CPE
? 2 : 1;
555 for (j
= 0; j
< chans
; j
++) {
556 s
->coder
->search_for_quantizers(avctx
, s
, &cpe
->ch
[j
], s
->lambda
);
558 cpe
->common_window
= 0;
560 && wi
[0].window_type
[0] == wi
[1].window_type
[0]
561 && wi
[0].window_shape
== wi
[1].window_shape
) {
563 cpe
->common_window
= 1;
564 for (j
= 0; j
< wi
[0].num_windows
; j
++) {
565 if (wi
[0].grouping
[j
] != wi
[1].grouping
[j
]) {
566 cpe
->common_window
= 0;
571 if (cpe
->common_window
&& s
->coder
->search_for_ms
)
572 s
->coder
->search_for_ms(s
, cpe
, s
->lambda
);
573 adjust_frame_information(s
, cpe
, chans
);
574 put_bits(&s
->pb
, 3, tag
);
575 put_bits(&s
->pb
, 4, chan_el_counter
[tag
]++);
577 put_bits(&s
->pb
, 1, cpe
->common_window
);
578 if (cpe
->common_window
) {
579 put_ics_info(s
, &cpe
->ch
[0].ics
);
580 encode_ms_info(&s
->pb
, cpe
);
583 for (j
= 0; j
< chans
; j
++) {
584 s
->cur_channel
= start_ch
+ j
;
585 ff_psy_set_band_info(&s
->psy
, s
->cur_channel
, cpe
->ch
[j
].coeffs
, &wi
[j
]);
586 encode_individual_channel(avctx
, s
, &cpe
->ch
[j
], cpe
->common_window
);
591 frame_bits
= put_bits_count(&s
->pb
);
592 if (frame_bits
<= 6144 * avctx
->channels
- 3)
595 s
->lambda
*= avctx
->bit_rate
* 1024.0f
/ avctx
->sample_rate
/ frame_bits
;
599 put_bits(&s
->pb
, 3, TYPE_END
);
600 flush_put_bits(&s
->pb
);
601 avctx
->frame_bits
= put_bits_count(&s
->pb
);
603 // rate control stuff
604 if (!(avctx
->flags
& CODEC_FLAG_QSCALE
)) {
605 float ratio
= avctx
->bit_rate
* 1024.0f
/ avctx
->sample_rate
/ avctx
->frame_bits
;
607 s
->lambda
= FFMIN(s
->lambda
, 65536.f
);
612 memcpy(s
->samples
, s
->samples
+ 1024 * avctx
->channels
,
613 1024 * avctx
->channels
* sizeof(s
->samples
[0]));
614 return put_bits_count(&s
->pb
)>>3;
617 static av_cold
int aac_encode_end(AVCodecContext
*avctx
)
619 AACEncContext
*s
= avctx
->priv_data
;
621 ff_mdct_end(&s
->mdct1024
);
622 ff_mdct_end(&s
->mdct128
);
624 ff_psy_preprocess_end(s
->psypp
);
625 av_freep(&s
->samples
);
630 AVCodec aac_encoder
= {
634 sizeof(AACEncContext
),
638 .capabilities
= CODEC_CAP_SMALL_LAST_FRAME
| CODEC_CAP_DELAY
,
639 .sample_fmts
= (enum SampleFormat
[]){SAMPLE_FMT_S16
,SAMPLE_FMT_NONE
},
640 .long_name
= NULL_IF_CONFIG_SMALL("Advanced Audio Coding"),