Coverage Report

Created: 2026-02-14 06:59

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