FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
mpegaudioenc.c
Go to the documentation of this file.
1 /*
2  * The simplest mpeg audio layer 2 encoder
3  * Copyright (c) 2000, 2001 Fabrice Bellard
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  * The simplest mpeg audio layer 2 encoder.
25  */
26 
28 
29 #include "avcodec.h"
30 #include "internal.h"
31 #include "put_bits.h"
32 
33 #define FRAC_BITS 15 /* fractional bits for sb_samples and dct */
34 #define WFRAC_BITS 14 /* fractional bits for window */
35 
36 /* define it to use floats in quantization (I don't like floats !) */
37 #define USE_FLOATS
38 
39 #include "mpegaudio.h"
40 #include "mpegaudiodsp.h"
41 #include "mpegaudiodata.h"
42 #include "mpegaudiotab.h"
43 
44 /* currently, cannot change these constants (need to modify
45  quantization stage) */
46 #define MUL(a,b) (((int64_t)(a) * (int64_t)(b)) >> FRAC_BITS)
47 
48 #define SAMPLES_BUF_SIZE 4096
49 
50 typedef struct MpegAudioContext {
53  int lsf; /* 1 if mpeg2 low bitrate selected */
54  int bitrate_index; /* bit rate */
56  int frame_size; /* frame size, in bits, without padding */
57  /* padding computation */
59  short samples_buf[MPA_MAX_CHANNELS][SAMPLES_BUF_SIZE]; /* buffer for filter */
60  int samples_offset[MPA_MAX_CHANNELS]; /* offset in samples_buf */
62  unsigned char scale_factors[MPA_MAX_CHANNELS][SBLIMIT][3]; /* scale factors */
63  /* code to group 3 scale factors */
65  int sblimit; /* number of used subbands */
66  const unsigned char *alloc_table;
67  int16_t filter_bank[512];
69  unsigned char scale_diff_table[128];
70 #ifdef USE_FLOATS
72 #else
73  int8_t scale_factor_shift[64];
74  unsigned short scale_factor_mult[64];
75 #endif
76  unsigned short total_quant_bits[17]; /* total number of bits per allocation group */
78 
80 {
81  MpegAudioContext *s = avctx->priv_data;
82  int freq = avctx->sample_rate;
83  int bitrate = avctx->bit_rate;
84  int channels = avctx->channels;
85  int i, v, table;
86  float a;
87 
88  if (channels <= 0 || channels > 2){
89  av_log(avctx, AV_LOG_ERROR, "encoding %d channel(s) is not allowed in mp2\n", channels);
90  return AVERROR(EINVAL);
91  }
92  bitrate = bitrate / 1000;
93  s->nb_channels = channels;
94  avctx->frame_size = MPA_FRAME_SIZE;
95  avctx->delay = 512 - 32 + 1;
96 
97  /* encoding freq */
98  s->lsf = 0;
99  for(i=0;i<3;i++) {
100  if (avpriv_mpa_freq_tab[i] == freq)
101  break;
102  if ((avpriv_mpa_freq_tab[i] / 2) == freq) {
103  s->lsf = 1;
104  break;
105  }
106  }
107  if (i == 3){
108  av_log(avctx, AV_LOG_ERROR, "Sampling rate %d is not allowed in mp2\n", freq);
109  return AVERROR(EINVAL);
110  }
111  s->freq_index = i;
112 
113  /* encoding bitrate & frequency */
114  for(i=0;i<15;i++) {
115  if (avpriv_mpa_bitrate_tab[s->lsf][1][i] == bitrate)
116  break;
117  }
118  if (i == 15){
119  av_log(avctx, AV_LOG_ERROR, "bitrate %d is not allowed in mp2\n", bitrate);
120  return AVERROR(EINVAL);
121  }
122  s->bitrate_index = i;
123 
124  /* compute total header size & pad bit */
125 
126  a = (float)(bitrate * 1000 * MPA_FRAME_SIZE) / (freq * 8.0);
127  s->frame_size = ((int)a) * 8;
128 
129  /* frame fractional size to compute padding */
130  s->frame_frac = 0;
131  s->frame_frac_incr = (int)((a - floor(a)) * 65536.0);
132 
133  /* select the right allocation table */
134  table = ff_mpa_l2_select_table(bitrate, s->nb_channels, freq, s->lsf);
135 
136  /* number of used subbands */
139 
140  av_dlog(avctx, "%d kb/s, %d Hz, frame_size=%d bits, table=%d, padincr=%x\n",
141  bitrate, freq, s->frame_size, table, s->frame_frac_incr);
142 
143  for(i=0;i<s->nb_channels;i++)
144  s->samples_offset[i] = 0;
145 
146  for(i=0;i<257;i++) {
147  int v;
148  v = ff_mpa_enwindow[i];
149 #if WFRAC_BITS != 16
150  v = (v + (1 << (16 - WFRAC_BITS - 1))) >> (16 - WFRAC_BITS);
151 #endif
152  s->filter_bank[i] = v;
153  if ((i & 63) != 0)
154  v = -v;
155  if (i != 0)
156  s->filter_bank[512 - i] = v;
157  }
158 
159  for(i=0;i<64;i++) {
160  v = (int)(exp2((3 - i) / 3.0) * (1 << 20));
161  if (v <= 0)
162  v = 1;
163  s->scale_factor_table[i] = v;
164 #ifdef USE_FLOATS
165  s->scale_factor_inv_table[i] = exp2(-(3 - i) / 3.0) / (float)(1 << 20);
166 #else
167 #define P 15
168  s->scale_factor_shift[i] = 21 - P - (i / 3);
169  s->scale_factor_mult[i] = (1 << P) * exp2((i % 3) / 3.0);
170 #endif
171  }
172  for(i=0;i<128;i++) {
173  v = i - 64;
174  if (v <= -3)
175  v = 0;
176  else if (v < 0)
177  v = 1;
178  else if (v == 0)
179  v = 2;
180  else if (v < 3)
181  v = 3;
182  else
183  v = 4;
184  s->scale_diff_table[i] = v;
185  }
186 
187  for(i=0;i<17;i++) {
188  v = ff_mpa_quant_bits[i];
189  if (v < 0)
190  v = -v;
191  else
192  v = v * 3;
193  s->total_quant_bits[i] = 12 * v;
194  }
195 
196  return 0;
197 }
198 
199 /* 32 point floating point IDCT without 1/sqrt(2) coef zero scaling */
200 static void idct32(int *out, int *tab)
201 {
202  int i, j;
203  int *t, *t1, xr;
204  const int *xp = costab32;
205 
206  for(j=31;j>=3;j-=2) tab[j] += tab[j - 2];
207 
208  t = tab + 30;
209  t1 = tab + 2;
210  do {
211  t[0] += t[-4];
212  t[1] += t[1 - 4];
213  t -= 4;
214  } while (t != t1);
215 
216  t = tab + 28;
217  t1 = tab + 4;
218  do {
219  t[0] += t[-8];
220  t[1] += t[1-8];
221  t[2] += t[2-8];
222  t[3] += t[3-8];
223  t -= 8;
224  } while (t != t1);
225 
226  t = tab;
227  t1 = tab + 32;
228  do {
229  t[ 3] = -t[ 3];
230  t[ 6] = -t[ 6];
231 
232  t[11] = -t[11];
233  t[12] = -t[12];
234  t[13] = -t[13];
235  t[15] = -t[15];
236  t += 16;
237  } while (t != t1);
238 
239 
240  t = tab;
241  t1 = tab + 8;
242  do {
243  int x1, x2, x3, x4;
244 
245  x3 = MUL(t[16], FIX(SQRT2*0.5));
246  x4 = t[0] - x3;
247  x3 = t[0] + x3;
248 
249  x2 = MUL(-(t[24] + t[8]), FIX(SQRT2*0.5));
250  x1 = MUL((t[8] - x2), xp[0]);
251  x2 = MUL((t[8] + x2), xp[1]);
252 
253  t[ 0] = x3 + x1;
254  t[ 8] = x4 - x2;
255  t[16] = x4 + x2;
256  t[24] = x3 - x1;
257  t++;
258  } while (t != t1);
259 
260  xp += 2;
261  t = tab;
262  t1 = tab + 4;
263  do {
264  xr = MUL(t[28],xp[0]);
265  t[28] = (t[0] - xr);
266  t[0] = (t[0] + xr);
267 
268  xr = MUL(t[4],xp[1]);
269  t[ 4] = (t[24] - xr);
270  t[24] = (t[24] + xr);
271 
272  xr = MUL(t[20],xp[2]);
273  t[20] = (t[8] - xr);
274  t[ 8] = (t[8] + xr);
275 
276  xr = MUL(t[12],xp[3]);
277  t[12] = (t[16] - xr);
278  t[16] = (t[16] + xr);
279  t++;
280  } while (t != t1);
281  xp += 4;
282 
283  for (i = 0; i < 4; i++) {
284  xr = MUL(tab[30-i*4],xp[0]);
285  tab[30-i*4] = (tab[i*4] - xr);
286  tab[ i*4] = (tab[i*4] + xr);
287 
288  xr = MUL(tab[ 2+i*4],xp[1]);
289  tab[ 2+i*4] = (tab[28-i*4] - xr);
290  tab[28-i*4] = (tab[28-i*4] + xr);
291 
292  xr = MUL(tab[31-i*4],xp[0]);
293  tab[31-i*4] = (tab[1+i*4] - xr);
294  tab[ 1+i*4] = (tab[1+i*4] + xr);
295 
296  xr = MUL(tab[ 3+i*4],xp[1]);
297  tab[ 3+i*4] = (tab[29-i*4] - xr);
298  tab[29-i*4] = (tab[29-i*4] + xr);
299 
300  xp += 2;
301  }
302 
303  t = tab + 30;
304  t1 = tab + 1;
305  do {
306  xr = MUL(t1[0], *xp);
307  t1[0] = (t[0] - xr);
308  t[0] = (t[0] + xr);
309  t -= 2;
310  t1 += 2;
311  xp++;
312  } while (t >= tab);
313 
314  for(i=0;i<32;i++) {
315  out[i] = tab[bitinv32[i]];
316  }
317 }
318 
319 #define WSHIFT (WFRAC_BITS + 15 - FRAC_BITS)
320 
321 static void filter(MpegAudioContext *s, int ch, const short *samples, int incr)
322 {
323  short *p, *q;
324  int sum, offset, i, j;
325  int tmp[64];
326  int tmp1[32];
327  int *out;
328 
329  offset = s->samples_offset[ch];
330  out = &s->sb_samples[ch][0][0][0];
331  for(j=0;j<36;j++) {
332  /* 32 samples at once */
333  for(i=0;i<32;i++) {
334  s->samples_buf[ch][offset + (31 - i)] = samples[0];
335  samples += incr;
336  }
337 
338  /* filter */
339  p = s->samples_buf[ch] + offset;
340  q = s->filter_bank;
341  /* maxsum = 23169 */
342  for(i=0;i<64;i++) {
343  sum = p[0*64] * q[0*64];
344  sum += p[1*64] * q[1*64];
345  sum += p[2*64] * q[2*64];
346  sum += p[3*64] * q[3*64];
347  sum += p[4*64] * q[4*64];
348  sum += p[5*64] * q[5*64];
349  sum += p[6*64] * q[6*64];
350  sum += p[7*64] * q[7*64];
351  tmp[i] = sum;
352  p++;
353  q++;
354  }
355  tmp1[0] = tmp[16] >> WSHIFT;
356  for( i=1; i<=16; i++ ) tmp1[i] = (tmp[i+16]+tmp[16-i]) >> WSHIFT;
357  for( i=17; i<=31; i++ ) tmp1[i] = (tmp[i+16]-tmp[80-i]) >> WSHIFT;
358 
359  idct32(out, tmp1);
360 
361  /* advance of 32 samples */
362  offset -= 32;
363  out += 32;
364  /* handle the wrap around */
365  if (offset < 0) {
366  memmove(s->samples_buf[ch] + SAMPLES_BUF_SIZE - (512 - 32),
367  s->samples_buf[ch], (512 - 32) * 2);
368  offset = SAMPLES_BUF_SIZE - 512;
369  }
370  }
371  s->samples_offset[ch] = offset;
372 }
373 
375  unsigned char scale_code[SBLIMIT],
376  unsigned char scale_factors[SBLIMIT][3],
377  int sb_samples[3][12][SBLIMIT],
378  int sblimit)
379 {
380  int *p, vmax, v, n, i, j, k, code;
381  int index, d1, d2;
382  unsigned char *sf = &scale_factors[0][0];
383 
384  for(j=0;j<sblimit;j++) {
385  for(i=0;i<3;i++) {
386  /* find the max absolute value */
387  p = &sb_samples[i][0][j];
388  vmax = abs(*p);
389  for(k=1;k<12;k++) {
390  p += SBLIMIT;
391  v = abs(*p);
392  if (v > vmax)
393  vmax = v;
394  }
395  /* compute the scale factor index using log 2 computations */
396  if (vmax > 1) {
397  n = av_log2(vmax);
398  /* n is the position of the MSB of vmax. now
399  use at most 2 compares to find the index */
400  index = (21 - n) * 3 - 3;
401  if (index >= 0) {
402  while (vmax <= s->scale_factor_table[index+1])
403  index++;
404  } else {
405  index = 0; /* very unlikely case of overflow */
406  }
407  } else {
408  index = 62; /* value 63 is not allowed */
409  }
410 
411  av_dlog(NULL, "%2d:%d in=%x %x %d\n",
412  j, i, vmax, s->scale_factor_table[index], index);
413  /* store the scale factor */
414  av_assert2(index >=0 && index <= 63);
415  sf[i] = index;
416  }
417 
418  /* compute the transmission factor : look if the scale factors
419  are close enough to each other */
420  d1 = s->scale_diff_table[sf[0] - sf[1] + 64];
421  d2 = s->scale_diff_table[sf[1] - sf[2] + 64];
422 
423  /* handle the 25 cases */
424  switch(d1 * 5 + d2) {
425  case 0*5+0:
426  case 0*5+4:
427  case 3*5+4:
428  case 4*5+0:
429  case 4*5+4:
430  code = 0;
431  break;
432  case 0*5+1:
433  case 0*5+2:
434  case 4*5+1:
435  case 4*5+2:
436  code = 3;
437  sf[2] = sf[1];
438  break;
439  case 0*5+3:
440  case 4*5+3:
441  code = 3;
442  sf[1] = sf[2];
443  break;
444  case 1*5+0:
445  case 1*5+4:
446  case 2*5+4:
447  code = 1;
448  sf[1] = sf[0];
449  break;
450  case 1*5+1:
451  case 1*5+2:
452  case 2*5+0:
453  case 2*5+1:
454  case 2*5+2:
455  code = 2;
456  sf[1] = sf[2] = sf[0];
457  break;
458  case 2*5+3:
459  case 3*5+3:
460  code = 2;
461  sf[0] = sf[1] = sf[2];
462  break;
463  case 3*5+0:
464  case 3*5+1:
465  case 3*5+2:
466  code = 2;
467  sf[0] = sf[2] = sf[1];
468  break;
469  case 1*5+3:
470  code = 2;
471  if (sf[0] > sf[2])
472  sf[0] = sf[2];
473  sf[1] = sf[2] = sf[0];
474  break;
475  default:
476  av_assert2(0); //cannot happen
477  code = 0; /* kill warning */
478  }
479 
480  av_dlog(NULL, "%d: %2d %2d %2d %d %d -> %d\n", j,
481  sf[0], sf[1], sf[2], d1, d2, code);
482  scale_code[j] = code;
483  sf += 3;
484  }
485 }
486 
487 /* The most important function : psycho acoustic module. In this
488  encoder there is basically none, so this is the worst you can do,
489  but also this is the simpler. */
491 {
492  int i;
493 
494  for(i=0;i<s->sblimit;i++) {
495  smr[i] = (int)(fixed_smr[i] * 10);
496  }
497 }
498 
499 
500 #define SB_NOTALLOCATED 0
501 #define SB_ALLOCATED 1
502 #define SB_NOMORE 2
503 
504 /* Try to maximize the smr while using a number of bits inferior to
505  the frame size. I tried to make the code simpler, faster and
506  smaller than other encoders :-) */
508  short smr1[MPA_MAX_CHANNELS][SBLIMIT],
509  unsigned char bit_alloc[MPA_MAX_CHANNELS][SBLIMIT],
510  int *padding)
511 {
512  int i, ch, b, max_smr, max_ch, max_sb, current_frame_size, max_frame_size;
513  int incr;
514  short smr[MPA_MAX_CHANNELS][SBLIMIT];
515  unsigned char subband_status[MPA_MAX_CHANNELS][SBLIMIT];
516  const unsigned char *alloc;
517 
518  memcpy(smr, smr1, s->nb_channels * sizeof(short) * SBLIMIT);
519  memset(subband_status, SB_NOTALLOCATED, s->nb_channels * SBLIMIT);
520  memset(bit_alloc, 0, s->nb_channels * SBLIMIT);
521 
522  /* compute frame size and padding */
523  max_frame_size = s->frame_size;
524  s->frame_frac += s->frame_frac_incr;
525  if (s->frame_frac >= 65536) {
526  s->frame_frac -= 65536;
527  s->do_padding = 1;
528  max_frame_size += 8;
529  } else {
530  s->do_padding = 0;
531  }
532 
533  /* compute the header + bit alloc size */
534  current_frame_size = 32;
535  alloc = s->alloc_table;
536  for(i=0;i<s->sblimit;i++) {
537  incr = alloc[0];
538  current_frame_size += incr * s->nb_channels;
539  alloc += 1 << incr;
540  }
541  for(;;) {
542  /* look for the subband with the largest signal to mask ratio */
543  max_sb = -1;
544  max_ch = -1;
545  max_smr = INT_MIN;
546  for(ch=0;ch<s->nb_channels;ch++) {
547  for(i=0;i<s->sblimit;i++) {
548  if (smr[ch][i] > max_smr && subband_status[ch][i] != SB_NOMORE) {
549  max_smr = smr[ch][i];
550  max_sb = i;
551  max_ch = ch;
552  }
553  }
554  }
555  if (max_sb < 0)
556  break;
557  av_dlog(NULL, "current=%d max=%d max_sb=%d max_ch=%d alloc=%d\n",
558  current_frame_size, max_frame_size, max_sb, max_ch,
559  bit_alloc[max_ch][max_sb]);
560 
561  /* find alloc table entry (XXX: not optimal, should use
562  pointer table) */
563  alloc = s->alloc_table;
564  for(i=0;i<max_sb;i++) {
565  alloc += 1 << alloc[0];
566  }
567 
568  if (subband_status[max_ch][max_sb] == SB_NOTALLOCATED) {
569  /* nothing was coded for this band: add the necessary bits */
570  incr = 2 + nb_scale_factors[s->scale_code[max_ch][max_sb]] * 6;
571  incr += s->total_quant_bits[alloc[1]];
572  } else {
573  /* increments bit allocation */
574  b = bit_alloc[max_ch][max_sb];
575  incr = s->total_quant_bits[alloc[b + 1]] -
576  s->total_quant_bits[alloc[b]];
577  }
578 
579  if (current_frame_size + incr <= max_frame_size) {
580  /* can increase size */
581  b = ++bit_alloc[max_ch][max_sb];
582  current_frame_size += incr;
583  /* decrease smr by the resolution we added */
584  smr[max_ch][max_sb] = smr1[max_ch][max_sb] - quant_snr[alloc[b]];
585  /* max allocation size reached ? */
586  if (b == ((1 << alloc[0]) - 1))
587  subband_status[max_ch][max_sb] = SB_NOMORE;
588  else
589  subband_status[max_ch][max_sb] = SB_ALLOCATED;
590  } else {
591  /* cannot increase the size of this subband */
592  subband_status[max_ch][max_sb] = SB_NOMORE;
593  }
594  }
595  *padding = max_frame_size - current_frame_size;
596  av_assert0(*padding >= 0);
597 }
598 
599 /*
600  * Output the mpeg audio layer 2 frame. Note how the code is small
601  * compared to other encoders :-)
602  */
604  unsigned char bit_alloc[MPA_MAX_CHANNELS][SBLIMIT],
605  int padding)
606 {
607  int i, j, k, l, bit_alloc_bits, b, ch;
608  unsigned char *sf;
609  int q[3];
610  PutBitContext *p = &s->pb;
611 
612  /* header */
613 
614  put_bits(p, 12, 0xfff);
615  put_bits(p, 1, 1 - s->lsf); /* 1 = mpeg1 ID, 0 = mpeg2 lsf ID */
616  put_bits(p, 2, 4-2); /* layer 2 */
617  put_bits(p, 1, 1); /* no error protection */
618  put_bits(p, 4, s->bitrate_index);
619  put_bits(p, 2, s->freq_index);
620  put_bits(p, 1, s->do_padding); /* use padding */
621  put_bits(p, 1, 0); /* private_bit */
622  put_bits(p, 2, s->nb_channels == 2 ? MPA_STEREO : MPA_MONO);
623  put_bits(p, 2, 0); /* mode_ext */
624  put_bits(p, 1, 0); /* no copyright */
625  put_bits(p, 1, 1); /* original */
626  put_bits(p, 2, 0); /* no emphasis */
627 
628  /* bit allocation */
629  j = 0;
630  for(i=0;i<s->sblimit;i++) {
631  bit_alloc_bits = s->alloc_table[j];
632  for(ch=0;ch<s->nb_channels;ch++) {
633  put_bits(p, bit_alloc_bits, bit_alloc[ch][i]);
634  }
635  j += 1 << bit_alloc_bits;
636  }
637 
638  /* scale codes */
639  for(i=0;i<s->sblimit;i++) {
640  for(ch=0;ch<s->nb_channels;ch++) {
641  if (bit_alloc[ch][i])
642  put_bits(p, 2, s->scale_code[ch][i]);
643  }
644  }
645 
646  /* scale factors */
647  for(i=0;i<s->sblimit;i++) {
648  for(ch=0;ch<s->nb_channels;ch++) {
649  if (bit_alloc[ch][i]) {
650  sf = &s->scale_factors[ch][i][0];
651  switch(s->scale_code[ch][i]) {
652  case 0:
653  put_bits(p, 6, sf[0]);
654  put_bits(p, 6, sf[1]);
655  put_bits(p, 6, sf[2]);
656  break;
657  case 3:
658  case 1:
659  put_bits(p, 6, sf[0]);
660  put_bits(p, 6, sf[2]);
661  break;
662  case 2:
663  put_bits(p, 6, sf[0]);
664  break;
665  }
666  }
667  }
668  }
669 
670  /* quantization & write sub band samples */
671 
672  for(k=0;k<3;k++) {
673  for(l=0;l<12;l+=3) {
674  j = 0;
675  for(i=0;i<s->sblimit;i++) {
676  bit_alloc_bits = s->alloc_table[j];
677  for(ch=0;ch<s->nb_channels;ch++) {
678  b = bit_alloc[ch][i];
679  if (b) {
680  int qindex, steps, m, sample, bits;
681  /* we encode 3 sub band samples of the same sub band at a time */
682  qindex = s->alloc_table[j+b];
683  steps = ff_mpa_quant_steps[qindex];
684  for(m=0;m<3;m++) {
685  sample = s->sb_samples[ch][k][l + m][i];
686  /* divide by scale factor */
687 #ifdef USE_FLOATS
688  {
689  float a;
690  a = (float)sample * s->scale_factor_inv_table[s->scale_factors[ch][i][k]];
691  q[m] = (int)((a + 1.0) * steps * 0.5);
692  }
693 #else
694  {
695  int q1, e, shift, mult;
696  e = s->scale_factors[ch][i][k];
697  shift = s->scale_factor_shift[e];
698  mult = s->scale_factor_mult[e];
699 
700  /* normalize to P bits */
701  if (shift < 0)
702  q1 = sample << (-shift);
703  else
704  q1 = sample >> shift;
705  q1 = (q1 * mult) >> P;
706  q[m] = ((q1 + (1 << P)) * steps) >> (P + 1);
707  if (q[m] < 0)
708  q[m] = 0;
709  }
710 #endif
711  if (q[m] >= steps)
712  q[m] = steps - 1;
713  av_assert2(q[m] >= 0 && q[m] < steps);
714  }
715  bits = ff_mpa_quant_bits[qindex];
716  if (bits < 0) {
717  /* group the 3 values to save bits */
718  put_bits(p, -bits,
719  q[0] + steps * (q[1] + steps * q[2]));
720  } else {
721  put_bits(p, bits, q[0]);
722  put_bits(p, bits, q[1]);
723  put_bits(p, bits, q[2]);
724  }
725  }
726  }
727  /* next subband in alloc table */
728  j += 1 << bit_alloc_bits;
729  }
730  }
731  }
732 
733  /* padding */
734  for(i=0;i<padding;i++)
735  put_bits(p, 1, 0);
736 
737  /* flush */
738  flush_put_bits(p);
739 }
740 
741 static int MPA_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
742  const AVFrame *frame, int *got_packet_ptr)
743 {
744  MpegAudioContext *s = avctx->priv_data;
745  const int16_t *samples = (const int16_t *)frame->data[0];
746  short smr[MPA_MAX_CHANNELS][SBLIMIT];
747  unsigned char bit_alloc[MPA_MAX_CHANNELS][SBLIMIT];
748  int padding, i, ret;
749 
750  for(i=0;i<s->nb_channels;i++) {
751  filter(s, i, samples + i, s->nb_channels);
752  }
753 
754  for(i=0;i<s->nb_channels;i++) {
756  s->sb_samples[i], s->sblimit);
757  }
758  for(i=0;i<s->nb_channels;i++) {
759  psycho_acoustic_model(s, smr[i]);
760  }
761  compute_bit_allocation(s, smr, bit_alloc, &padding);
762 
763  if ((ret = ff_alloc_packet2(avctx, avpkt, MPA_MAX_CODED_FRAME_SIZE)) < 0)
764  return ret;
765 
766  init_put_bits(&s->pb, avpkt->data, avpkt->size);
767 
768  encode_frame(s, bit_alloc, padding);
769 
770  if (frame->pts != AV_NOPTS_VALUE)
771  avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->delay);
772 
773  avpkt->size = put_bits_count(&s->pb) / 8;
774  *got_packet_ptr = 1;
775  return 0;
776 }
777 
778 static const AVCodecDefault mp2_defaults[] = {
779  { "b", "128k" },
780  { NULL },
781 };
782 
784  .name = "mp2",
785  .long_name = NULL_IF_CONFIG_SMALL("MP2 (MPEG audio layer 2)"),
786  .type = AVMEDIA_TYPE_AUDIO,
787  .id = AV_CODEC_ID_MP2,
788  .priv_data_size = sizeof(MpegAudioContext),
790  .encode2 = MPA_encode_frame,
791  .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
793  .supported_samplerates = (const int[]){
794  44100, 48000, 32000, 22050, 24000, 16000, 0
795  },
796  .channel_layouts = (const uint64_t[]){ AV_CH_LAYOUT_MONO,
798  0 },
799  .defaults = mp2_defaults,
800 };