FFmpeg
aacenc.c
Go to the documentation of this file.
1 /*
2  * AAC encoder
3  * Copyright (C) 2008 Konstantin Shishkov
4  *
5  * This file is part of FFmpeg.
6  *
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.
11  *
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.
16  *
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
20  */
21 
22 /**
23  * @file
24  * AAC encoder
25  */
26 
27 /***********************************
28  * TODOs:
29  * add sane pulse detection
30  ***********************************/
31 #include <float.h>
32 
33 #include "libavutil/libm.h"
34 #include "libavutil/thread.h"
35 #include "libavutil/float_dsp.h"
36 #include "libavutil/opt.h"
37 #include "avcodec.h"
38 #include "put_bits.h"
39 #include "internal.h"
40 #include "mpeg4audio.h"
41 #include "kbdwin.h"
42 #include "sinewin.h"
43 #include "profiles.h"
44 
45 #include "aac.h"
46 #include "aactab.h"
47 #include "aacenc.h"
48 #include "aacenctab.h"
49 #include "aacenc_utils.h"
50 
51 #include "psymodel.h"
52 
54 
55 static void put_pce(PutBitContext *pb, AVCodecContext *avctx)
56 {
57  int i, j;
58  AACEncContext *s = avctx->priv_data;
59  AACPCEInfo *pce = &s->pce;
60  const int bitexact = avctx->flags & AV_CODEC_FLAG_BITEXACT;
61  const char *aux_data = bitexact ? "Lavc" : LIBAVCODEC_IDENT;
62 
63  put_bits(pb, 4, 0);
64 
65  put_bits(pb, 2, avctx->profile);
66  put_bits(pb, 4, s->samplerate_index);
67 
68  put_bits(pb, 4, pce->num_ele[0]); /* Front */
69  put_bits(pb, 4, pce->num_ele[1]); /* Side */
70  put_bits(pb, 4, pce->num_ele[2]); /* Back */
71  put_bits(pb, 2, pce->num_ele[3]); /* LFE */
72  put_bits(pb, 3, 0); /* Assoc data */
73  put_bits(pb, 4, 0); /* CCs */
74 
75  put_bits(pb, 1, 0); /* Stereo mixdown */
76  put_bits(pb, 1, 0); /* Mono mixdown */
77  put_bits(pb, 1, 0); /* Something else */
78 
79  for (i = 0; i < 4; i++) {
80  for (j = 0; j < pce->num_ele[i]; j++) {
81  if (i < 3)
82  put_bits(pb, 1, pce->pairing[i][j]);
83  put_bits(pb, 4, pce->index[i][j]);
84  }
85  }
86 
88  put_bits(pb, 8, strlen(aux_data));
89  avpriv_put_string(pb, aux_data, 0);
90 }
91 
92 /**
93  * Make AAC audio config object.
94  * @see 1.6.2.1 "Syntax - AudioSpecificConfig"
95  */
97 {
98  PutBitContext pb;
99  AACEncContext *s = avctx->priv_data;
100  int channels = (!s->needs_pce)*(s->channels - (s->channels == 8 ? 1 : 0));
101  const int max_size = 32;
102 
103  avctx->extradata = av_mallocz(max_size);
104  if (!avctx->extradata)
105  return AVERROR(ENOMEM);
106 
107  init_put_bits(&pb, avctx->extradata, max_size);
108  put_bits(&pb, 5, s->profile+1); //profile
109  put_bits(&pb, 4, s->samplerate_index); //sample rate index
110  put_bits(&pb, 4, channels);
111  //GASpecificConfig
112  put_bits(&pb, 1, 0); //frame length - 1024 samples
113  put_bits(&pb, 1, 0); //does not depend on core coder
114  put_bits(&pb, 1, 0); //is not extension
115  if (s->needs_pce)
116  put_pce(&pb, avctx);
117 
118  //Explicitly Mark SBR absent
119  put_bits(&pb, 11, 0x2b7); //sync extension
120  put_bits(&pb, 5, AOT_SBR);
121  put_bits(&pb, 1, 0);
122  flush_put_bits(&pb);
123  avctx->extradata_size = put_bits_count(&pb) >> 3;
124 
125  return 0;
126 }
127 
129 {
130  ++s->quantize_band_cost_cache_generation;
131  if (s->quantize_band_cost_cache_generation == 0) {
132  memset(s->quantize_band_cost_cache, 0, sizeof(s->quantize_band_cost_cache));
133  s->quantize_band_cost_cache_generation = 1;
134  }
135 }
136 
137 #define WINDOW_FUNC(type) \
138 static void apply_ ##type ##_window(AVFloatDSPContext *fdsp, \
139  SingleChannelElement *sce, \
140  const float *audio)
141 
142 WINDOW_FUNC(only_long)
143 {
144  const float *lwindow = sce->ics.use_kb_window[0] ? ff_aac_kbd_long_1024 : ff_sine_1024;
145  const float *pwindow = sce->ics.use_kb_window[1] ? ff_aac_kbd_long_1024 : ff_sine_1024;
146  float *out = sce->ret_buf;
147 
148  fdsp->vector_fmul (out, audio, lwindow, 1024);
149  fdsp->vector_fmul_reverse(out + 1024, audio + 1024, pwindow, 1024);
150 }
151 
152 WINDOW_FUNC(long_start)
153 {
154  const float *lwindow = sce->ics.use_kb_window[1] ? ff_aac_kbd_long_1024 : ff_sine_1024;
155  const float *swindow = sce->ics.use_kb_window[0] ? ff_aac_kbd_short_128 : ff_sine_128;
156  float *out = sce->ret_buf;
157 
158  fdsp->vector_fmul(out, audio, lwindow, 1024);
159  memcpy(out + 1024, audio + 1024, sizeof(out[0]) * 448);
160  fdsp->vector_fmul_reverse(out + 1024 + 448, audio + 1024 + 448, swindow, 128);
161  memset(out + 1024 + 576, 0, sizeof(out[0]) * 448);
162 }
163 
164 WINDOW_FUNC(long_stop)
165 {
166  const float *lwindow = sce->ics.use_kb_window[0] ? ff_aac_kbd_long_1024 : ff_sine_1024;
167  const float *swindow = sce->ics.use_kb_window[1] ? ff_aac_kbd_short_128 : ff_sine_128;
168  float *out = sce->ret_buf;
169 
170  memset(out, 0, sizeof(out[0]) * 448);
171  fdsp->vector_fmul(out + 448, audio + 448, swindow, 128);
172  memcpy(out + 576, audio + 576, sizeof(out[0]) * 448);
173  fdsp->vector_fmul_reverse(out + 1024, audio + 1024, lwindow, 1024);
174 }
175 
176 WINDOW_FUNC(eight_short)
177 {
178  const float *swindow = sce->ics.use_kb_window[0] ? ff_aac_kbd_short_128 : ff_sine_128;
179  const float *pwindow = sce->ics.use_kb_window[1] ? ff_aac_kbd_short_128 : ff_sine_128;
180  const float *in = audio + 448;
181  float *out = sce->ret_buf;
182  int w;
183 
184  for (w = 0; w < 8; w++) {
185  fdsp->vector_fmul (out, in, w ? pwindow : swindow, 128);
186  out += 128;
187  in += 128;
188  fdsp->vector_fmul_reverse(out, in, swindow, 128);
189  out += 128;
190  }
191 }
192 
193 static void (*const apply_window[4])(AVFloatDSPContext *fdsp,
195  const float *audio) = {
196  [ONLY_LONG_SEQUENCE] = apply_only_long_window,
197  [LONG_START_SEQUENCE] = apply_long_start_window,
198  [EIGHT_SHORT_SEQUENCE] = apply_eight_short_window,
199  [LONG_STOP_SEQUENCE] = apply_long_stop_window
200 };
201 
203  float *audio)
204 {
205  int i;
206  const float *output = sce->ret_buf;
207 
208  apply_window[sce->ics.window_sequence[0]](s->fdsp, sce, audio);
209 
211  s->mdct1024.mdct_calc(&s->mdct1024, sce->coeffs, output);
212  else
213  for (i = 0; i < 1024; i += 128)
214  s->mdct128.mdct_calc(&s->mdct128, &sce->coeffs[i], output + i*2);
215  memcpy(audio, audio + 1024, sizeof(audio[0]) * 1024);
216  memcpy(sce->pcoeffs, sce->coeffs, sizeof(sce->pcoeffs));
217 }
218 
219 /**
220  * Encode ics_info element.
221  * @see Table 4.6 (syntax of ics_info)
222  */
224 {
225  int w;
226 
227  put_bits(&s->pb, 1, 0); // ics_reserved bit
228  put_bits(&s->pb, 2, info->window_sequence[0]);
229  put_bits(&s->pb, 1, info->use_kb_window[0]);
230  if (info->window_sequence[0] != EIGHT_SHORT_SEQUENCE) {
231  put_bits(&s->pb, 6, info->max_sfb);
232  put_bits(&s->pb, 1, !!info->predictor_present);
233  } else {
234  put_bits(&s->pb, 4, info->max_sfb);
235  for (w = 1; w < 8; w++)
236  put_bits(&s->pb, 1, !info->group_len[w]);
237  }
238 }
239 
240 /**
241  * Encode MS data.
242  * @see 4.6.8.1 "Joint Coding - M/S Stereo"
243  */
245 {
246  int i, w;
247 
248  put_bits(pb, 2, cpe->ms_mode);
249  if (cpe->ms_mode == 1)
250  for (w = 0; w < cpe->ch[0].ics.num_windows; w += cpe->ch[0].ics.group_len[w])
251  for (i = 0; i < cpe->ch[0].ics.max_sfb; i++)
252  put_bits(pb, 1, cpe->ms_mask[w*16 + i]);
253 }
254 
255 /**
256  * Produce integer coefficients from scalefactors provided by the model.
257  */
258 static void adjust_frame_information(ChannelElement *cpe, int chans)
259 {
260  int i, w, w2, g, ch;
261  int maxsfb, cmaxsfb;
262 
263  for (ch = 0; ch < chans; ch++) {
264  IndividualChannelStream *ics = &cpe->ch[ch].ics;
265  maxsfb = 0;
266  cpe->ch[ch].pulse.num_pulse = 0;
267  for (w = 0; w < ics->num_windows; w += ics->group_len[w]) {
268  for (w2 = 0; w2 < ics->group_len[w]; w2++) {
269  for (cmaxsfb = ics->num_swb; cmaxsfb > 0 && cpe->ch[ch].zeroes[w*16+cmaxsfb-1]; cmaxsfb--)
270  ;
271  maxsfb = FFMAX(maxsfb, cmaxsfb);
272  }
273  }
274  ics->max_sfb = maxsfb;
275 
276  //adjust zero bands for window groups
277  for (w = 0; w < ics->num_windows; w += ics->group_len[w]) {
278  for (g = 0; g < ics->max_sfb; g++) {
279  i = 1;
280  for (w2 = w; w2 < w + ics->group_len[w]; w2++) {
281  if (!cpe->ch[ch].zeroes[w2*16 + g]) {
282  i = 0;
283  break;
284  }
285  }
286  cpe->ch[ch].zeroes[w*16 + g] = i;
287  }
288  }
289  }
290 
291  if (chans > 1 && cpe->common_window) {
292  IndividualChannelStream *ics0 = &cpe->ch[0].ics;
293  IndividualChannelStream *ics1 = &cpe->ch[1].ics;
294  int msc = 0;
295  ics0->max_sfb = FFMAX(ics0->max_sfb, ics1->max_sfb);
296  ics1->max_sfb = ics0->max_sfb;
297  for (w = 0; w < ics0->num_windows*16; w += 16)
298  for (i = 0; i < ics0->max_sfb; i++)
299  if (cpe->ms_mask[w+i])
300  msc++;
301  if (msc == 0 || ics0->max_sfb == 0)
302  cpe->ms_mode = 0;
303  else
304  cpe->ms_mode = msc < ics0->max_sfb * ics0->num_windows ? 1 : 2;
305  }
306 }
307 
309 {
310  int w, w2, g, i;
311  IndividualChannelStream *ics = &cpe->ch[0].ics;
312  if (!cpe->common_window)
313  return;
314  for (w = 0; w < ics->num_windows; w += ics->group_len[w]) {
315  for (w2 = 0; w2 < ics->group_len[w]; w2++) {
316  int start = (w+w2) * 128;
317  for (g = 0; g < ics->num_swb; g++) {
318  int p = -1 + 2 * (cpe->ch[1].band_type[w*16+g] - 14);
319  float scale = cpe->ch[0].is_ener[w*16+g];
320  if (!cpe->is_mask[w*16 + g]) {
321  start += ics->swb_sizes[g];
322  continue;
323  }
324  if (cpe->ms_mask[w*16 + g])
325  p *= -1;
326  for (i = 0; i < ics->swb_sizes[g]; i++) {
327  float sum = (cpe->ch[0].coeffs[start+i] + p*cpe->ch[1].coeffs[start+i])*scale;
328  cpe->ch[0].coeffs[start+i] = sum;
329  cpe->ch[1].coeffs[start+i] = 0.0f;
330  }
331  start += ics->swb_sizes[g];
332  }
333  }
334  }
335 }
336 
338 {
339  int w, w2, g, i;
340  IndividualChannelStream *ics = &cpe->ch[0].ics;
341  if (!cpe->common_window)
342  return;
343  for (w = 0; w < ics->num_windows; w += ics->group_len[w]) {
344  for (w2 = 0; w2 < ics->group_len[w]; w2++) {
345  int start = (w+w2) * 128;
346  for (g = 0; g < ics->num_swb; g++) {
347  /* ms_mask can be used for other purposes in PNS and I/S,
348  * so must not apply M/S if any band uses either, even if
349  * ms_mask is set.
350  */
351  if (!cpe->ms_mask[w*16 + g] || cpe->is_mask[w*16 + g]
352  || cpe->ch[0].band_type[w*16 + g] >= NOISE_BT
353  || cpe->ch[1].band_type[w*16 + g] >= NOISE_BT) {
354  start += ics->swb_sizes[g];
355  continue;
356  }
357  for (i = 0; i < ics->swb_sizes[g]; i++) {
358  float L = (cpe->ch[0].coeffs[start+i] + cpe->ch[1].coeffs[start+i]) * 0.5f;
359  float R = L - cpe->ch[1].coeffs[start+i];
360  cpe->ch[0].coeffs[start+i] = L;
361  cpe->ch[1].coeffs[start+i] = R;
362  }
363  start += ics->swb_sizes[g];
364  }
365  }
366  }
367 }
368 
369 /**
370  * Encode scalefactor band coding type.
371  */
373 {
374  int w;
375 
376  if (s->coder->set_special_band_scalefactors)
377  s->coder->set_special_band_scalefactors(s, sce);
378 
379  for (w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w])
380  s->coder->encode_window_bands_info(s, sce, w, sce->ics.group_len[w], s->lambda);
381 }
382 
383 /**
384  * Encode scalefactors.
385  */
388 {
389  int diff, off_sf = sce->sf_idx[0], off_pns = sce->sf_idx[0] - NOISE_OFFSET;
390  int off_is = 0, noise_flag = 1;
391  int i, w;
392 
393  for (w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]) {
394  for (i = 0; i < sce->ics.max_sfb; i++) {
395  if (!sce->zeroes[w*16 + i]) {
396  if (sce->band_type[w*16 + i] == NOISE_BT) {
397  diff = sce->sf_idx[w*16 + i] - off_pns;
398  off_pns = sce->sf_idx[w*16 + i];
399  if (noise_flag-- > 0) {
401  continue;
402  }
403  } else if (sce->band_type[w*16 + i] == INTENSITY_BT ||
404  sce->band_type[w*16 + i] == INTENSITY_BT2) {
405  diff = sce->sf_idx[w*16 + i] - off_is;
406  off_is = sce->sf_idx[w*16 + i];
407  } else {
408  diff = sce->sf_idx[w*16 + i] - off_sf;
409  off_sf = sce->sf_idx[w*16 + i];
410  }
412  av_assert0(diff >= 0 && diff <= 120);
414  }
415  }
416  }
417 }
418 
419 /**
420  * Encode pulse data.
421  */
422 static void encode_pulses(AACEncContext *s, Pulse *pulse)
423 {
424  int i;
425 
426  put_bits(&s->pb, 1, !!pulse->num_pulse);
427  if (!pulse->num_pulse)
428  return;
429 
430  put_bits(&s->pb, 2, pulse->num_pulse - 1);
431  put_bits(&s->pb, 6, pulse->start);
432  for (i = 0; i < pulse->num_pulse; i++) {
433  put_bits(&s->pb, 5, pulse->pos[i]);
434  put_bits(&s->pb, 4, pulse->amp[i]);
435  }
436 }
437 
438 /**
439  * Encode spectral coefficients processed by psychoacoustic model.
440  */
442 {
443  int start, i, w, w2;
444 
445  for (w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]) {
446  start = 0;
447  for (i = 0; i < sce->ics.max_sfb; i++) {
448  if (sce->zeroes[w*16 + i]) {
449  start += sce->ics.swb_sizes[i];
450  continue;
451  }
452  for (w2 = w; w2 < w + sce->ics.group_len[w]; w2++) {
453  s->coder->quantize_and_encode_band(s, &s->pb,
454  &sce->coeffs[start + w2*128],
455  NULL, sce->ics.swb_sizes[i],
456  sce->sf_idx[w*16 + i],
457  sce->band_type[w*16 + i],
458  s->lambda,
459  sce->ics.window_clipping[w]);
460  }
461  start += sce->ics.swb_sizes[i];
462  }
463  }
464 }
465 
466 /**
467  * Downscale spectral coefficients for near-clipping windows to avoid artifacts
468  */
470 {
471  int start, i, j, w;
472 
473  if (sce->ics.clip_avoidance_factor < 1.0f) {
474  for (w = 0; w < sce->ics.num_windows; w++) {
475  start = 0;
476  for (i = 0; i < sce->ics.max_sfb; i++) {
477  float *swb_coeffs = &sce->coeffs[start + w*128];
478  for (j = 0; j < sce->ics.swb_sizes[i]; j++)
479  swb_coeffs[j] *= sce->ics.clip_avoidance_factor;
480  start += sce->ics.swb_sizes[i];
481  }
482  }
483  }
484 }
485 
486 /**
487  * Encode one channel of audio data.
488  */
491  int common_window)
492 {
493  put_bits(&s->pb, 8, sce->sf_idx[0]);
494  if (!common_window) {
495  put_ics_info(s, &sce->ics);
496  if (s->coder->encode_main_pred)
497  s->coder->encode_main_pred(s, sce);
498  if (s->coder->encode_ltp_info)
499  s->coder->encode_ltp_info(s, sce, 0);
500  }
501  encode_band_info(s, sce);
502  encode_scale_factors(avctx, s, sce);
503  encode_pulses(s, &sce->pulse);
504  put_bits(&s->pb, 1, !!sce->tns.present);
505  if (s->coder->encode_tns_info)
506  s->coder->encode_tns_info(s, sce);
507  put_bits(&s->pb, 1, 0); //ssr
509  return 0;
510 }
511 
512 /**
513  * Write some auxiliary information about the created AAC file.
514  */
515 static void put_bitstream_info(AACEncContext *s, const char *name)
516 {
517  int i, namelen, padbits;
518 
519  namelen = strlen(name) + 2;
520  put_bits(&s->pb, 3, TYPE_FIL);
521  put_bits(&s->pb, 4, FFMIN(namelen, 15));
522  if (namelen >= 15)
523  put_bits(&s->pb, 8, namelen - 14);
524  put_bits(&s->pb, 4, 0); //extension type - filler
525  padbits = -put_bits_count(&s->pb) & 7;
526  avpriv_align_put_bits(&s->pb);
527  for (i = 0; i < namelen - 2; i++)
528  put_bits(&s->pb, 8, name[i]);
529  put_bits(&s->pb, 12 - padbits, 0);
530 }
531 
532 /*
533  * Copy input samples.
534  * Channels are reordered from libavcodec's default order to AAC order.
535  */
537 {
538  int ch;
539  int end = 2048 + (frame ? frame->nb_samples : 0);
540  const uint8_t *channel_map = s->reorder_map;
541 
542  /* copy and remap input samples */
543  for (ch = 0; ch < s->channels; ch++) {
544  /* copy last 1024 samples of previous frame to the start of the current frame */
545  memcpy(&s->planar_samples[ch][1024], &s->planar_samples[ch][2048], 1024 * sizeof(s->planar_samples[0][0]));
546 
547  /* copy new samples and zero any remaining samples */
548  if (frame) {
549  memcpy(&s->planar_samples[ch][2048],
550  frame->extended_data[channel_map[ch]],
551  frame->nb_samples * sizeof(s->planar_samples[0][0]));
552  }
553  memset(&s->planar_samples[ch][end], 0,
554  (3072 - end) * sizeof(s->planar_samples[0][0]));
555  }
556 }
557 
558 static int aac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
559  const AVFrame *frame, int *got_packet_ptr)
560 {
561  AACEncContext *s = avctx->priv_data;
562  float **samples = s->planar_samples, *samples2, *la, *overlap;
563  ChannelElement *cpe;
566  int i, its, ch, w, chans, tag, start_ch, ret, frame_bits;
567  int target_bits, rate_bits, too_many_bits, too_few_bits;
568  int ms_mode = 0, is_mode = 0, tns_mode = 0, pred_mode = 0;
569  int chan_el_counter[4];
571 
572  /* add current frame to queue */
573  if (frame) {
574  if ((ret = ff_af_queue_add(&s->afq, frame)) < 0)
575  return ret;
576  } else {
577  if (!s->afq.remaining_samples || (!s->afq.frame_alloc && !s->afq.frame_count))
578  return 0;
579  }
580 
582  if (s->psypp)
583  ff_psy_preprocess(s->psypp, s->planar_samples, s->channels);
584 
585  if (!avctx->frame_number)
586  return 0;
587 
588  start_ch = 0;
589  for (i = 0; i < s->chan_map[0]; i++) {
590  FFPsyWindowInfo* wi = windows + start_ch;
591  tag = s->chan_map[i+1];
592  chans = tag == TYPE_CPE ? 2 : 1;
593  cpe = &s->cpe[i];
594  for (ch = 0; ch < chans; ch++) {
595  int k;
596  float clip_avoidance_factor;
597  sce = &cpe->ch[ch];
598  ics = &sce->ics;
599  s->cur_channel = start_ch + ch;
600  overlap = &samples[s->cur_channel][0];
601  samples2 = overlap + 1024;
602  la = samples2 + (448+64);
603  if (!frame)
604  la = NULL;
605  if (tag == TYPE_LFE) {
606  wi[ch].window_type[0] = wi[ch].window_type[1] = ONLY_LONG_SEQUENCE;
607  wi[ch].window_shape = 0;
608  wi[ch].num_windows = 1;
609  wi[ch].grouping[0] = 1;
610  wi[ch].clipping[0] = 0;
611 
612  /* Only the lowest 12 coefficients are used in a LFE channel.
613  * The expression below results in only the bottom 8 coefficients
614  * being used for 11.025kHz to 16kHz sample rates.
615  */
616  ics->num_swb = s->samplerate_index >= 8 ? 1 : 3;
617  } else {
618  wi[ch] = s->psy.model->window(&s->psy, samples2, la, s->cur_channel,
619  ics->window_sequence[0]);
620  }
621  ics->window_sequence[1] = ics->window_sequence[0];
622  ics->window_sequence[0] = wi[ch].window_type[0];
623  ics->use_kb_window[1] = ics->use_kb_window[0];
624  ics->use_kb_window[0] = wi[ch].window_shape;
625  ics->num_windows = wi[ch].num_windows;
626  ics->swb_sizes = s->psy.bands [ics->num_windows == 8];
627  ics->num_swb = tag == TYPE_LFE ? ics->num_swb : s->psy.num_bands[ics->num_windows == 8];
628  ics->max_sfb = FFMIN(ics->max_sfb, ics->num_swb);
629  ics->swb_offset = wi[ch].window_type[0] == EIGHT_SHORT_SEQUENCE ?
630  ff_swb_offset_128 [s->samplerate_index]:
631  ff_swb_offset_1024[s->samplerate_index];
632  ics->tns_max_bands = wi[ch].window_type[0] == EIGHT_SHORT_SEQUENCE ?
633  ff_tns_max_bands_128 [s->samplerate_index]:
634  ff_tns_max_bands_1024[s->samplerate_index];
635 
636  for (w = 0; w < ics->num_windows; w++)
637  ics->group_len[w] = wi[ch].grouping[w];
638 
639  /* Calculate input sample maximums and evaluate clipping risk */
640  clip_avoidance_factor = 0.0f;
641  for (w = 0; w < ics->num_windows; w++) {
642  const float *wbuf = overlap + w * 128;
643  const int wlen = 2048 / ics->num_windows;
644  float max = 0;
645  int j;
646  /* mdct input is 2 * output */
647  for (j = 0; j < wlen; j++)
648  max = FFMAX(max, fabsf(wbuf[j]));
649  wi[ch].clipping[w] = max;
650  }
651  for (w = 0; w < ics->num_windows; w++) {
652  if (wi[ch].clipping[w] > CLIP_AVOIDANCE_FACTOR) {
653  ics->window_clipping[w] = 1;
654  clip_avoidance_factor = FFMAX(clip_avoidance_factor, wi[ch].clipping[w]);
655  } else {
656  ics->window_clipping[w] = 0;
657  }
658  }
659  if (clip_avoidance_factor > CLIP_AVOIDANCE_FACTOR) {
660  ics->clip_avoidance_factor = CLIP_AVOIDANCE_FACTOR / clip_avoidance_factor;
661  } else {
662  ics->clip_avoidance_factor = 1.0f;
663  }
664 
665  apply_window_and_mdct(s, sce, overlap);
666 
667  if (s->options.ltp && s->coder->update_ltp) {
668  s->coder->update_ltp(s, sce);
669  apply_window[sce->ics.window_sequence[0]](s->fdsp, sce, &sce->ltp_state[0]);
670  s->mdct1024.mdct_calc(&s->mdct1024, sce->lcoeffs, sce->ret_buf);
671  }
672 
673  for (k = 0; k < 1024; k++) {
674  if (!(fabs(cpe->ch[ch].coeffs[k]) < 1E16)) { // Ensure headroom for energy calculation
675  av_log(avctx, AV_LOG_ERROR, "Input contains (near) NaN/+-Inf\n");
676  return AVERROR(EINVAL);
677  }
678  }
679  avoid_clipping(s, sce);
680  }
681  start_ch += chans;
682  }
683  if ((ret = ff_alloc_packet2(avctx, avpkt, 8192 * s->channels, 0)) < 0)
684  return ret;
685  frame_bits = its = 0;
686  do {
687  init_put_bits(&s->pb, avpkt->data, avpkt->size);
688 
689  if ((avctx->frame_number & 0xFF)==1 && !(avctx->flags & AV_CODEC_FLAG_BITEXACT))
691  start_ch = 0;
692  target_bits = 0;
693  memset(chan_el_counter, 0, sizeof(chan_el_counter));
694  for (i = 0; i < s->chan_map[0]; i++) {
695  FFPsyWindowInfo* wi = windows + start_ch;
696  const float *coeffs[2];
697  tag = s->chan_map[i+1];
698  chans = tag == TYPE_CPE ? 2 : 1;
699  cpe = &s->cpe[i];
700  cpe->common_window = 0;
701  memset(cpe->is_mask, 0, sizeof(cpe->is_mask));
702  memset(cpe->ms_mask, 0, sizeof(cpe->ms_mask));
703  put_bits(&s->pb, 3, tag);
704  put_bits(&s->pb, 4, chan_el_counter[tag]++);
705  for (ch = 0; ch < chans; ch++) {
706  sce = &cpe->ch[ch];
707  coeffs[ch] = sce->coeffs;
708  sce->ics.predictor_present = 0;
709  sce->ics.ltp.present = 0;
710  memset(sce->ics.ltp.used, 0, sizeof(sce->ics.ltp.used));
711  memset(sce->ics.prediction_used, 0, sizeof(sce->ics.prediction_used));
712  memset(&sce->tns, 0, sizeof(TemporalNoiseShaping));
713  for (w = 0; w < 128; w++)
714  if (sce->band_type[w] > RESERVED_BT)
715  sce->band_type[w] = 0;
716  }
717  s->psy.bitres.alloc = -1;
718  s->psy.bitres.bits = s->last_frame_pb_count / s->channels;
719  s->psy.model->analyze(&s->psy, start_ch, coeffs, wi);
720  if (s->psy.bitres.alloc > 0) {
721  /* Lambda unused here on purpose, we need to take psy's unscaled allocation */
722  target_bits += s->psy.bitres.alloc
723  * (s->lambda / (avctx->global_quality ? avctx->global_quality : 120));
724  s->psy.bitres.alloc /= chans;
725  }
726  s->cur_type = tag;
727  for (ch = 0; ch < chans; ch++) {
728  s->cur_channel = start_ch + ch;
729  if (s->options.pns && s->coder->mark_pns)
730  s->coder->mark_pns(s, avctx, &cpe->ch[ch]);
731  s->coder->search_for_quantizers(avctx, s, &cpe->ch[ch], s->lambda);
732  }
733  if (chans > 1
734  && wi[0].window_type[0] == wi[1].window_type[0]
735  && wi[0].window_shape == wi[1].window_shape) {
736 
737  cpe->common_window = 1;
738  for (w = 0; w < wi[0].num_windows; w++) {
739  if (wi[0].grouping[w] != wi[1].grouping[w]) {
740  cpe->common_window = 0;
741  break;
742  }
743  }
744  }
745  for (ch = 0; ch < chans; ch++) { /* TNS and PNS */
746  sce = &cpe->ch[ch];
747  s->cur_channel = start_ch + ch;
748  if (s->options.tns && s->coder->search_for_tns)
749  s->coder->search_for_tns(s, sce);
750  if (s->options.tns && s->coder->apply_tns_filt)
751  s->coder->apply_tns_filt(s, sce);
752  if (sce->tns.present)
753  tns_mode = 1;
754  if (s->options.pns && s->coder->search_for_pns)
755  s->coder->search_for_pns(s, avctx, sce);
756  }
757  s->cur_channel = start_ch;
758  if (s->options.intensity_stereo) { /* Intensity Stereo */
759  if (s->coder->search_for_is)
760  s->coder->search_for_is(s, avctx, cpe);
761  if (cpe->is_mode) is_mode = 1;
763  }
764  if (s->options.pred) { /* Prediction */
765  for (ch = 0; ch < chans; ch++) {
766  sce = &cpe->ch[ch];
767  s->cur_channel = start_ch + ch;
768  if (s->options.pred && s->coder->search_for_pred)
769  s->coder->search_for_pred(s, sce);
770  if (cpe->ch[ch].ics.predictor_present) pred_mode = 1;
771  }
772  if (s->coder->adjust_common_pred)
773  s->coder->adjust_common_pred(s, cpe);
774  for (ch = 0; ch < chans; ch++) {
775  sce = &cpe->ch[ch];
776  s->cur_channel = start_ch + ch;
777  if (s->options.pred && s->coder->apply_main_pred)
778  s->coder->apply_main_pred(s, sce);
779  }
780  s->cur_channel = start_ch;
781  }
782  if (s->options.mid_side) { /* Mid/Side stereo */
783  if (s->options.mid_side == -1 && s->coder->search_for_ms)
784  s->coder->search_for_ms(s, cpe);
785  else if (cpe->common_window)
786  memset(cpe->ms_mask, 1, sizeof(cpe->ms_mask));
788  }
789  adjust_frame_information(cpe, chans);
790  if (s->options.ltp) { /* LTP */
791  for (ch = 0; ch < chans; ch++) {
792  sce = &cpe->ch[ch];
793  s->cur_channel = start_ch + ch;
794  if (s->coder->search_for_ltp)
795  s->coder->search_for_ltp(s, sce, cpe->common_window);
796  if (sce->ics.ltp.present) pred_mode = 1;
797  }
798  s->cur_channel = start_ch;
799  if (s->coder->adjust_common_ltp)
800  s->coder->adjust_common_ltp(s, cpe);
801  }
802  if (chans == 2) {
803  put_bits(&s->pb, 1, cpe->common_window);
804  if (cpe->common_window) {
805  put_ics_info(s, &cpe->ch[0].ics);
806  if (s->coder->encode_main_pred)
807  s->coder->encode_main_pred(s, &cpe->ch[0]);
808  if (s->coder->encode_ltp_info)
809  s->coder->encode_ltp_info(s, &cpe->ch[0], 1);
810  encode_ms_info(&s->pb, cpe);
811  if (cpe->ms_mode) ms_mode = 1;
812  }
813  }
814  for (ch = 0; ch < chans; ch++) {
815  s->cur_channel = start_ch + ch;
816  encode_individual_channel(avctx, s, &cpe->ch[ch], cpe->common_window);
817  }
818  start_ch += chans;
819  }
820 
821  if (avctx->flags & AV_CODEC_FLAG_QSCALE) {
822  /* When using a constant Q-scale, don't mess with lambda */
823  break;
824  }
825 
826  /* rate control stuff
827  * allow between the nominal bitrate, and what psy's bit reservoir says to target
828  * but drift towards the nominal bitrate always
829  */
830  frame_bits = put_bits_count(&s->pb);
831  rate_bits = avctx->bit_rate * 1024 / avctx->sample_rate;
832  rate_bits = FFMIN(rate_bits, 6144 * s->channels - 3);
833  too_many_bits = FFMAX(target_bits, rate_bits);
834  too_many_bits = FFMIN(too_many_bits, 6144 * s->channels - 3);
835  too_few_bits = FFMIN(FFMAX(rate_bits - rate_bits/4, target_bits), too_many_bits);
836 
837  /* When using ABR, be strict (but only for increasing) */
838  too_few_bits = too_few_bits - too_few_bits/8;
839  too_many_bits = too_many_bits + too_many_bits/2;
840 
841  if ( its == 0 /* for steady-state Q-scale tracking */
842  || (its < 5 && (frame_bits < too_few_bits || frame_bits > too_many_bits))
843  || frame_bits >= 6144 * s->channels - 3 )
844  {
845  float ratio = ((float)rate_bits) / frame_bits;
846 
847  if (frame_bits >= too_few_bits && frame_bits <= too_many_bits) {
848  /*
849  * This path is for steady-state Q-scale tracking
850  * When frame bits fall within the stable range, we still need to adjust
851  * lambda to maintain it like so in a stable fashion (large jumps in lambda
852  * create artifacts and should be avoided), but slowly
853  */
854  ratio = sqrtf(sqrtf(ratio));
855  ratio = av_clipf(ratio, 0.9f, 1.1f);
856  } else {
857  /* Not so fast though */
858  ratio = sqrtf(ratio);
859  }
860  s->lambda = av_clipf(s->lambda * ratio, FLT_EPSILON, 65536.f);
861 
862  /* Keep iterating if we must reduce and lambda is in the sky */
863  if (ratio > 0.9f && ratio < 1.1f) {
864  break;
865  } else {
866  if (is_mode || ms_mode || tns_mode || pred_mode) {
867  for (i = 0; i < s->chan_map[0]; i++) {
868  // Must restore coeffs
869  chans = tag == TYPE_CPE ? 2 : 1;
870  cpe = &s->cpe[i];
871  for (ch = 0; ch < chans; ch++)
872  memcpy(cpe->ch[ch].coeffs, cpe->ch[ch].pcoeffs, sizeof(cpe->ch[ch].coeffs));
873  }
874  }
875  its++;
876  }
877  } else {
878  break;
879  }
880  } while (1);
881 
882  if (s->options.ltp && s->coder->ltp_insert_new_frame)
883  s->coder->ltp_insert_new_frame(s);
884 
885  put_bits(&s->pb, 3, TYPE_END);
886  flush_put_bits(&s->pb);
887 
888  s->last_frame_pb_count = put_bits_count(&s->pb);
889 
890  s->lambda_sum += s->lambda;
891  s->lambda_count++;
892 
893  ff_af_queue_remove(&s->afq, avctx->frame_size, &avpkt->pts,
894  &avpkt->duration);
895 
896  avpkt->size = put_bits_count(&s->pb) >> 3;
897  *got_packet_ptr = 1;
898  return 0;
899 }
900 
902 {
903  AACEncContext *s = avctx->priv_data;
904 
905  av_log(avctx, AV_LOG_INFO, "Qavg: %.3f\n", s->lambda_count ? s->lambda_sum / s->lambda_count : NAN);
906 
907  ff_mdct_end(&s->mdct1024);
908  ff_mdct_end(&s->mdct128);
909  ff_psy_end(&s->psy);
910  ff_lpc_end(&s->lpc);
911  if (s->psypp)
912  ff_psy_preprocess_end(s->psypp);
913  av_freep(&s->buffer.samples);
914  av_freep(&s->cpe);
915  av_freep(&s->fdsp);
916  ff_af_queue_close(&s->afq);
917  return 0;
918 }
919 
921 {
922  int ret = 0;
923 
925  if (!s->fdsp)
926  return AVERROR(ENOMEM);
927 
928  // window init
933 
934  if ((ret = ff_mdct_init(&s->mdct1024, 11, 0, 32768.0)) < 0)
935  return ret;
936  if ((ret = ff_mdct_init(&s->mdct128, 8, 0, 32768.0)) < 0)
937  return ret;
938 
939  return 0;
940 }
941 
943 {
944  int ch;
945  FF_ALLOCZ_ARRAY_OR_GOTO(avctx, s->buffer.samples, s->channels, 3 * 1024 * sizeof(s->buffer.samples[0]), alloc_fail);
946  FF_ALLOCZ_ARRAY_OR_GOTO(avctx, s->cpe, s->chan_map[0], sizeof(ChannelElement), alloc_fail);
947 
948  for(ch = 0; ch < s->channels; ch++)
949  s->planar_samples[ch] = s->buffer.samples + 3 * 1024 * ch;
950 
951  return 0;
952 alloc_fail:
953  return AVERROR(ENOMEM);
954 }
955 
957 {
959 }
960 
962 {
963  AACEncContext *s = avctx->priv_data;
964  int i, ret = 0;
965  const uint8_t *sizes[2];
966  uint8_t grouping[AAC_MAX_CHANNELS];
967  int lengths[2];
968 
969  /* Constants */
970  s->last_frame_pb_count = 0;
971  avctx->frame_size = 1024;
972  avctx->initial_padding = 1024;
973  s->lambda = avctx->global_quality > 0 ? avctx->global_quality : 120;
974 
975  /* Channel map and unspecified bitrate guessing */
976  s->channels = avctx->channels;
977 
978  s->needs_pce = 1;
979  for (i = 0; i < FF_ARRAY_ELEMS(aac_normal_chan_layouts); i++) {
980  if (avctx->channel_layout == aac_normal_chan_layouts[i]) {
981  s->needs_pce = s->options.pce;
982  break;
983  }
984  }
985 
986  if (s->needs_pce) {
987  char buf[64];
988  for (i = 0; i < FF_ARRAY_ELEMS(aac_pce_configs); i++)
989  if (avctx->channel_layout == aac_pce_configs[i].layout)
990  break;
991  av_get_channel_layout_string(buf, sizeof(buf), -1, avctx->channel_layout);
992  ERROR_IF(i == FF_ARRAY_ELEMS(aac_pce_configs), "Unsupported channel layout \"%s\"\n", buf);
993  av_log(avctx, AV_LOG_INFO, "Using a PCE to encode channel layout \"%s\"\n", buf);
994  s->pce = aac_pce_configs[i];
995  s->reorder_map = s->pce.reorder_map;
996  s->chan_map = s->pce.config_map;
997  } else {
998  s->reorder_map = aac_chan_maps[s->channels - 1];
999  s->chan_map = aac_chan_configs[s->channels - 1];
1000  }
1001 
1002  if (!avctx->bit_rate) {
1003  for (i = 1; i <= s->chan_map[0]; i++) {
1004  avctx->bit_rate += s->chan_map[i] == TYPE_CPE ? 128000 : /* Pair */
1005  s->chan_map[i] == TYPE_LFE ? 16000 : /* LFE */
1006  69000 ; /* SCE */
1007  }
1008  }
1009 
1010  /* Samplerate */
1011  for (i = 0; i < 16; i++)
1013  break;
1014  s->samplerate_index = i;
1015  ERROR_IF(s->samplerate_index == 16 ||
1016  s->samplerate_index >= ff_aac_swb_size_1024_len ||
1017  s->samplerate_index >= ff_aac_swb_size_128_len,
1018  "Unsupported sample rate %d\n", avctx->sample_rate);
1019 
1020  /* Bitrate limiting */
1021  WARN_IF(1024.0 * avctx->bit_rate / avctx->sample_rate > 6144 * s->channels,
1022  "Too many bits %f > %d per frame requested, clamping to max\n",
1023  1024.0 * avctx->bit_rate / avctx->sample_rate,
1024  6144 * s->channels);
1025  avctx->bit_rate = (int64_t)FFMIN(6144 * s->channels / 1024.0 * avctx->sample_rate,
1026  avctx->bit_rate);
1027 
1028  /* Profile and option setting */
1029  avctx->profile = avctx->profile == FF_PROFILE_UNKNOWN ? FF_PROFILE_AAC_LOW :
1030  avctx->profile;
1031  for (i = 0; i < FF_ARRAY_ELEMS(aacenc_profiles); i++)
1032  if (avctx->profile == aacenc_profiles[i])
1033  break;
1034  if (avctx->profile == FF_PROFILE_MPEG2_AAC_LOW) {
1035  avctx->profile = FF_PROFILE_AAC_LOW;
1036  ERROR_IF(s->options.pred,
1037  "Main prediction unavailable in the \"mpeg2_aac_low\" profile\n");
1038  ERROR_IF(s->options.ltp,
1039  "LTP prediction unavailable in the \"mpeg2_aac_low\" profile\n");
1040  WARN_IF(s->options.pns,
1041  "PNS unavailable in the \"mpeg2_aac_low\" profile, turning off\n");
1042  s->options.pns = 0;
1043  } else if (avctx->profile == FF_PROFILE_AAC_LTP) {
1044  s->options.ltp = 1;
1045  ERROR_IF(s->options.pred,
1046  "Main prediction unavailable in the \"aac_ltp\" profile\n");
1047  } else if (avctx->profile == FF_PROFILE_AAC_MAIN) {
1048  s->options.pred = 1;
1049  ERROR_IF(s->options.ltp,
1050  "LTP prediction unavailable in the \"aac_main\" profile\n");
1051  } else if (s->options.ltp) {
1052  avctx->profile = FF_PROFILE_AAC_LTP;
1053  WARN_IF(1,
1054  "Chainging profile to \"aac_ltp\"\n");
1055  ERROR_IF(s->options.pred,
1056  "Main prediction unavailable in the \"aac_ltp\" profile\n");
1057  } else if (s->options.pred) {
1058  avctx->profile = FF_PROFILE_AAC_MAIN;
1059  WARN_IF(1,
1060  "Chainging profile to \"aac_main\"\n");
1061  ERROR_IF(s->options.ltp,
1062  "LTP prediction unavailable in the \"aac_main\" profile\n");
1063  }
1064  s->profile = avctx->profile;
1065 
1066  /* Coder limitations */
1067  s->coder = &ff_aac_coders[s->options.coder];
1068  if (s->options.coder == AAC_CODER_ANMR) {
1070  "The ANMR coder is considered experimental, add -strict -2 to enable!\n");
1071  s->options.intensity_stereo = 0;
1072  s->options.pns = 0;
1073  }
1075  "The LPT profile requires experimental compliance, add -strict -2 to enable!\n");
1076 
1077  /* M/S introduces horrible artifacts with multichannel files, this is temporary */
1078  if (s->channels > 3)
1079  s->options.mid_side = 0;
1080 
1081  if ((ret = dsp_init(avctx, s)) < 0)
1082  goto fail;
1083 
1084  if ((ret = alloc_buffers(avctx, s)) < 0)
1085  goto fail;
1086 
1087  if ((ret = put_audio_specific_config(avctx)))
1088  goto fail;
1089 
1090  sizes[0] = ff_aac_swb_size_1024[s->samplerate_index];
1091  sizes[1] = ff_aac_swb_size_128[s->samplerate_index];
1092  lengths[0] = ff_aac_num_swb_1024[s->samplerate_index];
1093  lengths[1] = ff_aac_num_swb_128[s->samplerate_index];
1094  for (i = 0; i < s->chan_map[0]; i++)
1095  grouping[i] = s->chan_map[i + 1] == TYPE_CPE;
1096  if ((ret = ff_psy_init(&s->psy, avctx, 2, sizes, lengths,
1097  s->chan_map[0], grouping)) < 0)
1098  goto fail;
1099  s->psypp = ff_psy_preprocess_init(avctx);
1101  s->random_state = 0x1f2e3d4c;
1102 
1103  s->abs_pow34 = abs_pow34_v;
1104  s->quant_bands = quantize_bands;
1105 
1106  if (ARCH_X86)
1108 
1109  if (HAVE_MIPSDSP)
1111 
1113  return AVERROR_UNKNOWN;
1114 
1115  ff_af_queue_init(avctx, &s->afq);
1116 
1117  return 0;
1118 fail:
1119  aac_encode_end(avctx);
1120  return ret;
1121 }
1122 
1123 #define AACENC_FLAGS AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM
1124 static const AVOption aacenc_options[] = {
1125  {"aac_coder", "Coding algorithm", offsetof(AACEncContext, options.coder), AV_OPT_TYPE_INT, {.i64 = AAC_CODER_FAST}, 0, AAC_CODER_NB-1, AACENC_FLAGS, "coder"},
1126  {"anmr", "ANMR method", 0, AV_OPT_TYPE_CONST, {.i64 = AAC_CODER_ANMR}, INT_MIN, INT_MAX, AACENC_FLAGS, "coder"},
1127  {"twoloop", "Two loop searching method", 0, AV_OPT_TYPE_CONST, {.i64 = AAC_CODER_TWOLOOP}, INT_MIN, INT_MAX, AACENC_FLAGS, "coder"},
1128  {"fast", "Default fast search", 0, AV_OPT_TYPE_CONST, {.i64 = AAC_CODER_FAST}, INT_MIN, INT_MAX, AACENC_FLAGS, "coder"},
1129  {"aac_ms", "Force M/S stereo coding", offsetof(AACEncContext, options.mid_side), AV_OPT_TYPE_BOOL, {.i64 = -1}, -1, 1, AACENC_FLAGS},
1130  {"aac_is", "Intensity stereo coding", offsetof(AACEncContext, options.intensity_stereo), AV_OPT_TYPE_BOOL, {.i64 = 1}, -1, 1, AACENC_FLAGS},
1131  {"aac_pns", "Perceptual noise substitution", offsetof(AACEncContext, options.pns), AV_OPT_TYPE_BOOL, {.i64 = 1}, -1, 1, AACENC_FLAGS},
1132  {"aac_tns", "Temporal noise shaping", offsetof(AACEncContext, options.tns), AV_OPT_TYPE_BOOL, {.i64 = 1}, -1, 1, AACENC_FLAGS},
1133  {"aac_ltp", "Long term prediction", offsetof(AACEncContext, options.ltp), AV_OPT_TYPE_BOOL, {.i64 = 0}, -1, 1, AACENC_FLAGS},
1134  {"aac_pred", "AAC-Main prediction", offsetof(AACEncContext, options.pred), AV_OPT_TYPE_BOOL, {.i64 = 0}, -1, 1, AACENC_FLAGS},
1135  {"aac_pce", "Forces the use of PCEs", offsetof(AACEncContext, options.pce), AV_OPT_TYPE_BOOL, {.i64 = 0}, -1, 1, AACENC_FLAGS},
1137  {NULL}
1138 };
1139 
1140 static const AVClass aacenc_class = {
1141  .class_name = "AAC encoder",
1142  .item_name = av_default_item_name,
1143  .option = aacenc_options,
1144  .version = LIBAVUTIL_VERSION_INT,
1145 };
1146 
1148  { "b", "0" },
1149  { NULL }
1150 };
1151 
1153  .name = "aac",
1154  .long_name = NULL_IF_CONFIG_SMALL("AAC (Advanced Audio Coding)"),
1155  .type = AVMEDIA_TYPE_AUDIO,
1156  .id = AV_CODEC_ID_AAC,
1157  .priv_data_size = sizeof(AACEncContext),
1158  .init = aac_encode_init,
1159  .encode2 = aac_encode_frame,
1160  .close = aac_encode_end,
1162  .supported_samplerates = mpeg4audio_sample_rates,
1163  .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
1165  .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLTP,
1167  .priv_class = &aacenc_class,
1168 };
AVCodecContext::frame_size
int frame_size
Number of samples per channel in an audio frame.
Definition: avcodec.h:1206
AVCodec
AVCodec.
Definition: codec.h:190
AV_SAMPLE_FMT_FLTP
@ AV_SAMPLE_FMT_FLTP
float, planar
Definition: samplefmt.h:69
FF_CODEC_CAP_INIT_THREADSAFE
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
Definition: internal.h:40
name
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default minimum maximum flags name is the option name
Definition: writing_filters.txt:88
ff_tns_max_bands_128
const uint8_t ff_tns_max_bands_128[]
Definition: aactab.c:1406
aacenc_class
static const AVClass aacenc_class
Definition: aacenc.c:1140
init
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
ff_init_ff_sine_windows
void AAC_RENAME() ff_init_ff_sine_windows(int index)
initialize the specified entry of ff_sine_windows
Definition: sinewin_tablegen.h:76
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
opt.h
LIBAVCODEC_IDENT
#define LIBAVCODEC_IDENT
Definition: version.h:42
AVCodecContext::channel_layout
uint64_t channel_layout
Audio channel layout.
Definition: avcodec.h:1237
put_bitstream_info
static void put_bitstream_info(AACEncContext *s, const char *name)
Write some auxiliary information about the created AAC file.
Definition: aacenc.c:515
libm.h
SingleChannelElement::pulse
Pulse pulse
Definition: aac.h:251
TYPE_FIL
@ TYPE_FIL
Definition: aac.h:62
ff_af_queue_remove
void ff_af_queue_remove(AudioFrameQueue *afq, int nb_samples, int64_t *pts, int64_t *duration)
Remove frame(s) from the queue.
Definition: audio_frame_queue.c:75
out
FILE * out
Definition: movenc.c:54
FF_COMPLIANCE_EXPERIMENTAL
#define FF_COMPLIANCE_EXPERIMENTAL
Allow nonstandardized experimental things.
Definition: avcodec.h:1594
AVCodecContext::sample_rate
int sample_rate
samples per second
Definition: avcodec.h:1186
ff_af_queue_close
void ff_af_queue_close(AudioFrameQueue *afq)
Close AudioFrameQueue.
Definition: audio_frame_queue.c:36
aacenctab.h
abs_pow34_v
static void abs_pow34_v(float *out, const float *in, const int size)
Definition: aacenc_utils.h:40
sample_fmts
static enum AVSampleFormat sample_fmts[]
Definition: adpcmenc.c:716
copy_input_samples
static void copy_input_samples(AACEncContext *s, const AVFrame *frame)
Definition: aacenc.c:536
thread.h
aac_encode_init
static av_cold int aac_encode_init(AVCodecContext *avctx)
Definition: aacenc.c:961
aacenc_profiles
static const int aacenc_profiles[]
Definition: aacenctab.h:132
Pulse::num_pulse
int num_pulse
Definition: aac.h:225
AV_CODEC_FLAG_QSCALE
#define AV_CODEC_FLAG_QSCALE
Use fixed qscale.
Definition: avcodec.h:275
output
filter_frame For filters that do not use the this method is called when a frame is pushed to the filter s input It can be called at any time except in a reentrant way If the input frame is enough to produce output
Definition: filter_design.txt:225
FF_PROFILE_AAC_MAIN
#define FF_PROFILE_AAC_MAIN
Definition: avcodec.h:1863
SingleChannelElement::zeroes
uint8_t zeroes[128]
band is not coded (used by encoder)
Definition: aac.h:257
init_put_bits
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
Definition: put_bits.h:48
ff_af_queue_init
av_cold void ff_af_queue_init(AVCodecContext *avctx, AudioFrameQueue *afq)
Initialize AudioFrameQueue.
Definition: audio_frame_queue.c:28
end
static av_cold int end(AVCodecContext *avctx)
Definition: avrndec.c:92
av_get_channel_layout_string
void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, uint64_t channel_layout)
Return a description of a channel layout.
Definition: channel_layout.c:211
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:300
put_bits
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
Definition: j2kenc.c:208
ff_aac_tableinit
static void ff_aac_tableinit(void)
Definition: aactab.h:45
WARN_IF
#define WARN_IF(cond,...)
Definition: aacenc_utils.h:274
w
uint8_t w
Definition: llviddspenc.c:38
avpriv_put_string
void avpriv_put_string(PutBitContext *pb, const char *string, int terminate_string)
Put the string string in the bitstream.
Definition: bitstream.c:53
R
#define R
Definition: huffyuvdsp.h:34
internal.h
AVPacket::data
uint8_t * data
Definition: packet.h:355
ff_aac_coders
const AACCoefficientsEncoder ff_aac_coders[AAC_CODER_NB]
Definition: aaccoder.c:897
AVOption
AVOption.
Definition: opt.h:246
ff_mdct_init
#define ff_mdct_init
Definition: fft.h:169
FF_PROFILE_AAC_LTP
#define FF_PROFILE_AAC_LTP
Definition: avcodec.h:1866
encode_band_info
static void encode_band_info(AACEncContext *s, SingleChannelElement *sce)
Encode scalefactor band coding type.
Definition: aacenc.c:372
TemporalNoiseShaping::present
int present
Definition: aac.h:199
FFPsyWindowInfo::window_shape
int window_shape
window shape (sine/KBD/whatever)
Definition: psymodel.h:79
float.h
aac_chan_configs
static const uint8_t aac_chan_configs[AAC_MAX_CHANNELS][6]
default channel configurations
Definition: aacenctab.h:58
AAC_CODER_NB
@ AAC_CODER_NB
Definition: aacenc.h:40
LongTermPrediction::used
int8_t used[MAX_LTP_LONG_SFB]
Definition: aac.h:168
AVPacket::duration
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
Definition: packet.h:373
SingleChannelElement::pcoeffs
INTFLOAT pcoeffs[1024]
coefficients for IMDCT, pristine
Definition: aac.h:261
max
#define max(a, b)
Definition: cuda_runtime.h:33
AVERROR_UNKNOWN
#define AVERROR_UNKNOWN
Unknown error, typically from an external library.
Definition: error.h:71
ff_swb_offset_128
const uint16_t *const ff_swb_offset_128[]
Definition: aactab.c:1368
AACPCEInfo::layout
int64_t layout
Definition: aacenc.h:94
encode_spectral_coeffs
static void encode_spectral_coeffs(AACEncContext *s, SingleChannelElement *sce)
Encode spectral coefficients processed by psychoacoustic model.
Definition: aacenc.c:441
ff_tns_max_bands_1024
const uint8_t ff_tns_max_bands_1024[]
Definition: aactab.c:1394
AAC_CODER_FAST
@ AAC_CODER_FAST
Definition: aacenc.h:38
IndividualChannelStream::num_swb
int num_swb
number of scalefactor window bands
Definition: aac.h:183
WINDOW_FUNC
#define WINDOW_FUNC(type)
Definition: aacenc.c:137
avoid_clipping
static void avoid_clipping(AACEncContext *s, SingleChannelElement *sce)
Downscale spectral coefficients for near-clipping windows to avoid artifacts.
Definition: aacenc.c:469
mpeg4audio.h
SingleChannelElement::ret_buf
INTFLOAT ret_buf[2048]
PCM output buffer.
Definition: aac.h:264
fail
#define fail()
Definition: checkasm.h:123
FF_PROFILE_MPEG2_AAC_LOW
#define FF_PROFILE_MPEG2_AAC_LOW
Definition: avcodec.h:1871
apply_mid_side_stereo
static void apply_mid_side_stereo(ChannelElement *cpe)
Definition: aacenc.c:337
TYPE_CPE
@ TYPE_CPE
Definition: aac.h:57
ChannelElement::ms_mode
int ms_mode
Signals mid/side stereo flags coding mode (used by encoder)
Definition: aac.h:279
AVCodecContext::initial_padding
int initial_padding
Audio only.
Definition: avcodec.h:2060
defaults
static const AVCodecDefault defaults[]
Definition: amfenc_h264.c:361
AVCodecContext::flags
int flags
AV_CODEC_FLAG_*.
Definition: avcodec.h:606
Pulse::amp
int amp[4]
Definition: aac.h:228
Pulse::pos
int pos[4]
Definition: aac.h:227
put_pce
static void put_pce(PutBitContext *pb, AVCodecContext *avctx)
Definition: aacenc.c:55
ff_psy_end
av_cold void ff_psy_end(FFPsyContext *ctx)
Cleanup model context at the end.
Definition: psymodel.c:83
Pulse::start
int start
Definition: aac.h:226
ff_af_queue_add
int ff_af_queue_add(AudioFrameQueue *afq, const AVFrame *f)
Add a frame to the queue.
Definition: audio_frame_queue.c:44
IndividualChannelStream::prediction_used
uint8_t prediction_used[41]
Definition: aac.h:190
AACPCEInfo::num_ele
int num_ele[4]
front, side, back, lfe
Definition: aacenc.h:95
SingleChannelElement::ics
IndividualChannelStream ics
Definition: aac.h:249
FFPsyWindowInfo
windowing related information
Definition: psymodel.h:77
adjust_frame_information
static void adjust_frame_information(ChannelElement *cpe, int chans)
Produce integer coefficients from scalefactors provided by the model.
Definition: aacenc.c:258
ff_thread_once
static int ff_thread_once(char *control, void(*routine)(void))
Definition: thread.h:175
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:176
av_cold
#define av_cold
Definition: attributes.h:90
IndividualChannelStream::clip_avoidance_factor
float clip_avoidance_factor
set if any window is near clipping to the necessary atennuation factor to avoid it
Definition: aac.h:192
AVCodecContext::extradata_size
int extradata_size
Definition: avcodec.h:628
NOISE_BT
@ NOISE_BT
Spectral data are scaled white noise not coded in the bitstream.
Definition: aac.h:87
s
#define s(width, name)
Definition: cbs_vp9.c:257
SingleChannelElement::coeffs
INTFLOAT coeffs[1024]
coefficients for IMDCT, maybe processed
Definition: aac.h:262
AVCodecContext::global_quality
int global_quality
Global quality for codecs which cannot change it per frame.
Definition: avcodec.h:592
IndividualChannelStream::swb_sizes
const uint8_t * swb_sizes
table of scalefactor band sizes for a particular window
Definition: aac.h:182
g
const char * g
Definition: vf_curves.c:115
AVMEDIA_TYPE_AUDIO
@ AVMEDIA_TYPE_AUDIO
Definition: avutil.h:202
EIGHT_SHORT_SEQUENCE
@ EIGHT_SHORT_SEQUENCE
Definition: aac.h:78
info
MIPS optimizations info
Definition: mips.txt:2
INTENSITY_BT2
@ INTENSITY_BT2
Scalefactor data are intensity stereo positions (out of phase).
Definition: aac.h:88
IndividualChannelStream::group_len
uint8_t group_len[8]
Definition: aac.h:179
FF_PROFILE_UNKNOWN
#define FF_PROFILE_UNKNOWN
Definition: avcodec.h:1860
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:37
aac_normal_chan_layouts
static const int64_t aac_normal_chan_layouts[7]
Definition: aacenctab.h:47
alloc_buffers
static av_cold int alloc_buffers(AVCodecContext *avctx, AACEncContext *s)
Definition: aacenc.c:942
ff_aac_swb_size_128_len
const int ff_aac_swb_size_128_len
Definition: aacenctab.c:107
channels
channels
Definition: aptx.h:33
LongTermPrediction::present
int8_t present
Definition: aac.h:164
kbdwin.h
IndividualChannelStream
Individual Channel Stream.
Definition: aac.h:174
SCALE_DIFF_ZERO
#define SCALE_DIFF_ZERO
codebook index corresponding to zero scalefactor indices difference
Definition: aac.h:152
NAN
#define NAN
Definition: mathematics.h:64
f
#define f(width, name)
Definition: cbs_vp9.c:255
NOISE_PRE
#define NOISE_PRE
preamble for NOISE_BT, put in bitstream with the first noise band
Definition: aac.h:156
PutBitContext
Definition: put_bits.h:35
IndividualChannelStream::swb_offset
const uint16_t * swb_offset
table of offsets to the lowest spectral coefficient of a scalefactor band, sfb, for a particular wind...
Definition: aac.h:181
aac_chan_maps
static const uint8_t aac_chan_maps[AAC_MAX_CHANNELS][AAC_MAX_CHANNELS]
Table to remap channels from libavcodec's default order to AAC order.
Definition: aacenctab.h:72
ff_aac_encoder
AVCodec ff_aac_encoder
Definition: aacenc.c:1152
if
if(ret)
Definition: filter_design.txt:179
AVCodecDefault
Definition: internal.h:201
INTENSITY_BT
@ INTENSITY_BT
Scalefactor data are intensity stereo positions (in phase).
Definition: aac.h:89
FFPsyWindowInfo::window_type
int window_type[3]
window type (short/long/transitional, etc.) - current, previous and next
Definition: psymodel.h:78
AAC_MAX_CHANNELS
#define AAC_MAX_CHANNELS
Definition: aacenctab.h:39
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
AV_ONCE_INIT
#define AV_ONCE_INIT
Definition: thread.h:173
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:67
aac_pce_configs
static const AACPCEInfo aac_pce_configs[]
List of PCE (Program Configuration Element) for the channel layouts listed in channel_layout....
Definition: aacenc.h:137
ChannelElement::is_mask
uint8_t is_mask[128]
Set if intensity stereo is used (used by encoder)
Definition: aac.h:282
NULL
#define NULL
Definition: coverity.c:32
sizes
static const int sizes[][2]
Definition: img2dec.c:53
ff_aac_swb_size_1024_len
const int ff_aac_swb_size_1024_len
Definition: aacenctab.c:108
encode_pulses
static void encode_pulses(AACEncContext *s, Pulse *pulse)
Encode pulse data.
Definition: aacenc.c:422
SingleChannelElement::is_ener
float is_ener[128]
Intensity stereo pos (used by encoder)
Definition: aac.h:259
ff_aac_num_swb_128
const uint8_t ff_aac_num_swb_128[]
Definition: aactab.c:61
AVCodecContext::bit_rate
int64_t bit_rate
the average bitrate
Definition: avcodec.h:576
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:235
profiles.h
aac.h
aactab.h
IndividualChannelStream::predictor_present
int predictor_present
Definition: aac.h:186
FFPsyWindowInfo::grouping
int grouping[8]
window grouping (for e.g. AAC)
Definition: psymodel.h:81
TNS_MAX_ORDER
#define TNS_MAX_ORDER
Definition: aac.h:50
AVOnce
#define AVOnce
Definition: thread.h:172
SingleChannelElement::sf_idx
int sf_idx[128]
scalefactor indices (used by encoder)
Definition: aac.h:256
float_dsp.h
for
for(j=16;j >0;--j)
Definition: h264pred_template.c:469
AV_CODEC_ID_AAC
@ AV_CODEC_ID_AAC
Definition: codec_id.h:412
aac_encode_frame
static int aac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
Definition: aacenc.c:558
avpriv_align_put_bits
void avpriv_align_put_bits(PutBitContext *s)
Pad the bitstream with zeros up to the next byte boundary.
Definition: bitstream.c:48
aac_table_init
static AVOnce aac_table_init
Definition: aacenc.c:53
ff_aac_scalefactor_bits
const uint8_t ff_aac_scalefactor_bits[121]
Definition: aactab.c:92
AACPCEInfo
Definition: aacenc.h:93
FFPsyWindowInfo::clipping
float clipping[8]
maximum absolute normalized intensity in the given window for clip avoidance
Definition: psymodel.h:82
options
const OptionDef options[]
SingleChannelElement::lcoeffs
AAC_FLOAT lcoeffs[1024]
MDCT of LTP coefficients (used by encoder)
Definition: aac.h:266
AAC_CODER_ANMR
@ AAC_CODER_ANMR
Definition: aacenc.h:36
ChannelElement::ch
SingleChannelElement ch[2]
Definition: aac.h:284
ff_swb_offset_1024
const uint16_t *const ff_swb_offset_1024[]
Definition: aactab.c:1336
AVPacket::size
int size
Definition: packet.h:356
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:188
ONLY_LONG_SEQUENCE
@ ONLY_LONG_SEQUENCE
Definition: aac.h:76
TYPE_END
@ TYPE_END
Definition: aac.h:63
quantize_bands
static void quantize_bands(int *out, const float *in, const float *scaled, int size, int is_signed, int maxval, const float Q34, const float rounding)
Definition: aacenc_utils.h:65
FF_PROFILE_AAC_LOW
#define FF_PROFILE_AAC_LOW
Definition: avcodec.h:1864
encode_scale_factors
static void encode_scale_factors(AVCodecContext *avctx, AACEncContext *s, SingleChannelElement *sce)
Encode scalefactors.
Definition: aacenc.c:386
FFMAX
#define FFMAX(a, b)
Definition: common.h:94
AV_SAMPLE_FMT_NONE
@ AV_SAMPLE_FMT_NONE
Definition: samplefmt.h:59
ff_mdct_end
#define ff_mdct_end
Definition: fft.h:170
apply_window_and_mdct
static void apply_window_and_mdct(AACEncContext *s, SingleChannelElement *sce, float *audio)
Definition: aacenc.c:202
AVFloatDSPContext
Definition: float_dsp.h:24
AAC_CODER_TWOLOOP
@ AAC_CODER_TWOLOOP
Definition: aacenc.h:37
ff_aac_swb_size_128
const uint8_t * ff_aac_swb_size_128[]
Definition: aacenctab.c:91
ff_aac_coder_init_mips
void ff_aac_coder_init_mips(AACEncContext *c)
Definition: aaccoder_mips.c:2484
ChannelElement::common_window
int common_window
Set if channels share a common 'IndividualChannelStream' in bitstream.
Definition: aac.h:278
FFMIN
#define FFMIN(a, b)
Definition: common.h:96
sinewin.h
apply_intensity_stereo
static void apply_intensity_stereo(ChannelElement *cpe)
Definition: aacenc.c:308
AACPCEInfo::index
int index[4][8]
front, side, back, lfe
Definition: aacenc.h:97
ChannelElement::ms_mask
uint8_t ms_mask[128]
Set if mid/side stereo is used for each scalefactor window band.
Definition: aac.h:281
ff_lpc_end
av_cold void ff_lpc_end(LPCContext *s)
Uninitialize LPCContext.
Definition: lpc.c:322
AV_LOG_INFO
#define AV_LOG_INFO
Standard information.
Definition: log.h:187
AVCodecContext::channels
int channels
number of audio channels
Definition: avcodec.h:1187
ff_psy_init
av_cold int ff_psy_init(FFPsyContext *ctx, AVCodecContext *avctx, int num_lens, const uint8_t **bands, const int *num_bands, int num_groups, const uint8_t *group_map)
Initialize psychoacoustic model.
Definition: psymodel.c:31
in
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi - 0x80) *(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi - 0x80) *(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(const int16_t *) pi >> 8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t, *(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t, *(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(const int32_t *) pi >> 24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t, *(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t, *(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31)))) #define SET_CONV_FUNC_GROUP(ofmt, ifmt) static void set_generic_function(AudioConvert *ac) { } void ff_audio_convert_free(AudioConvert **ac) { if(! *ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);} AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, int sample_rate, int apply_map) { AudioConvert *ac;int in_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) return NULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method !=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt) > 2) { ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc) { av_free(ac);return NULL;} return ac;} in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar) { ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar ? ac->channels :1;} else if(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;else ac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);return ac;} int ff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in) { int use_generic=1;int len=in->nb_samples;int p;if(ac->dc) { av_log(ac->avr, AV_LOG_TRACE, "%d samples - audio_convert: %s to %s (dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));return ff_convert_dither(ac-> in
Definition: audio_convert.c:326
SingleChannelElement
Single Channel Element - used for both SCE and LFE elements.
Definition: aac.h:248
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:269
AVPacket::pts
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
Definition: packet.h:348
put_bits_count
static int put_bits_count(PutBitContext *s)
Definition: put_bits.h:67
IndividualChannelStream::num_windows
int num_windows
Definition: aac.h:184
AVCodecContext::extradata
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
Definition: avcodec.h:627
aacenc_options
static const AVOption aacenc_options[]
Definition: aacenc.c:1124
LONG_STOP_SEQUENCE
@ LONG_STOP_SEQUENCE
Definition: aac.h:79
ChannelElement
channel element - generic struct for SCE/CPE/CCE/LFE
Definition: aac.h:275
apply_window
static void(*const apply_window[4])(AVFloatDSPContext *fdsp, SingleChannelElement *sce, const float *audio)
Definition: aacenc.c:193
AACPCEInfo::pairing
int pairing[3][8]
front, side, back
Definition: aacenc.h:96
AVSampleFormat
AVSampleFormat
Audio sample formats.
Definition: samplefmt.h:58
NOISE_PRE_BITS
#define NOISE_PRE_BITS
length of preamble
Definition: aac.h:157
TYPE_LFE
@ TYPE_LFE
Definition: aac.h:59
uint8_t
uint8_t
Definition: audio_convert.c:194
ff_psy_preprocess_init
av_cold struct FFPsyPreprocessContext * ff_psy_preprocess_init(AVCodecContext *avctx)
psychoacoustic model audio preprocessing initialization
Definition: psymodel.c:103
av_mallocz
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
Definition: mem.c:237
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:197
ff_aac_dsp_init_x86
void ff_aac_dsp_init_x86(AACEncContext *s)
Definition: aacencdsp_init.c:34
AACENC_FLAGS
#define AACENC_FLAGS
Definition: aacenc.c:1123
aac_encode_init_tables
static av_cold void aac_encode_init_tables(void)
Definition: aacenc.c:956
IndividualChannelStream::tns_max_bands
int tns_max_bands
Definition: aac.h:185
avcodec.h
tag
uint32_t tag
Definition: movenc.c:1532
ret
ret
Definition: filter_design.txt:187
ff_aac_num_swb_1024
const uint8_t ff_aac_num_swb_1024[]
Definition: aactab.c:45
AVClass::class_name
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
Definition: log.h:72
frame
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
Definition: filter_design.txt:264
ff_aac_kbd_long_1024
float ff_aac_kbd_long_1024[1024]
Definition: aactab.c:38
AVCodecContext::strict_std_compliance
int strict_std_compliance
strictly follow the standard (MPEG-4, ...).
Definition: avcodec.h:1589
encode_ms_info
static void encode_ms_info(PutBitContext *pb, ChannelElement *cpe)
Encode MS data.
Definition: aacenc.c:244
RESERVED_BT
@ RESERVED_BT
Band types following are encoded differently from others.
Definition: aac.h:86
LONG_START_SEQUENCE
@ LONG_START_SEQUENCE
Definition: aac.h:77
ff_psy_preprocess
void ff_psy_preprocess(struct FFPsyPreprocessContext *ctx, float **audio, int channels)
Preprocess several channel in audio frame in order to compress it better.
Definition: psymodel.c:139
CLIP_AVOIDANCE_FACTOR
#define CLIP_AVOIDANCE_FACTOR
Definition: aac.h:53
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen_template.c:38
SingleChannelElement::tns
TemporalNoiseShaping tns
Definition: aac.h:250
AACEncContext
AAC encoder context.
Definition: aacenc.h:376
L
#define L(x)
Definition: vp56_arith.h:36
AVCodecContext
main external API structure.
Definition: avcodec.h:526
encode_individual_channel
static int encode_individual_channel(AVCodecContext *avctx, AACEncContext *s, SingleChannelElement *sce, int common_window)
Encode one channel of audio data.
Definition: aacenc.c:489
NOISE_OFFSET
#define NOISE_OFFSET
subtracted from global gain, used as offset for the preamble
Definition: aac.h:158
ERROR_IF
#define ERROR_IF(cond,...)
Definition: aacenc_utils.h:268
IndividualChannelStream::window_sequence
enum WindowSequence window_sequence[2]
Definition: aac.h:176
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Definition: opt.h:223
TemporalNoiseShaping
Temporal Noise Shaping.
Definition: aac.h:198
AVCodecContext::profile
int profile
profile
Definition: avcodec.h:1859
AOT_SBR
@ AOT_SBR
Y Spectral Band Replication.
Definition: mpeg4audio.h:94
ff_kbd_window_init
av_cold void ff_kbd_window_init(float *window, float alpha, int n)
Generate a Kaiser-Bessel Derived Window.
Definition: kbdwin.c:26
ff_aac_swb_size_1024
const uint8_t * ff_aac_swb_size_1024[]
Definition: aacenctab.c:99
put_audio_specific_config
static int put_audio_specific_config(AVCodecContext *avctx)
Make AAC audio config object.
Definition: aacenc.c:96
AV_CODEC_CAP_DELAY
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
Definition: codec.h:75
samples
Filter the word “frame” indicates either a video frame or a group of audio samples
Definition: filter_design.txt:8
ChannelElement::is_mode
uint8_t is_mode
Set if any bands have been encoded using intensity stereo (used by encoder)
Definition: aac.h:280
put_ics_info
static void put_ics_info(AACEncContext *s, IndividualChannelStream *info)
Encode ics_info element.
Definition: aacenc.c:223
aac_encode_defaults
static const AVCodecDefault aac_encode_defaults[]
Definition: aacenc.c:1147
AV_CODEC_FLAG_BITEXACT
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
Definition: avcodec.h:333
avpriv_mpeg4audio_sample_rates
const int avpriv_mpeg4audio_sample_rates[16]
Definition: mpeg4audio.c:62
aac_encode_end
static av_cold int aac_encode_end(AVCodecContext *avctx)
Definition: aacenc.c:901
AVCodecContext::frame_number
int frame_number
Frame counter, set by libavcodec.
Definition: avcodec.h:1217
flush_put_bits
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
Definition: put_bits.h:101
diff
static av_always_inline int diff(const uint32_t a, const uint32_t b)
Definition: vf_palettegen.c:136
FF_AAC_PROFILE_OPTS
#define FF_AAC_PROFILE_OPTS
Definition: profiles.h:28
AVPacket
This structure stores compressed data.
Definition: packet.h:332
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:553
AV_OPT_TYPE_BOOL
@ AV_OPT_TYPE_BOOL
Definition: opt.h:240
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
avpriv_float_dsp_alloc
av_cold AVFloatDSPContext * avpriv_float_dsp_alloc(int bit_exact)
Allocate a float DSP context.
Definition: float_dsp.c:135
IndividualChannelStream::window_clipping
uint8_t window_clipping[8]
set if a certain window is near clipping
Definition: aac.h:191
ff_aac_kbd_short_128
float ff_aac_kbd_short_128[128]
Definition: aactab.c:39
mpeg4audio_sample_rates
static const int mpeg4audio_sample_rates[16]
Definition: aacenctab.h:85
IndividualChannelStream::max_sfb
uint8_t max_sfb
number of scalefactor bands per group
Definition: aac.h:175
Pulse
Definition: aac.h:224
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:28
SingleChannelElement::ltp_state
INTFLOAT ltp_state[3072]
time signal for LTP
Definition: aac.h:265
dsp_init
static av_cold int dsp_init(AVCodecContext *avctx, AACEncContext *s)
Definition: aacenc.c:920
IndividualChannelStream::ltp
LongTermPrediction ltp
Definition: aac.h:180
ff_psy_preprocess_end
av_cold void ff_psy_preprocess_end(struct FFPsyPreprocessContext *ctx)
Cleanup audio preprocessing module.
Definition: psymodel.c:152
aacenc_utils.h
AV_CODEC_CAP_SMALL_LAST_FRAME
#define AV_CODEC_CAP_SMALL_LAST_FRAME
Codec can be fed a final frame with a smaller size.
Definition: codec.h:80
ff_alloc_packet2
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size)
Check AVPacket size and/or allocate data.
Definition: encode.c:32
put_bits.h
SingleChannelElement::band_type
enum BandType band_type[128]
band types
Definition: aac.h:252
psymodel.h
AV_OPT_TYPE_CONST
@ AV_OPT_TYPE_CONST
Definition: opt.h:232
IndividualChannelStream::use_kb_window
uint8_t use_kb_window[2]
If set, use Kaiser-Bessel window, otherwise use a sine window.
Definition: aac.h:177
FF_LPC_TYPE_LEVINSON
@ FF_LPC_TYPE_LEVINSON
Levinson-Durbin recursion.
Definition: lpc.h:47
FF_ALLOCZ_ARRAY_OR_GOTO
#define FF_ALLOCZ_ARRAY_OR_GOTO(ctx, p, nelem, elsize, label)
Definition: internal.h:167
FFPsyWindowInfo::num_windows
int num_windows
number of windows in a frame
Definition: psymodel.h:80
ff_lpc_init
av_cold int ff_lpc_init(LPCContext *s, int blocksize, int max_order, enum FFLPCType lpc_type)
Initialize LPCContext.
Definition: lpc.c:300
ff_aac_scalefactor_code
const uint32_t ff_aac_scalefactor_code[121]
Definition: aactab.c:73
ff_quantize_band_cost_cache_init
void ff_quantize_band_cost_cache_init(struct AACEncContext *s)
Definition: aacenc.c:128
aacenc.h