Coverage Report

Created: 2026-01-16 07:48

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/ffmpeg/libavcodec/mpegaudiodec_template.c
Line
Count
Source
1
/*
2
 * MPEG Audio decoder
3
 * Copyright (c) 2001, 2002 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
 * MPEG Audio decoder
25
 */
26
27
#include "config_components.h"
28
29
#include "libavutil/attributes.h"
30
#include "libavutil/avassert.h"
31
#include "libavutil/channel_layout.h"
32
#include "libavutil/crc.h"
33
#include "libavutil/float_dsp.h"
34
#include "libavutil/libm.h"
35
#include "libavutil/mem.h"
36
#include "libavutil/mem_internal.h"
37
#include "libavutil/thread.h"
38
39
#include "avcodec.h"
40
#include "decode.h"
41
#include "get_bits.h"
42
#include "mathops.h"
43
#include "mpegaudiodsp.h"
44
45
/*
46
 * TODO:
47
 *  - test lsf / mpeg25 extensively.
48
 */
49
50
#include "mpegaudio.h"
51
#include "mpegaudiodecheader.h"
52
53
6.20M
#define BACKSTEP_SIZE 512
54
#define EXTRABYTES 24
55
#define LAST_BUF_SIZE 2 * BACKSTEP_SIZE + EXTRABYTES
56
57
/* layer 3 "granule" */
58
typedef struct GranuleDef {
59
    uint8_t scfsi;
60
    int part2_3_length;
61
    int big_values;
62
    int global_gain;
63
    int scalefac_compress;
64
    uint8_t block_type;
65
    uint8_t switch_point;
66
    int table_select[3];
67
    int subblock_gain[3];
68
    uint8_t scalefac_scale;
69
    uint8_t count1table_select;
70
    int region_size[3]; /* number of huffman codes in each region */
71
    int preflag;
72
    int short_start, long_end; /* long/short band indexes */
73
    uint8_t scale_factors[40];
74
    DECLARE_ALIGNED(16, INTFLOAT, sb_hybrid)[SBLIMIT * 18]; /* 576 samples */
75
} GranuleDef;
76
77
typedef struct MPADecodeContext {
78
    MPA_DECODE_HEADER
79
    uint8_t last_buf[LAST_BUF_SIZE];
80
    int last_buf_size;
81
    int extrasize;
82
    /* next header (used in free format parsing) */
83
    uint32_t free_format_next_header;
84
    GetBitContext gb;
85
    GetBitContext in_gb;
86
    DECLARE_ALIGNED(32, MPA_INT, synth_buf)[MPA_MAX_CHANNELS][512 * 2];
87
    int synth_buf_offset[MPA_MAX_CHANNELS];
88
    DECLARE_ALIGNED(32, INTFLOAT, sb_samples)[MPA_MAX_CHANNELS][36][SBLIMIT];
89
    INTFLOAT mdct_buf[MPA_MAX_CHANNELS][SBLIMIT * 18]; /* previous samples, for layer 3 MDCT */
90
    GranuleDef granules[2][2]; /* Used in Layer 3 */
91
    int adu_mode; ///< 0 for standard mp3, 1 for adu formatted mp3
92
    int dither_state;
93
    int err_recognition;
94
    AVCodecContext* avctx;
95
    MPADSPContext mpadsp;
96
    void (*butterflies_float)(float *restrict v1, float *restrict v2, int len);
97
    AVFrame *frame;
98
    uint32_t crc;
99
} MPADecodeContext;
100
101
20.0M
#define HEADER_SIZE 4
102
103
#include "mpegaudiodata.h"
104
105
#include "mpegaudio_tablegen.h"
106
/* intensity stereo coef table */
107
static INTFLOAT is_table_lsf[2][2][16];
108
109
/* [i][j]:  2^(-j/3) * FRAC_ONE * 2^(i+2) / (2^(i+2) - 1) */
110
static int32_t scale_factor_mult[15][3];
111
/* mult table for layer 2 group quantization */
112
113
#define SCALE_GEN(v) \
114
{ FIXR_OLD(1.0 * (v)), FIXR_OLD(0.7937005259 * (v)), FIXR_OLD(0.6299605249 * (v)) }
115
116
static const int32_t scale_factor_mult2[3][3] = {
117
    SCALE_GEN(4.0 / 3.0), /* 3 steps */
118
    SCALE_GEN(4.0 / 5.0), /* 5 steps */
119
    SCALE_GEN(4.0 / 9.0), /* 9 steps */
120
};
121
122
/**
123
 * Convert region offsets to region sizes and truncate
124
 * size to big_values.
125
 */
126
static void region_offset2size(GranuleDef *g)
127
6.89M
{
128
6.89M
    int i, k, j = 0;
129
6.89M
    g->region_size[2] = 576 / 2;
130
27.5M
    for (i = 0; i < 3; i++) {
131
20.6M
        k = FFMIN(g->region_size[i], g->big_values);
132
20.6M
        g->region_size[i] = k - j;
133
20.6M
        j = k;
134
20.6M
    }
135
6.89M
}
mpegaudiodec_float.c:region_offset2size
Line
Count
Source
127
3.66M
{
128
3.66M
    int i, k, j = 0;
129
3.66M
    g->region_size[2] = 576 / 2;
130
14.6M
    for (i = 0; i < 3; i++) {
131
11.0M
        k = FFMIN(g->region_size[i], g->big_values);
132
11.0M
        g->region_size[i] = k - j;
133
11.0M
        j = k;
134
11.0M
    }
135
3.66M
}
mpegaudiodec_fixed.c:region_offset2size
Line
Count
Source
127
3.23M
{
128
3.23M
    int i, k, j = 0;
129
3.23M
    g->region_size[2] = 576 / 2;
130
12.9M
    for (i = 0; i < 3; i++) {
131
9.69M
        k = FFMIN(g->region_size[i], g->big_values);
132
9.69M
        g->region_size[i] = k - j;
133
9.69M
        j = k;
134
9.69M
    }
135
3.23M
}
136
137
static void init_short_region(MPADecodeContext *s, GranuleDef *g)
138
3.68M
{
139
3.68M
    if (g->block_type == 2) {
140
1.27M
        if (s->sample_rate_index != 8)
141
1.27M
            g->region_size[0] = (36 / 2);
142
6.61k
        else
143
6.61k
            g->region_size[0] = (72 / 2);
144
2.40M
    } else {
145
2.40M
        if (s->sample_rate_index <= 2)
146
22.3k
            g->region_size[0] = (36 / 2);
147
2.38M
        else if (s->sample_rate_index != 8)
148
2.37M
            g->region_size[0] = (54 / 2);
149
7.83k
        else
150
7.83k
            g->region_size[0] = (108 / 2);
151
2.40M
    }
152
3.68M
    g->region_size[1] = (576 / 2);
153
3.68M
}
mpegaudiodec_float.c:init_short_region
Line
Count
Source
138
2.10M
{
139
2.10M
    if (g->block_type == 2) {
140
822k
        if (s->sample_rate_index != 8)
141
819k
            g->region_size[0] = (36 / 2);
142
2.94k
        else
143
2.94k
            g->region_size[0] = (72 / 2);
144
1.28M
    } else {
145
1.28M
        if (s->sample_rate_index <= 2)
146
11.2k
            g->region_size[0] = (36 / 2);
147
1.27M
        else if (s->sample_rate_index != 8)
148
1.26M
            g->region_size[0] = (54 / 2);
149
4.14k
        else
150
4.14k
            g->region_size[0] = (108 / 2);
151
1.28M
    }
152
2.10M
    g->region_size[1] = (576 / 2);
153
2.10M
}
mpegaudiodec_fixed.c:init_short_region
Line
Count
Source
138
1.57M
{
139
1.57M
    if (g->block_type == 2) {
140
456k
        if (s->sample_rate_index != 8)
141
452k
            g->region_size[0] = (36 / 2);
142
3.67k
        else
143
3.67k
            g->region_size[0] = (72 / 2);
144
1.12M
    } else {
145
1.12M
        if (s->sample_rate_index <= 2)
146
11.0k
            g->region_size[0] = (36 / 2);
147
1.11M
        else if (s->sample_rate_index != 8)
148
1.10M
            g->region_size[0] = (54 / 2);
149
3.69k
        else
150
3.69k
            g->region_size[0] = (108 / 2);
151
1.12M
    }
152
1.57M
    g->region_size[1] = (576 / 2);
153
1.57M
}
154
155
static void init_long_region(MPADecodeContext *s, GranuleDef *g,
156
                             int ra1, int ra2)
157
3.21M
{
158
3.21M
    int l;
159
3.21M
    g->region_size[0] = ff_band_index_long[s->sample_rate_index][ra1 + 1];
160
    /* should not overflow */
161
3.21M
    l = FFMIN(ra1 + ra2 + 2, 22);
162
3.21M
    g->region_size[1] = ff_band_index_long[s->sample_rate_index][      l];
163
3.21M
}
mpegaudiodec_float.c:init_long_region
Line
Count
Source
157
1.56M
{
158
1.56M
    int l;
159
1.56M
    g->region_size[0] = ff_band_index_long[s->sample_rate_index][ra1 + 1];
160
    /* should not overflow */
161
1.56M
    l = FFMIN(ra1 + ra2 + 2, 22);
162
1.56M
    g->region_size[1] = ff_band_index_long[s->sample_rate_index][      l];
163
1.56M
}
mpegaudiodec_fixed.c:init_long_region
Line
Count
Source
157
1.65M
{
158
1.65M
    int l;
159
1.65M
    g->region_size[0] = ff_band_index_long[s->sample_rate_index][ra1 + 1];
160
    /* should not overflow */
161
1.65M
    l = FFMIN(ra1 + ra2 + 2, 22);
162
1.65M
    g->region_size[1] = ff_band_index_long[s->sample_rate_index][      l];
163
1.65M
}
164
165
static void compute_band_indexes(MPADecodeContext *s, GranuleDef *g)
166
6.89M
{
167
6.89M
    if (g->block_type == 2) {
168
1.27M
        if (g->switch_point) {
169
1.16M
            if(s->sample_rate_index == 8)
170
5.92k
                avpriv_request_sample(s->avctx, "switch point in 8khz");
171
            /* if switched mode, we handle the 36 first samples as
172
                long blocks.  For 8000Hz, we handle the 72 first
173
                exponents as long blocks */
174
1.16M
            if (s->sample_rate_index <= 2)
175
31.4k
                g->long_end = 8;
176
1.13M
            else
177
1.13M
                g->long_end = 6;
178
179
1.16M
            g->short_start = 3;
180
1.16M
        } else {
181
116k
            g->long_end    = 0;
182
116k
            g->short_start = 0;
183
116k
        }
184
5.62M
    } else {
185
5.62M
        g->short_start = 13;
186
5.62M
        g->long_end    = 22;
187
5.62M
    }
188
6.89M
}
mpegaudiodec_float.c:compute_band_indexes
Line
Count
Source
166
3.66M
{
167
3.66M
    if (g->block_type == 2) {
168
822k
        if (g->switch_point) {
169
726k
            if(s->sample_rate_index == 8)
170
2.72k
                avpriv_request_sample(s->avctx, "switch point in 8khz");
171
            /* if switched mode, we handle the 36 first samples as
172
                long blocks.  For 8000Hz, we handle the 72 first
173
                exponents as long blocks */
174
726k
            if (s->sample_rate_index <= 2)
175
16.2k
                g->long_end = 8;
176
710k
            else
177
710k
                g->long_end = 6;
178
179
726k
            g->short_start = 3;
180
726k
        } else {
181
95.0k
            g->long_end    = 0;
182
95.0k
            g->short_start = 0;
183
95.0k
        }
184
2.84M
    } else {
185
2.84M
        g->short_start = 13;
186
2.84M
        g->long_end    = 22;
187
2.84M
    }
188
3.66M
}
mpegaudiodec_fixed.c:compute_band_indexes
Line
Count
Source
166
3.23M
{
167
3.23M
    if (g->block_type == 2) {
168
456k
        if (g->switch_point) {
169
435k
            if(s->sample_rate_index == 8)
170
3.19k
                avpriv_request_sample(s->avctx, "switch point in 8khz");
171
            /* if switched mode, we handle the 36 first samples as
172
                long blocks.  For 8000Hz, we handle the 72 first
173
                exponents as long blocks */
174
435k
            if (s->sample_rate_index <= 2)
175
15.1k
                g->long_end = 8;
176
419k
            else
177
419k
                g->long_end = 6;
178
179
435k
            g->short_start = 3;
180
435k
        } else {
181
21.4k
            g->long_end    = 0;
182
21.4k
            g->short_start = 0;
183
21.4k
        }
184
2.77M
    } else {
185
2.77M
        g->short_start = 13;
186
2.77M
        g->long_end    = 22;
187
2.77M
    }
188
3.23M
}
189
190
/* layer 1 unscaling */
191
/* n = number of bits of the mantissa minus 1 */
192
static inline int l1_unscale(int n, int mant, int scale_factor)
193
277M
{
194
277M
    int shift, mod;
195
277M
    int64_t val;
196
197
277M
    shift   = ff_scale_factor_modshift[scale_factor];
198
277M
    mod     = shift & 3;
199
277M
    shift >>= 2;
200
277M
    val     = MUL64((int)(mant + (-1U << n) + 1), scale_factor_mult[n-1][mod]);
201
277M
    shift  += n;
202
    /* NOTE: at this point, 1 <= shift >= 21 + 15 */
203
277M
    return (int)((val + (1LL << (shift - 1))) >> shift);
204
277M
}
mpegaudiodec_float.c:l1_unscale
Line
Count
Source
193
150M
{
194
150M
    int shift, mod;
195
150M
    int64_t val;
196
197
150M
    shift   = ff_scale_factor_modshift[scale_factor];
198
150M
    mod     = shift & 3;
199
150M
    shift >>= 2;
200
150M
    val     = MUL64((int)(mant + (-1U << n) + 1), scale_factor_mult[n-1][mod]);
201
150M
    shift  += n;
202
    /* NOTE: at this point, 1 <= shift >= 21 + 15 */
203
150M
    return (int)((val + (1LL << (shift - 1))) >> shift);
204
150M
}
mpegaudiodec_fixed.c:l1_unscale
Line
Count
Source
193
127M
{
194
127M
    int shift, mod;
195
127M
    int64_t val;
196
197
127M
    shift   = ff_scale_factor_modshift[scale_factor];
198
127M
    mod     = shift & 3;
199
127M
    shift >>= 2;
200
127M
    val     = MUL64((int)(mant + (-1U << n) + 1), scale_factor_mult[n-1][mod]);
201
127M
    shift  += n;
202
    /* NOTE: at this point, 1 <= shift >= 21 + 15 */
203
127M
    return (int)((val + (1LL << (shift - 1))) >> shift);
204
127M
}
205
206
static inline int l2_unscale_group(int steps, int mant, int scale_factor)
207
14.7M
{
208
14.7M
    int shift, mod, val;
209
210
14.7M
    shift   = ff_scale_factor_modshift[scale_factor];
211
14.7M
    mod     = shift & 3;
212
14.7M
    shift >>= 2;
213
214
14.7M
    val = (mant - (steps >> 1)) * scale_factor_mult2[steps >> 2][mod];
215
    /* NOTE: at this point, 0 <= shift <= 21 */
216
14.7M
    if (shift > 0)
217
6.20M
        val = (val + (1 << (shift - 1))) >> shift;
218
14.7M
    return val;
219
14.7M
}
mpegaudiodec_float.c:l2_unscale_group
Line
Count
Source
207
8.16M
{
208
8.16M
    int shift, mod, val;
209
210
8.16M
    shift   = ff_scale_factor_modshift[scale_factor];
211
8.16M
    mod     = shift & 3;
212
8.16M
    shift >>= 2;
213
214
8.16M
    val = (mant - (steps >> 1)) * scale_factor_mult2[steps >> 2][mod];
215
    /* NOTE: at this point, 0 <= shift <= 21 */
216
8.16M
    if (shift > 0)
217
2.61M
        val = (val + (1 << (shift - 1))) >> shift;
218
8.16M
    return val;
219
8.16M
}
mpegaudiodec_fixed.c:l2_unscale_group
Line
Count
Source
207
6.62M
{
208
6.62M
    int shift, mod, val;
209
210
6.62M
    shift   = ff_scale_factor_modshift[scale_factor];
211
6.62M
    mod     = shift & 3;
212
6.62M
    shift >>= 2;
213
214
6.62M
    val = (mant - (steps >> 1)) * scale_factor_mult2[steps >> 2][mod];
215
    /* NOTE: at this point, 0 <= shift <= 21 */
216
6.62M
    if (shift > 0)
217
3.59M
        val = (val + (1 << (shift - 1))) >> shift;
218
6.62M
    return val;
219
6.62M
}
220
221
/* compute value^(4/3) * 2^(exponent/4). It normalized to FRAC_BITS */
222
static inline int l3_unscale(int value, int exponent)
223
1.18M
{
224
1.18M
    unsigned int m;
225
1.18M
    int e;
226
227
1.18M
    e  = ff_table_4_3_exp  [4 * value + (exponent & 3)];
228
1.18M
    m  = ff_table_4_3_value[4 * value + (exponent & 3)];
229
1.18M
    e -= exponent >> 2;
230
#ifdef DEBUG
231
    if(e < 1)
232
        av_log(NULL, AV_LOG_WARNING, "l3_unscale: e is %d\n", e);
233
#endif
234
1.18M
    if (e > (SUINT)31)
235
654k
        return 0;
236
527k
    m = (m + ((1U << e) >> 1)) >> e;
237
238
527k
    return m;
239
1.18M
}
mpegaudiodec_float.c:l3_unscale
Line
Count
Source
223
723k
{
224
723k
    unsigned int m;
225
723k
    int e;
226
227
723k
    e  = ff_table_4_3_exp  [4 * value + (exponent & 3)];
228
723k
    m  = ff_table_4_3_value[4 * value + (exponent & 3)];
229
723k
    e -= exponent >> 2;
230
#ifdef DEBUG
231
    if(e < 1)
232
        av_log(NULL, AV_LOG_WARNING, "l3_unscale: e is %d\n", e);
233
#endif
234
723k
    if (e > (SUINT)31)
235
411k
        return 0;
236
311k
    m = (m + ((1U << e) >> 1)) >> e;
237
238
311k
    return m;
239
723k
}
mpegaudiodec_fixed.c:l3_unscale
Line
Count
Source
223
458k
{
224
458k
    unsigned int m;
225
458k
    int e;
226
227
458k
    e  = ff_table_4_3_exp  [4 * value + (exponent & 3)];
228
458k
    m  = ff_table_4_3_value[4 * value + (exponent & 3)];
229
458k
    e -= exponent >> 2;
230
#ifdef DEBUG
231
    if(e < 1)
232
        av_log(NULL, AV_LOG_WARNING, "l3_unscale: e is %d\n", e);
233
#endif
234
458k
    if (e > (SUINT)31)
235
242k
        return 0;
236
215k
    m = (m + ((1U << e) >> 1)) >> e;
237
238
215k
    return m;
239
458k
}
240
241
static av_cold void decode_init_static(void)
242
11
{
243
11
    int i, j;
244
245
    /* scale factor multiply for layer 1 */
246
176
    for (i = 0; i < 15; i++) {
247
165
        int n, norm;
248
165
        n = i + 2;
249
165
        norm = ((INT64_C(1) << n) * FRAC_ONE) / ((1 << n) - 1);
250
165
        scale_factor_mult[i][0] = MULLx(norm, FIXR(1.0          * 2.0), FRAC_BITS);
251
165
        scale_factor_mult[i][1] = MULLx(norm, FIXR(0.7937005259 * 2.0), FRAC_BITS);
252
165
        scale_factor_mult[i][2] = MULLx(norm, FIXR(0.6299605249 * 2.0), FRAC_BITS);
253
165
        ff_dlog(NULL, "%d: norm=%x s=%"PRIx32" %"PRIx32" %"PRIx32"\n", i,
254
165
                (unsigned)norm,
255
165
                scale_factor_mult[i][0],
256
165
                scale_factor_mult[i][1],
257
165
                scale_factor_mult[i][2]);
258
165
    }
259
260
    /* compute n ^ (4/3) and store it in mantissa/exp format */
261
262
11
    mpegaudio_tableinit();
263
264
187
    for (i = 0; i < 16; i++) {
265
176
        double f;
266
176
        int e, k;
267
268
528
        for (j = 0; j < 2; j++) {
269
352
            e = -(j + 1) * ((i + 1) >> 1);
270
352
            f = exp2(e / 4.0);
271
352
            k = i & 1;
272
352
            is_table_lsf[j][k ^ 1][i] = FIXR(f);
273
352
            is_table_lsf[j][k    ][i] = FIXR(1.0);
274
352
            ff_dlog(NULL, "is_table_lsf %d %d: %f %f\n",
275
352
                    i, j, (float) is_table_lsf[j][0][i],
276
352
                    (float) is_table_lsf[j][1][i]);
277
352
        }
278
176
    }
279
11
    RENAME(ff_mpa_synth_init)();
280
11
    ff_mpegaudiodec_common_init_static();
281
11
}
mpegaudiodec_float.c:decode_init_static
Line
Count
Source
242
6
{
243
6
    int i, j;
244
245
    /* scale factor multiply for layer 1 */
246
96
    for (i = 0; i < 15; i++) {
247
90
        int n, norm;
248
90
        n = i + 2;
249
90
        norm = ((INT64_C(1) << n) * FRAC_ONE) / ((1 << n) - 1);
250
90
        scale_factor_mult[i][0] = MULLx(norm, FIXR(1.0          * 2.0), FRAC_BITS);
251
90
        scale_factor_mult[i][1] = MULLx(norm, FIXR(0.7937005259 * 2.0), FRAC_BITS);
252
90
        scale_factor_mult[i][2] = MULLx(norm, FIXR(0.6299605249 * 2.0), FRAC_BITS);
253
90
        ff_dlog(NULL, "%d: norm=%x s=%"PRIx32" %"PRIx32" %"PRIx32"\n", i,
254
90
                (unsigned)norm,
255
90
                scale_factor_mult[i][0],
256
90
                scale_factor_mult[i][1],
257
90
                scale_factor_mult[i][2]);
258
90
    }
259
260
    /* compute n ^ (4/3) and store it in mantissa/exp format */
261
262
6
    mpegaudio_tableinit();
263
264
102
    for (i = 0; i < 16; i++) {
265
96
        double f;
266
96
        int e, k;
267
268
288
        for (j = 0; j < 2; j++) {
269
192
            e = -(j + 1) * ((i + 1) >> 1);
270
192
            f = exp2(e / 4.0);
271
192
            k = i & 1;
272
192
            is_table_lsf[j][k ^ 1][i] = FIXR(f);
273
192
            is_table_lsf[j][k    ][i] = FIXR(1.0);
274
192
            ff_dlog(NULL, "is_table_lsf %d %d: %f %f\n",
275
192
                    i, j, (float) is_table_lsf[j][0][i],
276
192
                    (float) is_table_lsf[j][1][i]);
277
192
        }
278
96
    }
279
6
    RENAME(ff_mpa_synth_init)();
280
6
    ff_mpegaudiodec_common_init_static();
281
6
}
mpegaudiodec_fixed.c:decode_init_static
Line
Count
Source
242
5
{
243
5
    int i, j;
244
245
    /* scale factor multiply for layer 1 */
246
80
    for (i = 0; i < 15; i++) {
247
75
        int n, norm;
248
75
        n = i + 2;
249
75
        norm = ((INT64_C(1) << n) * FRAC_ONE) / ((1 << n) - 1);
250
75
        scale_factor_mult[i][0] = MULLx(norm, FIXR(1.0          * 2.0), FRAC_BITS);
251
75
        scale_factor_mult[i][1] = MULLx(norm, FIXR(0.7937005259 * 2.0), FRAC_BITS);
252
75
        scale_factor_mult[i][2] = MULLx(norm, FIXR(0.6299605249 * 2.0), FRAC_BITS);
253
75
        ff_dlog(NULL, "%d: norm=%x s=%"PRIx32" %"PRIx32" %"PRIx32"\n", i,
254
75
                (unsigned)norm,
255
75
                scale_factor_mult[i][0],
256
75
                scale_factor_mult[i][1],
257
75
                scale_factor_mult[i][2]);
258
75
    }
259
260
    /* compute n ^ (4/3) and store it in mantissa/exp format */
261
262
5
    mpegaudio_tableinit();
263
264
85
    for (i = 0; i < 16; i++) {
265
80
        double f;
266
80
        int e, k;
267
268
240
        for (j = 0; j < 2; j++) {
269
160
            e = -(j + 1) * ((i + 1) >> 1);
270
160
            f = exp2(e / 4.0);
271
160
            k = i & 1;
272
160
            is_table_lsf[j][k ^ 1][i] = FIXR(f);
273
160
            is_table_lsf[j][k    ][i] = FIXR(1.0);
274
160
            ff_dlog(NULL, "is_table_lsf %d %d: %f %f\n",
275
160
                    i, j, (float) is_table_lsf[j][0][i],
276
160
                    (float) is_table_lsf[j][1][i]);
277
160
        }
278
80
    }
279
5
    RENAME(ff_mpa_synth_init)();
280
5
    ff_mpegaudiodec_common_init_static();
281
5
}
282
283
static av_cold int decode_ctx_init(AVCodecContext *avctx, MPADecodeContext *s)
284
32.6k
{
285
32.6k
    static AVOnce init_static_once = AV_ONCE_INIT;
286
287
32.6k
    s->avctx = avctx;
288
289
#if USE_FLOATS
290
    {
291
        AVFloatDSPContext *fdsp;
292
16.8k
        fdsp = avpriv_float_dsp_alloc(avctx->flags & AV_CODEC_FLAG_BITEXACT);
293
16.8k
        if (!fdsp)
294
0
            return AVERROR(ENOMEM);
295
16.8k
        s->butterflies_float = fdsp->butterflies_float;
296
16.8k
        av_free(fdsp);
297
16.8k
    }
298
0
#endif
299
300
0
    ff_mpadsp_init(&s->mpadsp);
301
302
32.6k
    if (avctx->request_sample_fmt == OUT_FMT &&
303
0
        avctx->codec_id != AV_CODEC_ID_MP3ON4)
304
0
        avctx->sample_fmt = OUT_FMT;
305
32.6k
    else
306
32.6k
        avctx->sample_fmt = OUT_FMT_P;
307
16.8k
    s->err_recognition = avctx->err_recognition;
308
309
32.6k
    if (avctx->codec_id == AV_CODEC_ID_MP3ADU)
310
7.58k
        s->adu_mode = 1;
311
312
32.6k
    ff_thread_once(&init_static_once, decode_init_static);
313
314
16.8k
    return 0;
315
32.6k
}
mpegaudiodec_float.c:decode_ctx_init
Line
Count
Source
284
16.8k
{
285
16.8k
    static AVOnce init_static_once = AV_ONCE_INIT;
286
287
16.8k
    s->avctx = avctx;
288
289
16.8k
#if USE_FLOATS
290
16.8k
    {
291
16.8k
        AVFloatDSPContext *fdsp;
292
16.8k
        fdsp = avpriv_float_dsp_alloc(avctx->flags & AV_CODEC_FLAG_BITEXACT);
293
16.8k
        if (!fdsp)
294
0
            return AVERROR(ENOMEM);
295
16.8k
        s->butterflies_float = fdsp->butterflies_float;
296
16.8k
        av_free(fdsp);
297
16.8k
    }
298
0
#endif
299
300
0
    ff_mpadsp_init(&s->mpadsp);
301
302
16.8k
    if (avctx->request_sample_fmt == OUT_FMT &&
303
0
        avctx->codec_id != AV_CODEC_ID_MP3ON4)
304
0
        avctx->sample_fmt = OUT_FMT;
305
16.8k
    else
306
16.8k
        avctx->sample_fmt = OUT_FMT_P;
307
16.8k
    s->err_recognition = avctx->err_recognition;
308
309
16.8k
    if (avctx->codec_id == AV_CODEC_ID_MP3ADU)
310
3.73k
        s->adu_mode = 1;
311
312
16.8k
    ff_thread_once(&init_static_once, decode_init_static);
313
314
16.8k
    return 0;
315
16.8k
}
mpegaudiodec_fixed.c:decode_ctx_init
Line
Count
Source
284
15.8k
{
285
15.8k
    static AVOnce init_static_once = AV_ONCE_INIT;
286
287
15.8k
    s->avctx = avctx;
288
289
#if USE_FLOATS
290
    {
291
        AVFloatDSPContext *fdsp;
292
        fdsp = avpriv_float_dsp_alloc(avctx->flags & AV_CODEC_FLAG_BITEXACT);
293
        if (!fdsp)
294
            return AVERROR(ENOMEM);
295
        s->butterflies_float = fdsp->butterflies_float;
296
        av_free(fdsp);
297
    }
298
#endif
299
300
15.8k
    ff_mpadsp_init(&s->mpadsp);
301
302
15.8k
    if (avctx->request_sample_fmt == OUT_FMT &&
303
0
        avctx->codec_id != AV_CODEC_ID_MP3ON4)
304
0
        avctx->sample_fmt = OUT_FMT;
305
15.8k
    else
306
15.8k
        avctx->sample_fmt = OUT_FMT_P;
307
15.8k
    s->err_recognition = avctx->err_recognition;
308
309
15.8k
    if (avctx->codec_id == AV_CODEC_ID_MP3ADU)
310
3.84k
        s->adu_mode = 1;
311
312
15.8k
    ff_thread_once(&init_static_once, decode_init_static);
313
314
15.8k
    return 0;
315
15.8k
}
316
317
static av_cold int decode_init(AVCodecContext *avctx)
318
30.5k
{
319
30.5k
    return decode_ctx_init(avctx, avctx->priv_data);
320
30.5k
}
mpegaudiodec_float.c:decode_init
Line
Count
Source
318
15.7k
{
319
15.7k
    return decode_ctx_init(avctx, avctx->priv_data);
320
15.7k
}
mpegaudiodec_fixed.c:decode_init
Line
Count
Source
318
14.7k
{
319
14.7k
    return decode_ctx_init(avctx, avctx->priv_data);
320
14.7k
}
321
322
#define C3 FIXHR(0.86602540378443864676/2)
323
#define C4 FIXHR(0.70710678118654752439/2) //0.5 / cos(pi*(9)/36)
324
#define C5 FIXHR(0.51763809020504152469/2) //0.5 / cos(pi*(5)/36)
325
#define C6 FIXHR(1.93185165257813657349/4) //0.5 / cos(pi*(15)/36)
326
327
/* 12 points IMDCT. We compute it "by hand" by factorizing obvious
328
   cases. */
329
static void imdct12(INTFLOAT *out, SUINTFLOAT *in)
330
1.58M
{
331
1.58M
    SUINTFLOAT in0, in1, in2, in3, in4, in5, t1, t2;
332
333
1.58M
    in0  = in[0*3];
334
1.58M
    in1  = in[1*3] + in[0*3];
335
1.58M
    in2  = in[2*3] + in[1*3];
336
1.58M
    in3  = in[3*3] + in[2*3];
337
1.58M
    in4  = in[4*3] + in[3*3];
338
1.58M
    in5  = in[5*3] + in[4*3];
339
1.58M
    in5 += in3;
340
1.58M
    in3 += in1;
341
342
1.58M
    in2  = MULH3(in2, C3, 2);
343
1.58M
    in3  = MULH3(in3, C3, 4);
344
345
1.58M
    t1   = in0 - in4;
346
1.58M
    t2   = MULH3(in1 - in5, C4, 2);
347
348
1.58M
    out[ 7] =
349
1.58M
    out[10] = t1 + t2;
350
1.58M
    out[ 1] =
351
1.58M
    out[ 4] = t1 - t2;
352
353
1.58M
    in0    += SHR(in4, 1);
354
1.58M
    in4     = in0 + in2;
355
1.58M
    in5    += 2*in1;
356
1.58M
    in1     = MULH3(in5 + in3, C5, 1);
357
1.58M
    out[ 8] =
358
1.58M
    out[ 9] = in4 + in1;
359
1.58M
    out[ 2] =
360
1.58M
    out[ 3] = in4 - in1;
361
362
1.58M
    in0    -= in2;
363
1.58M
    in5     = MULH3(in5 - in3, C6, 2);
364
1.58M
    out[ 0] =
365
1.58M
    out[ 5] = in0 - in5;
366
1.58M
    out[ 6] =
367
1.58M
    out[11] = in0 + in5;
368
1.58M
}
mpegaudiodec_float.c:imdct12
Line
Count
Source
330
1.22M
{
331
1.22M
    SUINTFLOAT in0, in1, in2, in3, in4, in5, t1, t2;
332
333
1.22M
    in0  = in[0*3];
334
1.22M
    in1  = in[1*3] + in[0*3];
335
1.22M
    in2  = in[2*3] + in[1*3];
336
1.22M
    in3  = in[3*3] + in[2*3];
337
1.22M
    in4  = in[4*3] + in[3*3];
338
1.22M
    in5  = in[5*3] + in[4*3];
339
1.22M
    in5 += in3;
340
1.22M
    in3 += in1;
341
342
1.22M
    in2  = MULH3(in2, C3, 2);
343
1.22M
    in3  = MULH3(in3, C3, 4);
344
345
1.22M
    t1   = in0 - in4;
346
1.22M
    t2   = MULH3(in1 - in5, C4, 2);
347
348
1.22M
    out[ 7] =
349
1.22M
    out[10] = t1 + t2;
350
1.22M
    out[ 1] =
351
1.22M
    out[ 4] = t1 - t2;
352
353
1.22M
    in0    += SHR(in4, 1);
354
1.22M
    in4     = in0 + in2;
355
1.22M
    in5    += 2*in1;
356
1.22M
    in1     = MULH3(in5 + in3, C5, 1);
357
1.22M
    out[ 8] =
358
1.22M
    out[ 9] = in4 + in1;
359
1.22M
    out[ 2] =
360
1.22M
    out[ 3] = in4 - in1;
361
362
1.22M
    in0    -= in2;
363
1.22M
    in5     = MULH3(in5 - in3, C6, 2);
364
1.22M
    out[ 0] =
365
1.22M
    out[ 5] = in0 - in5;
366
1.22M
    out[ 6] =
367
1.22M
    out[11] = in0 + in5;
368
1.22M
}
mpegaudiodec_fixed.c:imdct12
Line
Count
Source
330
357k
{
331
357k
    SUINTFLOAT in0, in1, in2, in3, in4, in5, t1, t2;
332
333
357k
    in0  = in[0*3];
334
357k
    in1  = in[1*3] + in[0*3];
335
357k
    in2  = in[2*3] + in[1*3];
336
357k
    in3  = in[3*3] + in[2*3];
337
357k
    in4  = in[4*3] + in[3*3];
338
357k
    in5  = in[5*3] + in[4*3];
339
357k
    in5 += in3;
340
357k
    in3 += in1;
341
342
357k
    in2  = MULH3(in2, C3, 2);
343
357k
    in3  = MULH3(in3, C3, 4);
344
345
357k
    t1   = in0 - in4;
346
357k
    t2   = MULH3(in1 - in5, C4, 2);
347
348
357k
    out[ 7] =
349
357k
    out[10] = t1 + t2;
350
357k
    out[ 1] =
351
357k
    out[ 4] = t1 - t2;
352
353
357k
    in0    += SHR(in4, 1);
354
357k
    in4     = in0 + in2;
355
357k
    in5    += 2*in1;
356
357k
    in1     = MULH3(in5 + in3, C5, 1);
357
357k
    out[ 8] =
358
357k
    out[ 9] = in4 + in1;
359
357k
    out[ 2] =
360
357k
    out[ 3] = in4 - in1;
361
362
357k
    in0    -= in2;
363
357k
    in5     = MULH3(in5 - in3, C6, 2);
364
357k
    out[ 0] =
365
357k
    out[ 5] = in0 - in5;
366
357k
    out[ 6] =
367
357k
    out[11] = in0 + in5;
368
357k
}
369
370
static int handle_crc(MPADecodeContext *s, int sec_len)
371
4.38M
{
372
4.38M
    if (s->error_protection && (s->err_recognition & AV_EF_CRCCHECK)) {
373
470k
        const uint8_t *buf = s->gb.buffer - HEADER_SIZE;
374
470k
        int sec_byte_len  = sec_len >> 3;
375
470k
        int sec_rem_bits  = sec_len & 7;
376
470k
        const AVCRC *crc_tab = av_crc_get_table(AV_CRC_16_ANSI);
377
470k
        uint8_t tmp_buf[4];
378
470k
        uint32_t crc_val = av_crc(crc_tab, UINT16_MAX, &buf[2], 2);
379
470k
        crc_val = av_crc(crc_tab, crc_val, &buf[6], sec_byte_len);
380
381
470k
        AV_WB32(tmp_buf,
382
470k
                ((buf[6 + sec_byte_len] & (0xFF00U >> sec_rem_bits)) << 24) +
383
470k
                ((s->crc << 16) >> sec_rem_bits));
384
385
470k
        crc_val = av_crc(crc_tab, crc_val, tmp_buf, 3);
386
387
470k
        if (crc_val) {
388
468k
            av_log(s->avctx, AV_LOG_ERROR, "CRC mismatch %X!\n", crc_val);
389
468k
            if (s->err_recognition & AV_EF_EXPLODE)
390
13.4k
                return AVERROR_INVALIDDATA;
391
468k
        }
392
470k
    }
393
4.36M
    return 0;
394
4.38M
}
mpegaudiodec_float.c:handle_crc
Line
Count
Source
371
2.50M
{
372
2.50M
    if (s->error_protection && (s->err_recognition & AV_EF_CRCCHECK)) {
373
282k
        const uint8_t *buf = s->gb.buffer - HEADER_SIZE;
374
282k
        int sec_byte_len  = sec_len >> 3;
375
282k
        int sec_rem_bits  = sec_len & 7;
376
282k
        const AVCRC *crc_tab = av_crc_get_table(AV_CRC_16_ANSI);
377
282k
        uint8_t tmp_buf[4];
378
282k
        uint32_t crc_val = av_crc(crc_tab, UINT16_MAX, &buf[2], 2);
379
282k
        crc_val = av_crc(crc_tab, crc_val, &buf[6], sec_byte_len);
380
381
282k
        AV_WB32(tmp_buf,
382
282k
                ((buf[6 + sec_byte_len] & (0xFF00U >> sec_rem_bits)) << 24) +
383
282k
                ((s->crc << 16) >> sec_rem_bits));
384
385
282k
        crc_val = av_crc(crc_tab, crc_val, tmp_buf, 3);
386
387
282k
        if (crc_val) {
388
281k
            av_log(s->avctx, AV_LOG_ERROR, "CRC mismatch %X!\n", crc_val);
389
281k
            if (s->err_recognition & AV_EF_EXPLODE)
390
6.56k
                return AVERROR_INVALIDDATA;
391
281k
        }
392
282k
    }
393
2.49M
    return 0;
394
2.50M
}
mpegaudiodec_fixed.c:handle_crc
Line
Count
Source
371
1.87M
{
372
1.87M
    if (s->error_protection && (s->err_recognition & AV_EF_CRCCHECK)) {
373
187k
        const uint8_t *buf = s->gb.buffer - HEADER_SIZE;
374
187k
        int sec_byte_len  = sec_len >> 3;
375
187k
        int sec_rem_bits  = sec_len & 7;
376
187k
        const AVCRC *crc_tab = av_crc_get_table(AV_CRC_16_ANSI);
377
187k
        uint8_t tmp_buf[4];
378
187k
        uint32_t crc_val = av_crc(crc_tab, UINT16_MAX, &buf[2], 2);
379
187k
        crc_val = av_crc(crc_tab, crc_val, &buf[6], sec_byte_len);
380
381
187k
        AV_WB32(tmp_buf,
382
187k
                ((buf[6 + sec_byte_len] & (0xFF00U >> sec_rem_bits)) << 24) +
383
187k
                ((s->crc << 16) >> sec_rem_bits));
384
385
187k
        crc_val = av_crc(crc_tab, crc_val, tmp_buf, 3);
386
387
187k
        if (crc_val) {
388
186k
            av_log(s->avctx, AV_LOG_ERROR, "CRC mismatch %X!\n", crc_val);
389
186k
            if (s->err_recognition & AV_EF_EXPLODE)
390
6.91k
                return AVERROR_INVALIDDATA;
391
186k
        }
392
187k
    }
393
1.86M
    return 0;
394
1.87M
}
395
396
/* return the number of decoded frames */
397
static int mp_decode_layer1(MPADecodeContext *s)
398
901k
{
399
901k
    int bound, i, v, n, ch, j, mant;
400
901k
    uint8_t allocation[MPA_MAX_CHANNELS][SBLIMIT];
401
901k
    uint8_t scale_factors[MPA_MAX_CHANNELS][SBLIMIT];
402
901k
    int ret;
403
404
901k
    ret = handle_crc(s, (s->nb_channels == 1) ? 8*16  : 8*32);
405
901k
    if (ret < 0)
406
3.80k
        return ret;
407
408
897k
    if (s->mode == MPA_JSTEREO)
409
53.7k
        bound = (s->mode_ext + 1) * 4;
410
844k
    else
411
844k
        bound = SBLIMIT;
412
413
    /* allocation bits */
414
28.3M
    for (i = 0; i < bound; i++) {
415
61.3M
        for (ch = 0; ch < s->nb_channels; ch++) {
416
33.8M
            allocation[ch][i] = get_bits(&s->gb, 4);
417
33.8M
        }
418
27.4M
    }
419
2.20M
    for (i = bound; i < SBLIMIT; i++)
420
1.30M
        allocation[0][i] = get_bits(&s->gb, 4);
421
422
    /* scale factors */
423
28.3M
    for (i = 0; i < bound; i++) {
424
61.3M
        for (ch = 0; ch < s->nb_channels; ch++) {
425
33.8M
            if (allocation[ch][i])
426
21.2M
                scale_factors[ch][i] = get_bits(&s->gb, 6);
427
33.8M
        }
428
27.4M
    }
429
2.20M
    for (i = bound; i < SBLIMIT; i++) {
430
1.30M
        if (allocation[0][i]) {
431
422k
            scale_factors[0][i] = get_bits(&s->gb, 6);
432
422k
            scale_factors[1][i] = get_bits(&s->gb, 6);
433
422k
        }
434
1.30M
    }
435
436
    /* compute samples */
437
11.6M
    for (j = 0; j < 12; j++) {
438
339M
        for (i = 0; i < bound; i++) {
439
735M
            for (ch = 0; ch < s->nb_channels; ch++) {
440
406M
                n = allocation[ch][i];
441
406M
                if (n) {
442
254M
                    mant = get_bits(&s->gb, n + 1);
443
254M
                    v = l1_unscale(n, mant, scale_factors[ch][i]);
444
254M
                } else {
445
151M
                    v = 0;
446
151M
                }
447
406M
                s->sb_samples[ch][j][i] = v;
448
406M
            }
449
329M
        }
450
26.4M
        for (i = bound; i < SBLIMIT; i++) {
451
15.6M
            n = allocation[0][i];
452
15.6M
            if (n) {
453
5.07M
                mant = get_bits(&s->gb, n + 1);
454
5.07M
                v = l1_unscale(n, mant, scale_factors[0][i]);
455
5.07M
                s->sb_samples[0][j][i] = v;
456
5.07M
                v = l1_unscale(n, mant, scale_factors[1][i]);
457
5.07M
                s->sb_samples[1][j][i] = v;
458
10.5M
            } else {
459
10.5M
                s->sb_samples[0][j][i] = 0;
460
10.5M
                s->sb_samples[1][j][i] = 0;
461
10.5M
            }
462
15.6M
        }
463
10.7M
    }
464
897k
    return 12;
465
901k
}
mpegaudiodec_float.c:mp_decode_layer1
Line
Count
Source
398
566k
{
399
566k
    int bound, i, v, n, ch, j, mant;
400
566k
    uint8_t allocation[MPA_MAX_CHANNELS][SBLIMIT];
401
566k
    uint8_t scale_factors[MPA_MAX_CHANNELS][SBLIMIT];
402
566k
    int ret;
403
404
566k
    ret = handle_crc(s, (s->nb_channels == 1) ? 8*16  : 8*32);
405
566k
    if (ret < 0)
406
2.15k
        return ret;
407
408
564k
    if (s->mode == MPA_JSTEREO)
409
37.6k
        bound = (s->mode_ext + 1) * 4;
410
526k
    else
411
526k
        bound = SBLIMIT;
412
413
    /* allocation bits */
414
17.7M
    for (i = 0; i < bound; i++) {
415
39.9M
        for (ch = 0; ch < s->nb_channels; ch++) {
416
22.8M
            allocation[ch][i] = get_bits(&s->gb, 4);
417
22.8M
        }
418
17.1M
    }
419
1.47M
    for (i = bound; i < SBLIMIT; i++)
420
906k
        allocation[0][i] = get_bits(&s->gb, 4);
421
422
    /* scale factors */
423
17.7M
    for (i = 0; i < bound; i++) {
424
39.9M
        for (ch = 0; ch < s->nb_channels; ch++) {
425
22.8M
            if (allocation[ch][i])
426
11.3M
                scale_factors[ch][i] = get_bits(&s->gb, 6);
427
22.8M
        }
428
17.1M
    }
429
1.47M
    for (i = bound; i < SBLIMIT; i++) {
430
906k
        if (allocation[0][i]) {
431
315k
            scale_factors[0][i] = get_bits(&s->gb, 6);
432
315k
            scale_factors[1][i] = get_bits(&s->gb, 6);
433
315k
        }
434
906k
    }
435
436
    /* compute samples */
437
7.33M
    for (j = 0; j < 12; j++) {
438
212M
        for (i = 0; i < bound; i++) {
439
479M
            for (ch = 0; ch < s->nb_channels; ch++) {
440
273M
                n = allocation[ch][i];
441
273M
                if (n) {
442
136M
                    mant = get_bits(&s->gb, n + 1);
443
136M
                    v = l1_unscale(n, mant, scale_factors[ch][i]);
444
137M
                } else {
445
137M
                    v = 0;
446
137M
                }
447
273M
                s->sb_samples[ch][j][i] = v;
448
273M
            }
449
205M
        }
450
17.6M
        for (i = bound; i < SBLIMIT; i++) {
451
10.8M
            n = allocation[0][i];
452
10.8M
            if (n) {
453
3.78M
                mant = get_bits(&s->gb, n + 1);
454
3.78M
                v = l1_unscale(n, mant, scale_factors[0][i]);
455
3.78M
                s->sb_samples[0][j][i] = v;
456
3.78M
                v = l1_unscale(n, mant, scale_factors[1][i]);
457
3.78M
                s->sb_samples[1][j][i] = v;
458
7.09M
            } else {
459
7.09M
                s->sb_samples[0][j][i] = 0;
460
7.09M
                s->sb_samples[1][j][i] = 0;
461
7.09M
            }
462
10.8M
        }
463
6.77M
    }
464
564k
    return 12;
465
566k
}
mpegaudiodec_fixed.c:mp_decode_layer1
Line
Count
Source
398
334k
{
399
334k
    int bound, i, v, n, ch, j, mant;
400
334k
    uint8_t allocation[MPA_MAX_CHANNELS][SBLIMIT];
401
334k
    uint8_t scale_factors[MPA_MAX_CHANNELS][SBLIMIT];
402
334k
    int ret;
403
404
334k
    ret = handle_crc(s, (s->nb_channels == 1) ? 8*16  : 8*32);
405
334k
    if (ret < 0)
406
1.65k
        return ret;
407
408
333k
    if (s->mode == MPA_JSTEREO)
409
16.0k
        bound = (s->mode_ext + 1) * 4;
410
317k
    else
411
317k
        bound = SBLIMIT;
412
413
    /* allocation bits */
414
10.6M
    for (i = 0; i < bound; i++) {
415
21.3M
        for (ch = 0; ch < s->nb_channels; ch++) {
416
11.0M
            allocation[ch][i] = get_bits(&s->gb, 4);
417
11.0M
        }
418
10.2M
    }
419
729k
    for (i = bound; i < SBLIMIT; i++)
420
395k
        allocation[0][i] = get_bits(&s->gb, 4);
421
422
    /* scale factors */
423
10.6M
    for (i = 0; i < bound; i++) {
424
21.3M
        for (ch = 0; ch < s->nb_channels; ch++) {
425
11.0M
            if (allocation[ch][i])
426
9.88M
                scale_factors[ch][i] = get_bits(&s->gb, 6);
427
11.0M
        }
428
10.2M
    }
429
729k
    for (i = bound; i < SBLIMIT; i++) {
430
395k
        if (allocation[0][i]) {
431
107k
            scale_factors[0][i] = get_bits(&s->gb, 6);
432
107k
            scale_factors[1][i] = get_bits(&s->gb, 6);
433
107k
        }
434
395k
    }
435
436
    /* compute samples */
437
4.33M
    for (j = 0; j < 12; j++) {
438
127M
        for (i = 0; i < bound; i++) {
439
256M
            for (ch = 0; ch < s->nb_channels; ch++) {
440
132M
                n = allocation[ch][i];
441
132M
                if (n) {
442
118M
                    mant = get_bits(&s->gb, n + 1);
443
118M
                    v = l1_unscale(n, mant, scale_factors[ch][i]);
444
118M
                } else {
445
14.3M
                    v = 0;
446
14.3M
                }
447
132M
                s->sb_samples[ch][j][i] = v;
448
132M
            }
449
123M
        }
450
8.75M
        for (i = bound; i < SBLIMIT; i++) {
451
4.75M
            n = allocation[0][i];
452
4.75M
            if (n) {
453
1.29M
                mant = get_bits(&s->gb, n + 1);
454
1.29M
                v = l1_unscale(n, mant, scale_factors[0][i]);
455
1.29M
                s->sb_samples[0][j][i] = v;
456
1.29M
                v = l1_unscale(n, mant, scale_factors[1][i]);
457
1.29M
                s->sb_samples[1][j][i] = v;
458
3.45M
            } else {
459
3.45M
                s->sb_samples[0][j][i] = 0;
460
3.45M
                s->sb_samples[1][j][i] = 0;
461
3.45M
            }
462
4.75M
        }
463
3.99M
    }
464
333k
    return 12;
465
334k
}
466
467
static int mp_decode_layer2(MPADecodeContext *s)
468
239k
{
469
239k
    int sblimit; /* number of used subbands */
470
239k
    const unsigned char *alloc_table;
471
239k
    int table, bit_alloc_bits, i, j, ch, bound, v;
472
239k
    unsigned char bit_alloc[MPA_MAX_CHANNELS][SBLIMIT];
473
239k
    unsigned char scale_code[MPA_MAX_CHANNELS][SBLIMIT];
474
239k
    unsigned char scale_factors[MPA_MAX_CHANNELS][SBLIMIT][3], *sf;
475
239k
    int scale, qindex, bits, steps, k, l, m, b;
476
239k
    int ret;
477
478
    /* select decoding table */
479
239k
    table = ff_mpa_l2_select_table(s->bit_rate / 1000, s->nb_channels,
480
239k
                                   s->sample_rate, s->lsf);
481
239k
    sblimit     = ff_mpa_sblimit_table[table];
482
239k
    alloc_table = ff_mpa_alloc_tables[table];
483
484
239k
    if (s->mode == MPA_JSTEREO)
485
162k
        bound = (s->mode_ext + 1) * 4;
486
76.2k
    else
487
76.2k
        bound = sblimit;
488
489
239k
    ff_dlog(s->avctx, "bound=%d sblimit=%d\n", bound, sblimit);
490
491
    /* sanity check */
492
239k
    if (bound > sblimit)
493
57.5k
        bound = sblimit;
494
495
    /* parse bit allocation */
496
239k
    j = 0;
497
3.29M
    for (i = 0; i < bound; i++) {
498
3.05M
        bit_alloc_bits = alloc_table[j];
499
8.87M
        for (ch = 0; ch < s->nb_channels; ch++)
500
5.82M
            bit_alloc[ch][i] = get_bits(&s->gb, bit_alloc_bits);
501
3.05M
        j += 1 << bit_alloc_bits;
502
3.05M
    }
503
1.57M
    for (i = bound; i < sblimit; i++) {
504
1.33M
        bit_alloc_bits = alloc_table[j];
505
1.33M
        v = get_bits(&s->gb, bit_alloc_bits);
506
1.33M
        bit_alloc[0][i] = v;
507
1.33M
        bit_alloc[1][i] = v;
508
1.33M
        j += 1 << bit_alloc_bits;
509
1.33M
    }
510
511
    /* scale codes */
512
4.62M
    for (i = 0; i < sblimit; i++) {
513
12.8M
        for (ch = 0; ch < s->nb_channels; ch++) {
514
8.49M
            if (bit_alloc[ch][i])
515
787k
                scale_code[ch][i] = get_bits(&s->gb, 2);
516
8.49M
        }
517
4.38M
    }
518
519
239k
    ret = handle_crc(s, get_bits_count(&s->gb) - 16);
520
239k
    if (ret < 0)
521
3.69k
        return ret;
522
523
    /* scale factors */
524
4.55M
    for (i = 0; i < sblimit; i++) {
525
12.6M
        for (ch = 0; ch < s->nb_channels; ch++) {
526
8.36M
            if (bit_alloc[ch][i]) {
527
769k
                sf = scale_factors[ch][i];
528
769k
                switch (scale_code[ch][i]) {
529
0
                default:
530
412k
                case 0:
531
412k
                    sf[0] = get_bits(&s->gb, 6);
532
412k
                    sf[1] = get_bits(&s->gb, 6);
533
412k
                    sf[2] = get_bits(&s->gb, 6);
534
412k
                    break;
535
74.7k
                case 2:
536
74.7k
                    sf[0] = get_bits(&s->gb, 6);
537
74.7k
                    sf[1] = sf[0];
538
74.7k
                    sf[2] = sf[0];
539
74.7k
                    break;
540
160k
                case 1:
541
160k
                    sf[0] = get_bits(&s->gb, 6);
542
160k
                    sf[2] = get_bits(&s->gb, 6);
543
160k
                    sf[1] = sf[0];
544
160k
                    break;
545
121k
                case 3:
546
121k
                    sf[0] = get_bits(&s->gb, 6);
547
121k
                    sf[2] = get_bits(&s->gb, 6);
548
121k
                    sf[1] = sf[2];
549
121k
                    break;
550
769k
                }
551
769k
            }
552
8.36M
        }
553
4.31M
    }
554
555
    /* samples */
556
941k
    for (k = 0; k < 3; k++) {
557
3.53M
        for (l = 0; l < 12; l += 3) {
558
2.82M
            j = 0;
559
38.8M
            for (i = 0; i < bound; i++) {
560
36.0M
                bit_alloc_bits = alloc_table[j];
561
104M
                for (ch = 0; ch < s->nb_channels; ch++) {
562
68.8M
                    b = bit_alloc[ch][i];
563
68.8M
                    if (b) {
564
6.70M
                        scale = scale_factors[ch][i][k];
565
6.70M
                        qindex = alloc_table[j+b];
566
6.70M
                        bits = ff_mpa_quant_bits[qindex];
567
6.70M
                        if (bits < 0) {
568
3.06M
                            int v2;
569
                            /* 3 values at the same time */
570
3.06M
                            v = get_bits(&s->gb, -bits);
571
3.06M
                            v2 = ff_division_tabs[qindex][v];
572
3.06M
                            steps  = ff_mpa_quant_steps[qindex];
573
574
3.06M
                            s->sb_samples[ch][k * 12 + l + 0][i] =
575
3.06M
                                l2_unscale_group(steps,  v2       & 15, scale);
576
3.06M
                            s->sb_samples[ch][k * 12 + l + 1][i] =
577
3.06M
                                l2_unscale_group(steps, (v2 >> 4) & 15, scale);
578
3.06M
                            s->sb_samples[ch][k * 12 + l + 2][i] =
579
3.06M
                                l2_unscale_group(steps,  v2 >> 8      , scale);
580
3.64M
                        } else {
581
14.5M
                            for (m = 0; m < 3; m++) {
582
10.9M
                                v = get_bits(&s->gb, bits);
583
10.9M
                                v = l1_unscale(bits - 1, v, scale);
584
10.9M
                                s->sb_samples[ch][k * 12 + l + m][i] = v;
585
10.9M
                            }
586
3.64M
                        }
587
62.1M
                    } else {
588
62.1M
                        s->sb_samples[ch][k * 12 + l + 0][i] = 0;
589
62.1M
                        s->sb_samples[ch][k * 12 + l + 1][i] = 0;
590
62.1M
                        s->sb_samples[ch][k * 12 + l + 2][i] = 0;
591
62.1M
                    }
592
68.8M
                }
593
                /* next subband in alloc table */
594
36.0M
                j += 1 << bit_alloc_bits;
595
36.0M
            }
596
            /* XXX: find a way to avoid this duplication of code */
597
18.6M
            for (i = bound; i < sblimit; i++) {
598
15.7M
                bit_alloc_bits = alloc_table[j];
599
15.7M
                b = bit_alloc[0][i];
600
15.7M
                if (b) {
601
1.26M
                    int mant, scale0, scale1;
602
1.26M
                    scale0 = scale_factors[0][i][k];
603
1.26M
                    scale1 = scale_factors[1][i][k];
604
1.26M
                    qindex = alloc_table[j + b];
605
1.26M
                    bits = ff_mpa_quant_bits[qindex];
606
1.26M
                    if (bits < 0) {
607
                        /* 3 values at the same time */
608
932k
                        v = get_bits(&s->gb, -bits);
609
932k
                        steps = ff_mpa_quant_steps[qindex];
610
932k
                        mant = v % steps;
611
932k
                        v = v / steps;
612
932k
                        s->sb_samples[0][k * 12 + l + 0][i] =
613
932k
                            l2_unscale_group(steps, mant, scale0);
614
932k
                        s->sb_samples[1][k * 12 + l + 0][i] =
615
932k
                            l2_unscale_group(steps, mant, scale1);
616
932k
                        mant = v % steps;
617
932k
                        v = v / steps;
618
932k
                        s->sb_samples[0][k * 12 + l + 1][i] =
619
932k
                            l2_unscale_group(steps, mant, scale0);
620
932k
                        s->sb_samples[1][k * 12 + l + 1][i] =
621
932k
                            l2_unscale_group(steps, mant, scale1);
622
932k
                        s->sb_samples[0][k * 12 + l + 2][i] =
623
932k
                            l2_unscale_group(steps, v, scale0);
624
932k
                        s->sb_samples[1][k * 12 + l + 2][i] =
625
932k
                            l2_unscale_group(steps, v, scale1);
626
932k
                    } else {
627
1.32M
                        for (m = 0; m < 3; m++) {
628
990k
                            mant = get_bits(&s->gb, bits);
629
990k
                            s->sb_samples[0][k * 12 + l + m][i] =
630
990k
                                l1_unscale(bits - 1, mant, scale0);
631
990k
                            s->sb_samples[1][k * 12 + l + m][i] =
632
990k
                                l1_unscale(bits - 1, mant, scale1);
633
990k
                        }
634
330k
                    }
635
14.5M
                } else {
636
14.5M
                    s->sb_samples[0][k * 12 + l + 0][i] = 0;
637
14.5M
                    s->sb_samples[0][k * 12 + l + 1][i] = 0;
638
14.5M
                    s->sb_samples[0][k * 12 + l + 2][i] = 0;
639
14.5M
                    s->sb_samples[1][k * 12 + l + 0][i] = 0;
640
14.5M
                    s->sb_samples[1][k * 12 + l + 1][i] = 0;
641
14.5M
                    s->sb_samples[1][k * 12 + l + 2][i] = 0;
642
14.5M
                }
643
                /* next subband in alloc table */
644
15.7M
                j += 1 << bit_alloc_bits;
645
15.7M
            }
646
            /* fill remaining samples to zero */
647
41.3M
            for (i = sblimit; i < SBLIMIT; i++) {
648
114M
                for (ch = 0; ch < s->nb_channels; ch++) {
649
76.1M
                    s->sb_samples[ch][k * 12 + l + 0][i] = 0;
650
76.1M
                    s->sb_samples[ch][k * 12 + l + 1][i] = 0;
651
76.1M
                    s->sb_samples[ch][k * 12 + l + 2][i] = 0;
652
76.1M
                }
653
38.5M
            }
654
2.82M
        }
655
706k
    }
656
235k
    return 3 * 12;
657
235k
}
mpegaudiodec_float.c:mp_decode_layer2
Line
Count
Source
468
152k
{
469
152k
    int sblimit; /* number of used subbands */
470
152k
    const unsigned char *alloc_table;
471
152k
    int table, bit_alloc_bits, i, j, ch, bound, v;
472
152k
    unsigned char bit_alloc[MPA_MAX_CHANNELS][SBLIMIT];
473
152k
    unsigned char scale_code[MPA_MAX_CHANNELS][SBLIMIT];
474
152k
    unsigned char scale_factors[MPA_MAX_CHANNELS][SBLIMIT][3], *sf;
475
152k
    int scale, qindex, bits, steps, k, l, m, b;
476
152k
    int ret;
477
478
    /* select decoding table */
479
152k
    table = ff_mpa_l2_select_table(s->bit_rate / 1000, s->nb_channels,
480
152k
                                   s->sample_rate, s->lsf);
481
152k
    sblimit     = ff_mpa_sblimit_table[table];
482
152k
    alloc_table = ff_mpa_alloc_tables[table];
483
484
152k
    if (s->mode == MPA_JSTEREO)
485
101k
        bound = (s->mode_ext + 1) * 4;
486
51.2k
    else
487
51.2k
        bound = sblimit;
488
489
152k
    ff_dlog(s->avctx, "bound=%d sblimit=%d\n", bound, sblimit);
490
491
    /* sanity check */
492
152k
    if (bound > sblimit)
493
47.8k
        bound = sblimit;
494
495
    /* parse bit allocation */
496
152k
    j = 0;
497
2.41M
    for (i = 0; i < bound; i++) {
498
2.26M
        bit_alloc_bits = alloc_table[j];
499
6.66M
        for (ch = 0; ch < s->nb_channels; ch++)
500
4.40M
            bit_alloc[ch][i] = get_bits(&s->gb, bit_alloc_bits);
501
2.26M
        j += 1 << bit_alloc_bits;
502
2.26M
    }
503
1.11M
    for (i = bound; i < sblimit; i++) {
504
967k
        bit_alloc_bits = alloc_table[j];
505
967k
        v = get_bits(&s->gb, bit_alloc_bits);
506
967k
        bit_alloc[0][i] = v;
507
967k
        bit_alloc[1][i] = v;
508
967k
        j += 1 << bit_alloc_bits;
509
967k
    }
510
511
    /* scale codes */
512
3.38M
    for (i = 0; i < sblimit; i++) {
513
9.56M
        for (ch = 0; ch < s->nb_channels; ch++) {
514
6.33M
            if (bit_alloc[ch][i])
515
418k
                scale_code[ch][i] = get_bits(&s->gb, 2);
516
6.33M
        }
517
3.22M
    }
518
519
152k
    ret = handle_crc(s, get_bits_count(&s->gb) - 16);
520
152k
    if (ret < 0)
521
2.16k
        return ret;
522
523
    /* scale factors */
524
3.33M
    for (i = 0; i < sblimit; i++) {
525
9.43M
        for (ch = 0; ch < s->nb_channels; ch++) {
526
6.25M
            if (bit_alloc[ch][i]) {
527
407k
                sf = scale_factors[ch][i];
528
407k
                switch (scale_code[ch][i]) {
529
0
                default:
530
254k
                case 0:
531
254k
                    sf[0] = get_bits(&s->gb, 6);
532
254k
                    sf[1] = get_bits(&s->gb, 6);
533
254k
                    sf[2] = get_bits(&s->gb, 6);
534
254k
                    break;
535
37.5k
                case 2:
536
37.5k
                    sf[0] = get_bits(&s->gb, 6);
537
37.5k
                    sf[1] = sf[0];
538
37.5k
                    sf[2] = sf[0];
539
37.5k
                    break;
540
57.6k
                case 1:
541
57.6k
                    sf[0] = get_bits(&s->gb, 6);
542
57.6k
                    sf[2] = get_bits(&s->gb, 6);
543
57.6k
                    sf[1] = sf[0];
544
57.6k
                    break;
545
57.8k
                case 3:
546
57.8k
                    sf[0] = get_bits(&s->gb, 6);
547
57.8k
                    sf[2] = get_bits(&s->gb, 6);
548
57.8k
                    sf[1] = sf[2];
549
57.8k
                    break;
550
407k
                }
551
407k
            }
552
6.25M
        }
553
3.18M
    }
554
555
    /* samples */
556
600k
    for (k = 0; k < 3; k++) {
557
2.25M
        for (l = 0; l < 12; l += 3) {
558
1.80M
            j = 0;
559
28.5M
            for (i = 0; i < bound; i++) {
560
26.7M
                bit_alloc_bits = alloc_table[j];
561
78.8M
                for (ch = 0; ch < s->nb_channels; ch++) {
562
52.1M
                    b = bit_alloc[ch][i];
563
52.1M
                    if (b) {
564
3.57M
                        scale = scale_factors[ch][i][k];
565
3.57M
                        qindex = alloc_table[j+b];
566
3.57M
                        bits = ff_mpa_quant_bits[qindex];
567
3.57M
                        if (bits < 0) {
568
1.70M
                            int v2;
569
                            /* 3 values at the same time */
570
1.70M
                            v = get_bits(&s->gb, -bits);
571
1.70M
                            v2 = ff_division_tabs[qindex][v];
572
1.70M
                            steps  = ff_mpa_quant_steps[qindex];
573
574
1.70M
                            s->sb_samples[ch][k * 12 + l + 0][i] =
575
1.70M
                                l2_unscale_group(steps,  v2       & 15, scale);
576
1.70M
                            s->sb_samples[ch][k * 12 + l + 1][i] =
577
1.70M
                                l2_unscale_group(steps, (v2 >> 4) & 15, scale);
578
1.70M
                            s->sb_samples[ch][k * 12 + l + 2][i] =
579
1.70M
                                l2_unscale_group(steps,  v2 >> 8      , scale);
580
1.86M
                        } else {
581
7.44M
                            for (m = 0; m < 3; m++) {
582
5.58M
                                v = get_bits(&s->gb, bits);
583
5.58M
                                v = l1_unscale(bits - 1, v, scale);
584
5.58M
                                s->sb_samples[ch][k * 12 + l + m][i] = v;
585
5.58M
                            }
586
1.86M
                        }
587
48.5M
                    } else {
588
48.5M
                        s->sb_samples[ch][k * 12 + l + 0][i] = 0;
589
48.5M
                        s->sb_samples[ch][k * 12 + l + 1][i] = 0;
590
48.5M
                        s->sb_samples[ch][k * 12 + l + 2][i] = 0;
591
48.5M
                    }
592
52.1M
                }
593
                /* next subband in alloc table */
594
26.7M
                j += 1 << bit_alloc_bits;
595
26.7M
            }
596
            /* XXX: find a way to avoid this duplication of code */
597
13.2M
            for (i = bound; i < sblimit; i++) {
598
11.4M
                bit_alloc_bits = alloc_table[j];
599
11.4M
                b = bit_alloc[0][i];
600
11.4M
                if (b) {
601
660k
                    int mant, scale0, scale1;
602
660k
                    scale0 = scale_factors[0][i][k];
603
660k
                    scale1 = scale_factors[1][i][k];
604
660k
                    qindex = alloc_table[j + b];
605
660k
                    bits = ff_mpa_quant_bits[qindex];
606
660k
                    if (bits < 0) {
607
                        /* 3 values at the same time */
608
506k
                        v = get_bits(&s->gb, -bits);
609
506k
                        steps = ff_mpa_quant_steps[qindex];
610
506k
                        mant = v % steps;
611
506k
                        v = v / steps;
612
506k
                        s->sb_samples[0][k * 12 + l + 0][i] =
613
506k
                            l2_unscale_group(steps, mant, scale0);
614
506k
                        s->sb_samples[1][k * 12 + l + 0][i] =
615
506k
                            l2_unscale_group(steps, mant, scale1);
616
506k
                        mant = v % steps;
617
506k
                        v = v / steps;
618
506k
                        s->sb_samples[0][k * 12 + l + 1][i] =
619
506k
                            l2_unscale_group(steps, mant, scale0);
620
506k
                        s->sb_samples[1][k * 12 + l + 1][i] =
621
506k
                            l2_unscale_group(steps, mant, scale1);
622
506k
                        s->sb_samples[0][k * 12 + l + 2][i] =
623
506k
                            l2_unscale_group(steps, v, scale0);
624
506k
                        s->sb_samples[1][k * 12 + l + 2][i] =
625
506k
                            l2_unscale_group(steps, v, scale1);
626
506k
                    } else {
627
615k
                        for (m = 0; m < 3; m++) {
628
461k
                            mant = get_bits(&s->gb, bits);
629
461k
                            s->sb_samples[0][k * 12 + l + m][i] =
630
461k
                                l1_unscale(bits - 1, mant, scale0);
631
461k
                            s->sb_samples[1][k * 12 + l + m][i] =
632
461k
                                l1_unscale(bits - 1, mant, scale1);
633
461k
                        }
634
153k
                    }
635
10.8M
                } else {
636
10.8M
                    s->sb_samples[0][k * 12 + l + 0][i] = 0;
637
10.8M
                    s->sb_samples[0][k * 12 + l + 1][i] = 0;
638
10.8M
                    s->sb_samples[0][k * 12 + l + 2][i] = 0;
639
10.8M
                    s->sb_samples[1][k * 12 + l + 0][i] = 0;
640
10.8M
                    s->sb_samples[1][k * 12 + l + 1][i] = 0;
641
10.8M
                    s->sb_samples[1][k * 12 + l + 2][i] = 0;
642
10.8M
                }
643
                /* next subband in alloc table */
644
11.4M
                j += 1 << bit_alloc_bits;
645
11.4M
            }
646
            /* fill remaining samples to zero */
647
21.2M
            for (i = sblimit; i < SBLIMIT; i++) {
648
57.9M
                for (ch = 0; ch < s->nb_channels; ch++) {
649
38.5M
                    s->sb_samples[ch][k * 12 + l + 0][i] = 0;
650
38.5M
                    s->sb_samples[ch][k * 12 + l + 1][i] = 0;
651
38.5M
                    s->sb_samples[ch][k * 12 + l + 2][i] = 0;
652
38.5M
                }
653
19.4M
            }
654
1.80M
        }
655
450k
    }
656
150k
    return 3 * 12;
657
150k
}
mpegaudiodec_fixed.c:mp_decode_layer2
Line
Count
Source
468
86.7k
{
469
86.7k
    int sblimit; /* number of used subbands */
470
86.7k
    const unsigned char *alloc_table;
471
86.7k
    int table, bit_alloc_bits, i, j, ch, bound, v;
472
86.7k
    unsigned char bit_alloc[MPA_MAX_CHANNELS][SBLIMIT];
473
86.7k
    unsigned char scale_code[MPA_MAX_CHANNELS][SBLIMIT];
474
86.7k
    unsigned char scale_factors[MPA_MAX_CHANNELS][SBLIMIT][3], *sf;
475
86.7k
    int scale, qindex, bits, steps, k, l, m, b;
476
86.7k
    int ret;
477
478
    /* select decoding table */
479
86.7k
    table = ff_mpa_l2_select_table(s->bit_rate / 1000, s->nb_channels,
480
86.7k
                                   s->sample_rate, s->lsf);
481
86.7k
    sblimit     = ff_mpa_sblimit_table[table];
482
86.7k
    alloc_table = ff_mpa_alloc_tables[table];
483
484
86.7k
    if (s->mode == MPA_JSTEREO)
485
61.6k
        bound = (s->mode_ext + 1) * 4;
486
25.0k
    else
487
25.0k
        bound = sblimit;
488
489
86.7k
    ff_dlog(s->avctx, "bound=%d sblimit=%d\n", bound, sblimit);
490
491
    /* sanity check */
492
86.7k
    if (bound > sblimit)
493
9.69k
        bound = sblimit;
494
495
    /* parse bit allocation */
496
86.7k
    j = 0;
497
876k
    for (i = 0; i < bound; i++) {
498
789k
        bit_alloc_bits = alloc_table[j];
499
2.21M
        for (ch = 0; ch < s->nb_channels; ch++)
500
1.42M
            bit_alloc[ch][i] = get_bits(&s->gb, bit_alloc_bits);
501
789k
        j += 1 << bit_alloc_bits;
502
789k
    }
503
454k
    for (i = bound; i < sblimit; i++) {
504
367k
        bit_alloc_bits = alloc_table[j];
505
367k
        v = get_bits(&s->gb, bit_alloc_bits);
506
367k
        bit_alloc[0][i] = v;
507
367k
        bit_alloc[1][i] = v;
508
367k
        j += 1 << bit_alloc_bits;
509
367k
    }
510
511
    /* scale codes */
512
1.24M
    for (i = 0; i < sblimit; i++) {
513
3.31M
        for (ch = 0; ch < s->nb_channels; ch++) {
514
2.15M
            if (bit_alloc[ch][i])
515
369k
                scale_code[ch][i] = get_bits(&s->gb, 2);
516
2.15M
        }
517
1.15M
    }
518
519
86.7k
    ret = handle_crc(s, get_bits_count(&s->gb) - 16);
520
86.7k
    if (ret < 0)
521
1.52k
        return ret;
522
523
    /* scale factors */
524
1.21M
    for (i = 0; i < sblimit; i++) {
525
3.24M
        for (ch = 0; ch < s->nb_channels; ch++) {
526
2.11M
            if (bit_alloc[ch][i]) {
527
361k
                sf = scale_factors[ch][i];
528
361k
                switch (scale_code[ch][i]) {
529
0
                default:
530
157k
                case 0:
531
157k
                    sf[0] = get_bits(&s->gb, 6);
532
157k
                    sf[1] = get_bits(&s->gb, 6);
533
157k
                    sf[2] = get_bits(&s->gb, 6);
534
157k
                    break;
535
37.2k
                case 2:
536
37.2k
                    sf[0] = get_bits(&s->gb, 6);
537
37.2k
                    sf[1] = sf[0];
538
37.2k
                    sf[2] = sf[0];
539
37.2k
                    break;
540
103k
                case 1:
541
103k
                    sf[0] = get_bits(&s->gb, 6);
542
103k
                    sf[2] = get_bits(&s->gb, 6);
543
103k
                    sf[1] = sf[0];
544
103k
                    break;
545
63.7k
                case 3:
546
63.7k
                    sf[0] = get_bits(&s->gb, 6);
547
63.7k
                    sf[2] = get_bits(&s->gb, 6);
548
63.7k
                    sf[1] = sf[2];
549
63.7k
                    break;
550
361k
                }
551
361k
            }
552
2.11M
        }
553
1.13M
    }
554
555
    /* samples */
556
340k
    for (k = 0; k < 3; k++) {
557
1.27M
        for (l = 0; l < 12; l += 3) {
558
1.02M
            j = 0;
559
10.2M
            for (i = 0; i < bound; i++) {
560
9.26M
                bit_alloc_bits = alloc_table[j];
561
25.9M
                for (ch = 0; ch < s->nb_channels; ch++) {
562
16.7M
                    b = bit_alloc[ch][i];
563
16.7M
                    if (b) {
564
3.13M
                        scale = scale_factors[ch][i][k];
565
3.13M
                        qindex = alloc_table[j+b];
566
3.13M
                        bits = ff_mpa_quant_bits[qindex];
567
3.13M
                        if (bits < 0) {
568
1.35M
                            int v2;
569
                            /* 3 values at the same time */
570
1.35M
                            v = get_bits(&s->gb, -bits);
571
1.35M
                            v2 = ff_division_tabs[qindex][v];
572
1.35M
                            steps  = ff_mpa_quant_steps[qindex];
573
574
1.35M
                            s->sb_samples[ch][k * 12 + l + 0][i] =
575
1.35M
                                l2_unscale_group(steps,  v2       & 15, scale);
576
1.35M
                            s->sb_samples[ch][k * 12 + l + 1][i] =
577
1.35M
                                l2_unscale_group(steps, (v2 >> 4) & 15, scale);
578
1.35M
                            s->sb_samples[ch][k * 12 + l + 2][i] =
579
1.35M
                                l2_unscale_group(steps,  v2 >> 8      , scale);
580
1.78M
                        } else {
581
7.12M
                            for (m = 0; m < 3; m++) {
582
5.34M
                                v = get_bits(&s->gb, bits);
583
5.34M
                                v = l1_unscale(bits - 1, v, scale);
584
5.34M
                                s->sb_samples[ch][k * 12 + l + m][i] = v;
585
5.34M
                            }
586
1.78M
                        }
587
13.5M
                    } else {
588
13.5M
                        s->sb_samples[ch][k * 12 + l + 0][i] = 0;
589
13.5M
                        s->sb_samples[ch][k * 12 + l + 1][i] = 0;
590
13.5M
                        s->sb_samples[ch][k * 12 + l + 2][i] = 0;
591
13.5M
                    }
592
16.7M
                }
593
                /* next subband in alloc table */
594
9.26M
                j += 1 << bit_alloc_bits;
595
9.26M
            }
596
            /* XXX: find a way to avoid this duplication of code */
597
5.35M
            for (i = bound; i < sblimit; i++) {
598
4.32M
                bit_alloc_bits = alloc_table[j];
599
4.32M
                b = bit_alloc[0][i];
600
4.32M
                if (b) {
601
601k
                    int mant, scale0, scale1;
602
601k
                    scale0 = scale_factors[0][i][k];
603
601k
                    scale1 = scale_factors[1][i][k];
604
601k
                    qindex = alloc_table[j + b];
605
601k
                    bits = ff_mpa_quant_bits[qindex];
606
601k
                    if (bits < 0) {
607
                        /* 3 values at the same time */
608
425k
                        v = get_bits(&s->gb, -bits);
609
425k
                        steps = ff_mpa_quant_steps[qindex];
610
425k
                        mant = v % steps;
611
425k
                        v = v / steps;
612
425k
                        s->sb_samples[0][k * 12 + l + 0][i] =
613
425k
                            l2_unscale_group(steps, mant, scale0);
614
425k
                        s->sb_samples[1][k * 12 + l + 0][i] =
615
425k
                            l2_unscale_group(steps, mant, scale1);
616
425k
                        mant = v % steps;
617
425k
                        v = v / steps;
618
425k
                        s->sb_samples[0][k * 12 + l + 1][i] =
619
425k
                            l2_unscale_group(steps, mant, scale0);
620
425k
                        s->sb_samples[1][k * 12 + l + 1][i] =
621
425k
                            l2_unscale_group(steps, mant, scale1);
622
425k
                        s->sb_samples[0][k * 12 + l + 2][i] =
623
425k
                            l2_unscale_group(steps, v, scale0);
624
425k
                        s->sb_samples[1][k * 12 + l + 2][i] =
625
425k
                            l2_unscale_group(steps, v, scale1);
626
425k
                    } else {
627
704k
                        for (m = 0; m < 3; m++) {
628
528k
                            mant = get_bits(&s->gb, bits);
629
528k
                            s->sb_samples[0][k * 12 + l + m][i] =
630
528k
                                l1_unscale(bits - 1, mant, scale0);
631
528k
                            s->sb_samples[1][k * 12 + l + m][i] =
632
528k
                                l1_unscale(bits - 1, mant, scale1);
633
528k
                        }
634
176k
                    }
635
3.72M
                } else {
636
3.72M
                    s->sb_samples[0][k * 12 + l + 0][i] = 0;
637
3.72M
                    s->sb_samples[0][k * 12 + l + 1][i] = 0;
638
3.72M
                    s->sb_samples[0][k * 12 + l + 2][i] = 0;
639
3.72M
                    s->sb_samples[1][k * 12 + l + 0][i] = 0;
640
3.72M
                    s->sb_samples[1][k * 12 + l + 1][i] = 0;
641
3.72M
                    s->sb_samples[1][k * 12 + l + 2][i] = 0;
642
3.72M
                }
643
                /* next subband in alloc table */
644
4.32M
                j += 1 << bit_alloc_bits;
645
4.32M
            }
646
            /* fill remaining samples to zero */
647
20.1M
            for (i = sblimit; i < SBLIMIT; i++) {
648
56.7M
                for (ch = 0; ch < s->nb_channels; ch++) {
649
37.6M
                    s->sb_samples[ch][k * 12 + l + 0][i] = 0;
650
37.6M
                    s->sb_samples[ch][k * 12 + l + 1][i] = 0;
651
37.6M
                    s->sb_samples[ch][k * 12 + l + 2][i] = 0;
652
37.6M
                }
653
19.1M
            }
654
1.02M
        }
655
255k
    }
656
85.1k
    return 3 * 12;
657
85.1k
}
658
659
#define SPLIT(dst,sf,n)             \
660
11.0M
    if (n == 3) {                   \
661
24.0k
        int m = (sf * 171) >> 9;    \
662
24.0k
        dst   = sf - 3 * m;         \
663
24.0k
        sf    = m;                  \
664
11.0M
    } else if (n == 4) {            \
665
4.18M
        dst  = sf & 3;              \
666
4.18M
        sf >>= 2;                   \
667
6.87M
    } else if (n == 5) {            \
668
2.29M
        int m = (sf * 205) >> 10;   \
669
2.29M
        dst   = sf - 5 * m;         \
670
2.29M
        sf    = m;                  \
671
4.57M
    } else if (n == 6) {            \
672
2.55M
        int m = (sf * 171) >> 10;   \
673
2.55M
        dst   = sf - 6 * m;         \
674
2.55M
        sf    = m;                  \
675
2.55M
    } else {                        \
676
2.01M
        dst = 0;                    \
677
2.01M
    }
678
679
static av_always_inline void lsf_sf_expand(int *slen, int sf, int n1, int n2,
680
                                           int n3)
681
3.69M
{
682
3.69M
    SPLIT(slen[3], sf, n3)
683
3.69M
    SPLIT(slen[2], sf, n2)
684
3.69M
    SPLIT(slen[1], sf, n1)
685
3.69M
    slen[0] = sf;
686
3.69M
}
mpegaudiodec_float.c:lsf_sf_expand
Line
Count
Source
681
2.02M
{
682
2.02M
    SPLIT(slen[3], sf, n3)
683
2.02M
    SPLIT(slen[2], sf, n2)
684
2.02M
    SPLIT(slen[1], sf, n1)
685
2.02M
    slen[0] = sf;
686
2.02M
}
mpegaudiodec_fixed.c:lsf_sf_expand
Line
Count
Source
681
1.66M
{
682
1.66M
    SPLIT(slen[3], sf, n3)
683
1.66M
    SPLIT(slen[2], sf, n2)
684
1.66M
    SPLIT(slen[1], sf, n1)
685
1.66M
    slen[0] = sf;
686
1.66M
}
687
688
static void exponents_from_scale_factors(MPADecodeContext *s, GranuleDef *g,
689
                                         int16_t *exponents)
690
4.93M
{
691
4.93M
    const uint8_t *bstab, *pretab;
692
4.93M
    int len, i, j, k, l, v0, shift, gain, gains[3];
693
4.93M
    int16_t *exp_ptr;
694
695
4.93M
    exp_ptr = exponents;
696
4.93M
    gain    = g->global_gain - 210;
697
4.93M
    shift   = g->scalefac_scale + 1;
698
699
4.93M
    bstab  = ff_band_size_long[s->sample_rate_index];
700
4.93M
    pretab = ff_mpa_pretab[g->preflag];
701
100M
    for (i = 0; i < g->long_end; i++) {
702
95.1M
        v0 = gain - ((g->scale_factors[i] + pretab[i]) << shift) + 400;
703
95.1M
        len = bstab[i];
704
2.49G
        for (j = len; j > 0; j--)
705
2.40G
            *exp_ptr++ = v0;
706
95.1M
    }
707
708
4.93M
    if (g->short_start < 13) {
709
810k
        bstab    = ff_band_size_short[s->sample_rate_index];
710
810k
        gains[0] = gain - (g->subblock_gain[0] << 3);
711
810k
        gains[1] = gain - (g->subblock_gain[1] << 3);
712
810k
        gains[2] = gain - (g->subblock_gain[2] << 3);
713
810k
        k        = g->long_end;
714
9.17M
        for (i = g->short_start; i < 13; i++) {
715
8.35M
            len = bstab[i];
716
33.4M
            for (l = 0; l < 3; l++) {
717
25.0M
                v0 = gains[l] - (g->scale_factors[k++] << shift) + 400;
718
465M
                for (j = len; j > 0; j--)
719
440M
                    *exp_ptr++ = v0;
720
25.0M
            }
721
8.35M
        }
722
810k
    }
723
4.93M
}
mpegaudiodec_float.c:exponents_from_scale_factors
Line
Count
Source
690
2.48M
{
691
2.48M
    const uint8_t *bstab, *pretab;
692
2.48M
    int len, i, j, k, l, v0, shift, gain, gains[3];
693
2.48M
    int16_t *exp_ptr;
694
695
2.48M
    exp_ptr = exponents;
696
2.48M
    gain    = g->global_gain - 210;
697
2.48M
    shift   = g->scalefac_scale + 1;
698
699
2.48M
    bstab  = ff_band_size_long[s->sample_rate_index];
700
2.48M
    pretab = ff_mpa_pretab[g->preflag];
701
48.4M
    for (i = 0; i < g->long_end; i++) {
702
45.9M
        v0 = gain - ((g->scale_factors[i] + pretab[i]) << shift) + 400;
703
45.9M
        len = bstab[i];
704
1.19G
        for (j = len; j > 0; j--)
705
1.14G
            *exp_ptr++ = v0;
706
45.9M
    }
707
708
2.48M
    if (g->short_start < 13) {
709
527k
        bstab    = ff_band_size_short[s->sample_rate_index];
710
527k
        gains[0] = gain - (g->subblock_gain[0] << 3);
711
527k
        gains[1] = gain - (g->subblock_gain[1] << 3);
712
527k
        gains[2] = gain - (g->subblock_gain[2] << 3);
713
527k
        k        = g->long_end;
714
6.00M
        for (i = g->short_start; i < 13; i++) {
715
5.47M
            len = bstab[i];
716
21.9M
            for (l = 0; l < 3; l++) {
717
16.4M
                v0 = gains[l] - (g->scale_factors[k++] << shift) + 400;
718
303M
                for (j = len; j > 0; j--)
719
287M
                    *exp_ptr++ = v0;
720
16.4M
            }
721
5.47M
        }
722
527k
    }
723
2.48M
}
mpegaudiodec_fixed.c:exponents_from_scale_factors
Line
Count
Source
690
2.44M
{
691
2.44M
    const uint8_t *bstab, *pretab;
692
2.44M
    int len, i, j, k, l, v0, shift, gain, gains[3];
693
2.44M
    int16_t *exp_ptr;
694
695
2.44M
    exp_ptr = exponents;
696
2.44M
    gain    = g->global_gain - 210;
697
2.44M
    shift   = g->scalefac_scale + 1;
698
699
2.44M
    bstab  = ff_band_size_long[s->sample_rate_index];
700
2.44M
    pretab = ff_mpa_pretab[g->preflag];
701
51.6M
    for (i = 0; i < g->long_end; i++) {
702
49.2M
        v0 = gain - ((g->scale_factors[i] + pretab[i]) << shift) + 400;
703
49.2M
        len = bstab[i];
704
1.30G
        for (j = len; j > 0; j--)
705
1.25G
            *exp_ptr++ = v0;
706
49.2M
    }
707
708
2.44M
    if (g->short_start < 13) {
709
282k
        bstab    = ff_band_size_short[s->sample_rate_index];
710
282k
        gains[0] = gain - (g->subblock_gain[0] << 3);
711
282k
        gains[1] = gain - (g->subblock_gain[1] << 3);
712
282k
        gains[2] = gain - (g->subblock_gain[2] << 3);
713
282k
        k        = g->long_end;
714
3.16M
        for (i = g->short_start; i < 13; i++) {
715
2.88M
            len = bstab[i];
716
11.5M
            for (l = 0; l < 3; l++) {
717
8.64M
                v0 = gains[l] - (g->scale_factors[k++] << shift) + 400;
718
161M
                for (j = len; j > 0; j--)
719
153M
                    *exp_ptr++ = v0;
720
8.64M
            }
721
2.88M
        }
722
282k
    }
723
2.44M
}
724
725
static void switch_buffer(MPADecodeContext *s, int *pos, int *end_pos,
726
                          int *end_pos2)
727
11.7M
{
728
11.7M
    if (s->in_gb.buffer && *pos >= s->gb.size_in_bits - s->extrasize * 8) {
729
1.18M
        s->gb           = s->in_gb;
730
1.18M
        s->in_gb.buffer = NULL;
731
1.18M
        s->extrasize    = 0;
732
1.18M
        av_assert2((get_bits_count(&s->gb) & 7) == 0);
733
1.18M
        skip_bits_long(&s->gb, *pos - *end_pos);
734
1.18M
        *end_pos2 =
735
1.18M
        *end_pos  = *end_pos2 + get_bits_count(&s->gb) - *pos;
736
1.18M
        *pos      = get_bits_count(&s->gb);
737
1.18M
    }
738
11.7M
}
mpegaudiodec_float.c:switch_buffer
Line
Count
Source
727
5.97M
{
728
5.97M
    if (s->in_gb.buffer && *pos >= s->gb.size_in_bits - s->extrasize * 8) {
729
721k
        s->gb           = s->in_gb;
730
721k
        s->in_gb.buffer = NULL;
731
721k
        s->extrasize    = 0;
732
721k
        av_assert2((get_bits_count(&s->gb) & 7) == 0);
733
721k
        skip_bits_long(&s->gb, *pos - *end_pos);
734
721k
        *end_pos2 =
735
721k
        *end_pos  = *end_pos2 + get_bits_count(&s->gb) - *pos;
736
721k
        *pos      = get_bits_count(&s->gb);
737
721k
    }
738
5.97M
}
mpegaudiodec_fixed.c:switch_buffer
Line
Count
Source
727
5.77M
{
728
5.77M
    if (s->in_gb.buffer && *pos >= s->gb.size_in_bits - s->extrasize * 8) {
729
466k
        s->gb           = s->in_gb;
730
466k
        s->in_gb.buffer = NULL;
731
466k
        s->extrasize    = 0;
732
466k
        av_assert2((get_bits_count(&s->gb) & 7) == 0);
733
466k
        skip_bits_long(&s->gb, *pos - *end_pos);
734
466k
        *end_pos2 =
735
466k
        *end_pos  = *end_pos2 + get_bits_count(&s->gb) - *pos;
736
466k
        *pos      = get_bits_count(&s->gb);
737
466k
    }
738
5.77M
}
739
740
/* Following is an optimized code for
741
            INTFLOAT v = *src
742
            if(get_bits1(&s->gb))
743
                v = -v;
744
            *dst = v;
745
*/
746
#if USE_FLOATS
747
#define READ_FLIP_SIGN(dst,src)                     \
748
8.41M
    v = AV_RN32A(src) ^ (get_bits1(&s->gb) << 31);  \
749
8.41M
    AV_WN32A(dst, v);
750
#else
751
#define READ_FLIP_SIGN(dst,src)     \
752
3.91M
    v      = -get_bits1(&s->gb);    \
753
3.91M
    *(dst) = (*(src) ^ v) - v;
754
#endif
755
756
static int huffman_decode(MPADecodeContext *s, GranuleDef *g,
757
                          int16_t *exponents, int end_pos2)
758
4.93M
{
759
4.93M
    int s_index;
760
4.93M
    int i;
761
4.93M
    int last_pos, bits_left;
762
4.93M
    VLC *vlc;
763
4.93M
    int end_pos = FFMIN(end_pos2, s->gb.size_in_bits - s->extrasize * 8);
764
765
    /* low frequencies (called big values) */
766
4.93M
    s_index = 0;
767
19.7M
    for (i = 0; i < 3; i++) {
768
14.8M
        const VLCElem *vlctab;
769
14.8M
        int j, k, l, linbits;
770
14.8M
        j = g->region_size[i];
771
14.8M
        if (j == 0)
772
10.1M
            continue;
773
        /* select vlc table */
774
4.68M
        k       = g->table_select[i];
775
4.68M
        l       = ff_mpa_huff_data[k][0];
776
4.68M
        linbits = ff_mpa_huff_data[k][1];
777
778
4.68M
        if (!l) {
779
2.70M
            memset(&g->sb_hybrid[s_index], 0, sizeof(*g->sb_hybrid) * 2 * j);
780
2.70M
            s_index += 2 * j;
781
2.70M
            continue;
782
2.70M
        }
783
1.97M
        vlctab  = ff_huff_vlc[l];
784
785
        /* read huffcode and compute each couple */
786
5.44M
        for (; j > 0; j--) {
787
5.37M
            int exponent, x, y;
788
5.37M
            int v;
789
5.37M
            int pos = get_bits_count(&s->gb);
790
791
5.37M
            if (pos >= end_pos){
792
1.92M
                switch_buffer(s, &pos, &end_pos, &end_pos2);
793
1.92M
                if (pos >= end_pos)
794
1.91M
                    break;
795
1.92M
            }
796
3.46M
            y = get_vlc2(&s->gb, vlctab, 7, 3);
797
798
3.46M
            if (!y) {
799
1.04M
                g->sb_hybrid[s_index    ] =
800
1.04M
                g->sb_hybrid[s_index + 1] = 0;
801
1.04M
                s_index += 2;
802
1.04M
                continue;
803
1.04M
            }
804
805
2.41M
            exponent= exponents[s_index];
806
807
2.41M
            ff_dlog(s->avctx, "region=%d n=%d y=%d exp=%d\n",
808
2.41M
                    i, g->region_size[i] - j, y, exponent);
809
2.41M
            if (y & 16) {
810
1.98M
                x = y >> 5;
811
1.98M
                y = y & 0x0f;
812
1.98M
                if (x < 15) {
813
1.75M
                    READ_FLIP_SIGN(g->sb_hybrid + s_index, RENAME(expval_table)[exponent] + x)
814
1.75M
                } else {
815
233k
                    x += get_bitsz(&s->gb, linbits);
816
233k
                    v  = l3_unscale(x, exponent);
817
233k
                    if (get_bits1(&s->gb))
818
43.4k
                        v = -v;
819
233k
                    g->sb_hybrid[s_index] = v;
820
233k
                }
821
1.98M
                if (y < 15) {
822
1.07M
                    READ_FLIP_SIGN(g->sb_hybrid + s_index + 1, RENAME(expval_table)[exponent] + y)
823
1.07M
                } else {
824
914k
                    y += get_bitsz(&s->gb, linbits);
825
914k
                    v  = l3_unscale(y, exponent);
826
914k
                    if (get_bits1(&s->gb))
827
59.7k
                        v = -v;
828
914k
                    g->sb_hybrid[s_index + 1] = v;
829
914k
                }
830
1.98M
            } else {
831
430k
                x = y >> 5;
832
430k
                y = y & 0x0f;
833
430k
                x += y;
834
430k
                if (x < 15) {
835
397k
                    READ_FLIP_SIGN(g->sb_hybrid + s_index + !!y, RENAME(expval_table)[exponent] + x)
836
397k
                } else {
837
33.6k
                    x += get_bitsz(&s->gb, linbits);
838
33.6k
                    v  = l3_unscale(x, exponent);
839
33.6k
                    if (get_bits1(&s->gb))
840
9.98k
                        v = -v;
841
33.6k
                    g->sb_hybrid[s_index+!!y] = v;
842
33.6k
                }
843
430k
                g->sb_hybrid[s_index + !y] = 0;
844
430k
            }
845
2.41M
            s_index += 2;
846
2.41M
        }
847
1.97M
    }
848
849
    /* high frequencies */
850
4.93M
    vlc = &ff_huff_quad_vlc[g->count1table_select];
851
4.93M
    last_pos = 0;
852
20.2M
    while (s_index <= 572) {
853
20.1M
        int pos, code;
854
20.1M
        pos = get_bits_count(&s->gb);
855
20.1M
        if (pos >= end_pos) {
856
4.90M
            if (pos > end_pos2 && last_pos) {
857
                /* some encoders generate an incorrect size for this
858
                   part. We must go back into the data */
859
16.9k
                s_index -= 4;
860
16.9k
                skip_bits_long(&s->gb, last_pos - pos);
861
16.9k
                av_log(s->avctx, AV_LOG_INFO, "overread, skip %d enddists: %d %d\n", last_pos - pos, end_pos-pos, end_pos2-pos);
862
16.9k
                if(s->err_recognition & (AV_EF_BITSTREAM|AV_EF_COMPLIANT))
863
5.32k
                    s_index=0;
864
16.9k
                break;
865
16.9k
            }
866
4.88M
            switch_buffer(s, &pos, &end_pos, &end_pos2);
867
4.88M
            if (pos >= end_pos)
868
4.79M
                break;
869
4.88M
        }
870
15.3M
        last_pos = pos;
871
872
15.3M
        code = get_vlc2(&s->gb, vlc->table, vlc->bits, 1);
873
15.3M
        ff_dlog(s->avctx, "t=%d code=%d\n", g->count1table_select, code);
874
15.3M
        g->sb_hybrid[s_index + 0] =
875
15.3M
        g->sb_hybrid[s_index + 1] =
876
15.3M
        g->sb_hybrid[s_index + 2] =
877
15.3M
        g->sb_hybrid[s_index + 3] = 0;
878
24.4M
        while (code) {
879
9.10M
            static const int idxtab[16] = { 3,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0 };
880
9.10M
            int v;
881
9.10M
            int pos = s_index + idxtab[code];
882
9.10M
            code   ^= 8 >> idxtab[code];
883
9.10M
            READ_FLIP_SIGN(g->sb_hybrid + pos, RENAME(exp_table)+exponents[pos])
884
9.10M
        }
885
15.3M
        s_index += 4;
886
15.3M
    }
887
    /* skip extension bits */
888
4.93M
    bits_left = end_pos2 - get_bits_count(&s->gb);
889
4.93M
    if (bits_left < 0 && (s->err_recognition & (AV_EF_BUFFER|AV_EF_COMPLIANT))) {
890
1.04M
        av_log(s->avctx, AV_LOG_ERROR, "bits_left=%d\n", bits_left);
891
1.04M
        s_index=0;
892
3.89M
    } else if (bits_left > 0 && (s->err_recognition & (AV_EF_BUFFER|AV_EF_AGGRESSIVE))) {
893
146k
        av_log(s->avctx, AV_LOG_ERROR, "bits_left=%d\n", bits_left);
894
146k
        s_index = 0;
895
146k
    }
896
4.93M
    memset(&g->sb_hybrid[s_index], 0, sizeof(*g->sb_hybrid) * (576 - s_index));
897
4.93M
    skip_bits_long(&s->gb, bits_left);
898
899
4.93M
    i = get_bits_count(&s->gb);
900
4.93M
    switch_buffer(s, &i, &end_pos, &end_pos2);
901
902
4.93M
    return 0;
903
4.93M
}
mpegaudiodec_float.c:huffman_decode
Line
Count
Source
758
2.48M
{
759
2.48M
    int s_index;
760
2.48M
    int i;
761
2.48M
    int last_pos, bits_left;
762
2.48M
    VLC *vlc;
763
2.48M
    int end_pos = FFMIN(end_pos2, s->gb.size_in_bits - s->extrasize * 8);
764
765
    /* low frequencies (called big values) */
766
2.48M
    s_index = 0;
767
9.95M
    for (i = 0; i < 3; i++) {
768
7.46M
        const VLCElem *vlctab;
769
7.46M
        int j, k, l, linbits;
770
7.46M
        j = g->region_size[i];
771
7.46M
        if (j == 0)
772
4.93M
            continue;
773
        /* select vlc table */
774
2.53M
        k       = g->table_select[i];
775
2.53M
        l       = ff_mpa_huff_data[k][0];
776
2.53M
        linbits = ff_mpa_huff_data[k][1];
777
778
2.53M
        if (!l) {
779
1.48M
            memset(&g->sb_hybrid[s_index], 0, sizeof(*g->sb_hybrid) * 2 * j);
780
1.48M
            s_index += 2 * j;
781
1.48M
            continue;
782
1.48M
        }
783
1.04M
        vlctab  = ff_huff_vlc[l];
784
785
        /* read huffcode and compute each couple */
786
2.98M
        for (; j > 0; j--) {
787
2.94M
            int exponent, x, y;
788
2.94M
            int v;
789
2.94M
            int pos = get_bits_count(&s->gb);
790
791
2.94M
            if (pos >= end_pos){
792
1.02M
                switch_buffer(s, &pos, &end_pos, &end_pos2);
793
1.02M
                if (pos >= end_pos)
794
1.01M
                    break;
795
1.02M
            }
796
1.93M
            y = get_vlc2(&s->gb, vlctab, 7, 3);
797
798
1.93M
            if (!y) {
799
549k
                g->sb_hybrid[s_index    ] =
800
549k
                g->sb_hybrid[s_index + 1] = 0;
801
549k
                s_index += 2;
802
549k
                continue;
803
549k
            }
804
805
1.38M
            exponent= exponents[s_index];
806
807
1.38M
            ff_dlog(s->avctx, "region=%d n=%d y=%d exp=%d\n",
808
1.38M
                    i, g->region_size[i] - j, y, exponent);
809
1.38M
            if (y & 16) {
810
1.17M
                x = y >> 5;
811
1.17M
                y = y & 0x0f;
812
1.17M
                if (x < 15) {
813
1.02M
                    READ_FLIP_SIGN(g->sb_hybrid + s_index, RENAME(expval_table)[exponent] + x)
814
1.02M
                } else {
815
149k
                    x += get_bitsz(&s->gb, linbits);
816
149k
                    v  = l3_unscale(x, exponent);
817
149k
                    if (get_bits1(&s->gb))
818
20.4k
                        v = -v;
819
149k
                    g->sb_hybrid[s_index] = v;
820
149k
                }
821
1.17M
                if (y < 15) {
822
620k
                    READ_FLIP_SIGN(g->sb_hybrid + s_index + 1, RENAME(expval_table)[exponent] + y)
823
620k
                } else {
824
558k
                    y += get_bitsz(&s->gb, linbits);
825
558k
                    v  = l3_unscale(y, exponent);
826
558k
                    if (get_bits1(&s->gb))
827
33.4k
                        v = -v;
828
558k
                    g->sb_hybrid[s_index + 1] = v;
829
558k
                }
830
1.17M
            } else {
831
210k
                x = y >> 5;
832
210k
                y = y & 0x0f;
833
210k
                x += y;
834
210k
                if (x < 15) {
835
195k
                    READ_FLIP_SIGN(g->sb_hybrid + s_index + !!y, RENAME(expval_table)[exponent] + x)
836
195k
                } else {
837
15.3k
                    x += get_bitsz(&s->gb, linbits);
838
15.3k
                    v  = l3_unscale(x, exponent);
839
15.3k
                    if (get_bits1(&s->gb))
840
3.21k
                        v = -v;
841
15.3k
                    g->sb_hybrid[s_index+!!y] = v;
842
15.3k
                }
843
210k
                g->sb_hybrid[s_index + !y] = 0;
844
210k
            }
845
1.38M
            s_index += 2;
846
1.38M
        }
847
1.04M
    }
848
849
    /* high frequencies */
850
2.48M
    vlc = &ff_huff_quad_vlc[g->count1table_select];
851
2.48M
    last_pos = 0;
852
16.6M
    while (s_index <= 572) {
853
16.5M
        int pos, code;
854
16.5M
        pos = get_bits_count(&s->gb);
855
16.5M
        if (pos >= end_pos) {
856
2.46M
            if (pos > end_pos2 && last_pos) {
857
                /* some encoders generate an incorrect size for this
858
                   part. We must go back into the data */
859
7.64k
                s_index -= 4;
860
7.64k
                skip_bits_long(&s->gb, last_pos - pos);
861
7.64k
                av_log(s->avctx, AV_LOG_INFO, "overread, skip %d enddists: %d %d\n", last_pos - pos, end_pos-pos, end_pos2-pos);
862
7.64k
                if(s->err_recognition & (AV_EF_BITSTREAM|AV_EF_COMPLIANT))
863
2.73k
                    s_index=0;
864
7.64k
                break;
865
7.64k
            }
866
2.45M
            switch_buffer(s, &pos, &end_pos, &end_pos2);
867
2.45M
            if (pos >= end_pos)
868
2.37M
                break;
869
2.45M
        }
870
14.1M
        last_pos = pos;
871
872
14.1M
        code = get_vlc2(&s->gb, vlc->table, vlc->bits, 1);
873
14.1M
        ff_dlog(s->avctx, "t=%d code=%d\n", g->count1table_select, code);
874
14.1M
        g->sb_hybrid[s_index + 0] =
875
14.1M
        g->sb_hybrid[s_index + 1] =
876
14.1M
        g->sb_hybrid[s_index + 2] =
877
14.1M
        g->sb_hybrid[s_index + 3] = 0;
878
20.7M
        while (code) {
879
6.57M
            static const int idxtab[16] = { 3,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0 };
880
6.57M
            int v;
881
6.57M
            int pos = s_index + idxtab[code];
882
6.57M
            code   ^= 8 >> idxtab[code];
883
6.57M
            READ_FLIP_SIGN(g->sb_hybrid + pos, RENAME(exp_table)+exponents[pos])
884
6.57M
        }
885
14.1M
        s_index += 4;
886
14.1M
    }
887
    /* skip extension bits */
888
2.48M
    bits_left = end_pos2 - get_bits_count(&s->gb);
889
2.48M
    if (bits_left < 0 && (s->err_recognition & (AV_EF_BUFFER|AV_EF_COMPLIANT))) {
890
560k
        av_log(s->avctx, AV_LOG_ERROR, "bits_left=%d\n", bits_left);
891
560k
        s_index=0;
892
1.92M
    } else if (bits_left > 0 && (s->err_recognition & (AV_EF_BUFFER|AV_EF_AGGRESSIVE))) {
893
123k
        av_log(s->avctx, AV_LOG_ERROR, "bits_left=%d\n", bits_left);
894
123k
        s_index = 0;
895
123k
    }
896
2.48M
    memset(&g->sb_hybrid[s_index], 0, sizeof(*g->sb_hybrid) * (576 - s_index));
897
2.48M
    skip_bits_long(&s->gb, bits_left);
898
899
2.48M
    i = get_bits_count(&s->gb);
900
2.48M
    switch_buffer(s, &i, &end_pos, &end_pos2);
901
902
2.48M
    return 0;
903
2.48M
}
mpegaudiodec_fixed.c:huffman_decode
Line
Count
Source
758
2.44M
{
759
2.44M
    int s_index;
760
2.44M
    int i;
761
2.44M
    int last_pos, bits_left;
762
2.44M
    VLC *vlc;
763
2.44M
    int end_pos = FFMIN(end_pos2, s->gb.size_in_bits - s->extrasize * 8);
764
765
    /* low frequencies (called big values) */
766
2.44M
    s_index = 0;
767
9.78M
    for (i = 0; i < 3; i++) {
768
7.34M
        const VLCElem *vlctab;
769
7.34M
        int j, k, l, linbits;
770
7.34M
        j = g->region_size[i];
771
7.34M
        if (j == 0)
772
5.19M
            continue;
773
        /* select vlc table */
774
2.15M
        k       = g->table_select[i];
775
2.15M
        l       = ff_mpa_huff_data[k][0];
776
2.15M
        linbits = ff_mpa_huff_data[k][1];
777
778
2.15M
        if (!l) {
779
1.22M
            memset(&g->sb_hybrid[s_index], 0, sizeof(*g->sb_hybrid) * 2 * j);
780
1.22M
            s_index += 2 * j;
781
1.22M
            continue;
782
1.22M
        }
783
925k
        vlctab  = ff_huff_vlc[l];
784
785
        /* read huffcode and compute each couple */
786
2.45M
        for (; j > 0; j--) {
787
2.42M
            int exponent, x, y;
788
2.42M
            int v;
789
2.42M
            int pos = get_bits_count(&s->gb);
790
791
2.42M
            if (pos >= end_pos){
792
903k
                switch_buffer(s, &pos, &end_pos, &end_pos2);
793
903k
                if (pos >= end_pos)
794
898k
                    break;
795
903k
            }
796
1.52M
            y = get_vlc2(&s->gb, vlctab, 7, 3);
797
798
1.52M
            if (!y) {
799
497k
                g->sb_hybrid[s_index    ] =
800
497k
                g->sb_hybrid[s_index + 1] = 0;
801
497k
                s_index += 2;
802
497k
                continue;
803
497k
            }
804
805
1.03M
            exponent= exponents[s_index];
806
807
1.03M
            ff_dlog(s->avctx, "region=%d n=%d y=%d exp=%d\n",
808
1.03M
                    i, g->region_size[i] - j, y, exponent);
809
1.03M
            if (y & 16) {
810
810k
                x = y >> 5;
811
810k
                y = y & 0x0f;
812
810k
                if (x < 15) {
813
726k
                    READ_FLIP_SIGN(g->sb_hybrid + s_index, RENAME(expval_table)[exponent] + x)
814
726k
                } else {
815
83.5k
                    x += get_bitsz(&s->gb, linbits);
816
83.5k
                    v  = l3_unscale(x, exponent);
817
83.5k
                    if (get_bits1(&s->gb))
818
23.0k
                        v = -v;
819
83.5k
                    g->sb_hybrid[s_index] = v;
820
83.5k
                }
821
810k
                if (y < 15) {
822
453k
                    READ_FLIP_SIGN(g->sb_hybrid + s_index + 1, RENAME(expval_table)[exponent] + y)
823
453k
                } else {
824
356k
                    y += get_bitsz(&s->gb, linbits);
825
356k
                    v  = l3_unscale(y, exponent);
826
356k
                    if (get_bits1(&s->gb))
827
26.2k
                        v = -v;
828
356k
                    g->sb_hybrid[s_index + 1] = v;
829
356k
                }
830
810k
            } else {
831
220k
                x = y >> 5;
832
220k
                y = y & 0x0f;
833
220k
                x += y;
834
220k
                if (x < 15) {
835
202k
                    READ_FLIP_SIGN(g->sb_hybrid + s_index + !!y, RENAME(expval_table)[exponent] + x)
836
202k
                } else {
837
18.2k
                    x += get_bitsz(&s->gb, linbits);
838
18.2k
                    v  = l3_unscale(x, exponent);
839
18.2k
                    if (get_bits1(&s->gb))
840
6.76k
                        v = -v;
841
18.2k
                    g->sb_hybrid[s_index+!!y] = v;
842
18.2k
                }
843
220k
                g->sb_hybrid[s_index + !y] = 0;
844
220k
            }
845
1.03M
            s_index += 2;
846
1.03M
        }
847
925k
    }
848
849
    /* high frequencies */
850
2.44M
    vlc = &ff_huff_quad_vlc[g->count1table_select];
851
2.44M
    last_pos = 0;
852
3.58M
    while (s_index <= 572) {
853
3.57M
        int pos, code;
854
3.57M
        pos = get_bits_count(&s->gb);
855
3.57M
        if (pos >= end_pos) {
856
2.43M
            if (pos > end_pos2 && last_pos) {
857
                /* some encoders generate an incorrect size for this
858
                   part. We must go back into the data */
859
9.32k
                s_index -= 4;
860
9.32k
                skip_bits_long(&s->gb, last_pos - pos);
861
9.32k
                av_log(s->avctx, AV_LOG_INFO, "overread, skip %d enddists: %d %d\n", last_pos - pos, end_pos-pos, end_pos2-pos);
862
9.32k
                if(s->err_recognition & (AV_EF_BITSTREAM|AV_EF_COMPLIANT))
863
2.59k
                    s_index=0;
864
9.32k
                break;
865
9.32k
            }
866
2.42M
            switch_buffer(s, &pos, &end_pos, &end_pos2);
867
2.42M
            if (pos >= end_pos)
868
2.42M
                break;
869
2.42M
        }
870
1.14M
        last_pos = pos;
871
872
1.14M
        code = get_vlc2(&s->gb, vlc->table, vlc->bits, 1);
873
1.14M
        ff_dlog(s->avctx, "t=%d code=%d\n", g->count1table_select, code);
874
1.14M
        g->sb_hybrid[s_index + 0] =
875
1.14M
        g->sb_hybrid[s_index + 1] =
876
1.14M
        g->sb_hybrid[s_index + 2] =
877
1.14M
        g->sb_hybrid[s_index + 3] = 0;
878
3.67M
        while (code) {
879
2.53M
            static const int idxtab[16] = { 3,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0 };
880
2.53M
            int v;
881
2.53M
            int pos = s_index + idxtab[code];
882
2.53M
            code   ^= 8 >> idxtab[code];
883
2.53M
            READ_FLIP_SIGN(g->sb_hybrid + pos, RENAME(exp_table)+exponents[pos])
884
2.53M
        }
885
1.14M
        s_index += 4;
886
1.14M
    }
887
    /* skip extension bits */
888
2.44M
    bits_left = end_pos2 - get_bits_count(&s->gb);
889
2.44M
    if (bits_left < 0 && (s->err_recognition & (AV_EF_BUFFER|AV_EF_COMPLIANT))) {
890
484k
        av_log(s->avctx, AV_LOG_ERROR, "bits_left=%d\n", bits_left);
891
484k
        s_index=0;
892
1.96M
    } else if (bits_left > 0 && (s->err_recognition & (AV_EF_BUFFER|AV_EF_AGGRESSIVE))) {
893
23.0k
        av_log(s->avctx, AV_LOG_ERROR, "bits_left=%d\n", bits_left);
894
23.0k
        s_index = 0;
895
23.0k
    }
896
2.44M
    memset(&g->sb_hybrid[s_index], 0, sizeof(*g->sb_hybrid) * (576 - s_index));
897
2.44M
    skip_bits_long(&s->gb, bits_left);
898
899
2.44M
    i = get_bits_count(&s->gb);
900
2.44M
    switch_buffer(s, &i, &end_pos, &end_pos2);
901
902
2.44M
    return 0;
903
2.44M
}
904
905
/* Reorder short blocks from bitstream order to interleaved order. It
906
   would be faster to do it in parsing, but the code would be far more
907
   complicated */
908
static void reorder_block(MPADecodeContext *s, GranuleDef *g)
909
4.93M
{
910
4.93M
    int i, j, len;
911
4.93M
    INTFLOAT *ptr, *dst, *ptr1;
912
4.93M
    INTFLOAT tmp[576];
913
914
4.93M
    if (g->block_type != 2)
915
4.12M
        return;
916
917
810k
    if (g->switch_point) {
918
724k
        if (s->sample_rate_index != 8)
919
719k
            ptr = g->sb_hybrid + 36;
920
4.96k
        else
921
4.96k
            ptr = g->sb_hybrid + 72;
922
724k
    } else {
923
85.5k
        ptr = g->sb_hybrid;
924
85.5k
    }
925
926
9.17M
    for (i = g->short_start; i < 13; i++) {
927
8.35M
        len  = ff_band_size_short[s->sample_rate_index][i];
928
8.35M
        ptr1 = ptr;
929
8.35M
        dst  = tmp;
930
155M
        for (j = len; j > 0; j--) {
931
146M
            *dst++ = ptr[0*len];
932
146M
            *dst++ = ptr[1*len];
933
146M
            *dst++ = ptr[2*len];
934
146M
            ptr++;
935
146M
        }
936
8.35M
        ptr += 2 * len;
937
8.35M
        memcpy(ptr1, tmp, len * 3 * sizeof(*ptr1));
938
8.35M
    }
939
810k
}
mpegaudiodec_float.c:reorder_block
Line
Count
Source
909
2.48M
{
910
2.48M
    int i, j, len;
911
2.48M
    INTFLOAT *ptr, *dst, *ptr1;
912
2.48M
    INTFLOAT tmp[576];
913
914
2.48M
    if (g->block_type != 2)
915
1.96M
        return;
916
917
527k
    if (g->switch_point) {
918
460k
        if (s->sample_rate_index != 8)
919
458k
            ptr = g->sb_hybrid + 36;
920
2.30k
        else
921
2.30k
            ptr = g->sb_hybrid + 72;
922
460k
    } else {
923
67.0k
        ptr = g->sb_hybrid;
924
67.0k
    }
925
926
6.00M
    for (i = g->short_start; i < 13; i++) {
927
5.47M
        len  = ff_band_size_short[s->sample_rate_index][i];
928
5.47M
        ptr1 = ptr;
929
5.47M
        dst  = tmp;
930
101M
        for (j = len; j > 0; j--) {
931
95.7M
            *dst++ = ptr[0*len];
932
95.7M
            *dst++ = ptr[1*len];
933
95.7M
            *dst++ = ptr[2*len];
934
95.7M
            ptr++;
935
95.7M
        }
936
5.47M
        ptr += 2 * len;
937
5.47M
        memcpy(ptr1, tmp, len * 3 * sizeof(*ptr1));
938
5.47M
    }
939
527k
}
mpegaudiodec_fixed.c:reorder_block
Line
Count
Source
909
2.44M
{
910
2.44M
    int i, j, len;
911
2.44M
    INTFLOAT *ptr, *dst, *ptr1;
912
2.44M
    INTFLOAT tmp[576];
913
914
2.44M
    if (g->block_type != 2)
915
2.16M
        return;
916
917
282k
    if (g->switch_point) {
918
264k
        if (s->sample_rate_index != 8)
919
261k
            ptr = g->sb_hybrid + 36;
920
2.66k
        else
921
2.66k
            ptr = g->sb_hybrid + 72;
922
264k
    } else {
923
18.5k
        ptr = g->sb_hybrid;
924
18.5k
    }
925
926
3.16M
    for (i = g->short_start; i < 13; i++) {
927
2.88M
        len  = ff_band_size_short[s->sample_rate_index][i];
928
2.88M
        ptr1 = ptr;
929
2.88M
        dst  = tmp;
930
53.9M
        for (j = len; j > 0; j--) {
931
51.0M
            *dst++ = ptr[0*len];
932
51.0M
            *dst++ = ptr[1*len];
933
51.0M
            *dst++ = ptr[2*len];
934
51.0M
            ptr++;
935
51.0M
        }
936
2.88M
        ptr += 2 * len;
937
2.88M
        memcpy(ptr1, tmp, len * 3 * sizeof(*ptr1));
938
2.88M
    }
939
282k
}
940
941
#define ISQRT2 FIXR(0.70710678118654752440)
942
943
static void compute_stereo(MPADecodeContext *s, GranuleDef *g0, GranuleDef *g1)
944
2.04M
{
945
2.04M
    int i, j, k, l;
946
2.04M
    int sf_max, sf, len, non_zero_found;
947
2.04M
    INTFLOAT *tab0, *tab1, v1, v2;
948
2.04M
    const INTFLOAT (*is_tab)[16];
949
2.04M
    SUINTFLOAT tmp0, tmp1;
950
2.04M
    int non_zero_found_short[3];
951
952
    /* intensity stereo */
953
2.04M
    if (s->mode_ext & MODE_EXT_I_STEREO) {
954
1.64M
        if (!s->lsf) {
955
269k
            is_tab = is_table;
956
269k
            sf_max = 7;
957
1.37M
        } else {
958
1.37M
            is_tab = is_table_lsf[g1->scalefac_compress & 1];
959
1.37M
            sf_max = 16;
960
1.37M
        }
961
962
1.64M
        tab0 = g0->sb_hybrid + 576;
963
1.64M
        tab1 = g1->sb_hybrid + 576;
964
965
1.64M
        non_zero_found_short[0] = 0;
966
1.64M
        non_zero_found_short[1] = 0;
967
1.64M
        non_zero_found_short[2] = 0;
968
1.64M
        k = (13 - g1->short_start) * 3 + g1->long_end - 3;
969
2.81M
        for (i = 12; i >= g1->short_start; i--) {
970
            /* for last band, use previous scale factor */
971
1.17M
            if (i != 11)
972
1.06M
                k -= 3;
973
1.17M
            len = ff_band_size_short[s->sample_rate_index][i];
974
4.68M
            for (l = 2; l >= 0; l--) {
975
3.51M
                tab0 -= len;
976
3.51M
                tab1 -= len;
977
3.51M
                if (!non_zero_found_short[l]) {
978
                    /* test if non zero band. if so, stop doing i-stereo */
979
62.8M
                    for (j = 0; j < len; j++) {
980
59.4M
                        if (tab1[j] != 0) {
981
12.4k
                            non_zero_found_short[l] = 1;
982
12.4k
                            goto found1;
983
12.4k
                        }
984
59.4M
                    }
985
3.41M
                    sf = g1->scale_factors[k + l];
986
3.41M
                    if (sf >= sf_max)
987
62.8k
                        goto found1;
988
989
3.35M
                    v1 = is_tab[0][sf];
990
3.35M
                    v2 = is_tab[1][sf];
991
61.2M
                    for (j = 0; j < len; j++) {
992
57.9M
                        tmp0    = tab0[j];
993
57.9M
                        tab0[j] = MULLx(tmp0, v1, FRAC_BITS);
994
57.9M
                        tab1[j] = MULLx(tmp0, v2, FRAC_BITS);
995
57.9M
                    }
996
3.35M
                } else {
997
161k
found1:
998
161k
                    if (s->mode_ext & MODE_EXT_MS_STEREO) {
999
                        /* lower part of the spectrum : do ms stereo
1000
                           if enabled */
1001
848k
                        for (j = 0; j < len; j++) {
1002
789k
                            tmp0    = tab0[j];
1003
789k
                            tmp1    = tab1[j];
1004
789k
                            tab0[j] = MULLx(tmp0 + tmp1, ISQRT2, FRAC_BITS);
1005
789k
                            tab1[j] = MULLx(tmp0 - tmp1, ISQRT2, FRAC_BITS);
1006
789k
                        }
1007
59.3k
                    }
1008
161k
                }
1009
3.51M
            }
1010
1.17M
        }
1011
1012
1.64M
        non_zero_found = non_zero_found_short[0] |
1013
1.64M
                         non_zero_found_short[1] |
1014
1.64M
                         non_zero_found_short[2];
1015
1016
35.8M
        for (i = g1->long_end - 1;i >= 0;i--) {
1017
34.2M
            len   = ff_band_size_long[s->sample_rate_index][i];
1018
34.2M
            tab0 -= len;
1019
34.2M
            tab1 -= len;
1020
            /* test if non zero band. if so, stop doing i-stereo */
1021
34.2M
            if (!non_zero_found) {
1022
916M
                for (j = 0; j < len; j++) {
1023
882M
                    if (tab1[j] != 0) {
1024
10.8k
                        non_zero_found = 1;
1025
10.8k
                        goto found2;
1026
10.8k
                    }
1027
882M
                }
1028
                /* for last band, use previous scale factor */
1029
34.0M
                k  = (i == 21) ? 20 : i;
1030
34.0M
                sf = g1->scale_factors[k];
1031
34.0M
                if (sf >= sf_max)
1032
10.5k
                    goto found2;
1033
34.0M
                v1 = is_tab[0][sf];
1034
34.0M
                v2 = is_tab[1][sf];
1035
915M
                for (j = 0; j < len; j++) {
1036
881M
                    tmp0    = tab0[j];
1037
881M
                    tab0[j] = MULLx(tmp0, v1, FRAC_BITS);
1038
881M
                    tab1[j] = MULLx(tmp0, v2, FRAC_BITS);
1039
881M
                }
1040
34.0M
            } else {
1041
137k
found2:
1042
137k
                if (s->mode_ext & MODE_EXT_MS_STEREO) {
1043
                    /* lower part of the spectrum : do ms stereo
1044
                       if enabled */
1045
2.58M
                    for (j = 0; j < len; j++) {
1046
2.45M
                        tmp0    = tab0[j];
1047
2.45M
                        tmp1    = tab1[j];
1048
2.45M
                        tab0[j] = MULLx(tmp0 + tmp1, ISQRT2, FRAC_BITS);
1049
2.45M
                        tab1[j] = MULLx(tmp0 - tmp1, ISQRT2, FRAC_BITS);
1050
2.45M
                    }
1051
123k
                }
1052
137k
            }
1053
34.2M
        }
1054
1.64M
    } else if (s->mode_ext & MODE_EXT_MS_STEREO) {
1055
        /* ms stereo ONLY */
1056
        /* NOTE: the 1/sqrt(2) normalization factor is included in the
1057
           global gain */
1058
#if USE_FLOATS
1059
       s->butterflies_float(g0->sb_hybrid, g1->sb_hybrid, 576);
1060
#else
1061
        tab0 = g0->sb_hybrid;
1062
        tab1 = g1->sb_hybrid;
1063
88.8M
        for (i = 0; i < 576; i++) {
1064
88.6M
            tmp0    = tab0[i];
1065
88.6M
            tmp1    = tab1[i];
1066
88.6M
            tab0[i] = tmp0 + tmp1;
1067
88.6M
            tab1[i] = tmp0 - tmp1;
1068
88.6M
        }
1069
#endif
1070
302k
    }
1071
2.04M
}
mpegaudiodec_float.c:compute_stereo
Line
Count
Source
944
1.16M
{
945
1.16M
    int i, j, k, l;
946
1.16M
    int sf_max, sf, len, non_zero_found;
947
1.16M
    INTFLOAT *tab0, *tab1, v1, v2;
948
1.16M
    const INTFLOAT (*is_tab)[16];
949
1.16M
    SUINTFLOAT tmp0, tmp1;
950
1.16M
    int non_zero_found_short[3];
951
952
    /* intensity stereo */
953
1.16M
    if (s->mode_ext & MODE_EXT_I_STEREO) {
954
935k
        if (!s->lsf) {
955
44.5k
            is_tab = is_table;
956
44.5k
            sf_max = 7;
957
891k
        } else {
958
891k
            is_tab = is_table_lsf[g1->scalefac_compress & 1];
959
891k
            sf_max = 16;
960
891k
        }
961
962
935k
        tab0 = g0->sb_hybrid + 576;
963
935k
        tab1 = g1->sb_hybrid + 576;
964
965
935k
        non_zero_found_short[0] = 0;
966
935k
        non_zero_found_short[1] = 0;
967
935k
        non_zero_found_short[2] = 0;
968
935k
        k = (13 - g1->short_start) * 3 + g1->long_end - 3;
969
1.93M
        for (i = 12; i >= g1->short_start; i--) {
970
            /* for last band, use previous scale factor */
971
998k
            if (i != 11)
972
902k
                k -= 3;
973
998k
            len = ff_band_size_short[s->sample_rate_index][i];
974
3.99M
            for (l = 2; l >= 0; l--) {
975
2.99M
                tab0 -= len;
976
2.99M
                tab1 -= len;
977
2.99M
                if (!non_zero_found_short[l]) {
978
                    /* test if non zero band. if so, stop doing i-stereo */
979
54.5M
                    for (j = 0; j < len; j++) {
980
51.5M
                        if (tab1[j] != 0) {
981
7.72k
                            non_zero_found_short[l] = 1;
982
7.72k
                            goto found1;
983
7.72k
                        }
984
51.5M
                    }
985
2.92M
                    sf = g1->scale_factors[k + l];
986
2.92M
                    if (sf >= sf_max)
987
56.0k
                        goto found1;
988
989
2.87M
                    v1 = is_tab[0][sf];
990
2.87M
                    v2 = is_tab[1][sf];
991
53.0M
                    for (j = 0; j < len; j++) {
992
50.1M
                        tmp0    = tab0[j];
993
50.1M
                        tab0[j] = MULLx(tmp0, v1, FRAC_BITS);
994
50.1M
                        tab1[j] = MULLx(tmp0, v2, FRAC_BITS);
995
50.1M
                    }
996
2.87M
                } else {
997
122k
found1:
998
122k
                    if (s->mode_ext & MODE_EXT_MS_STEREO) {
999
                        /* lower part of the spectrum : do ms stereo
1000
                           if enabled */
1001
407k
                        for (j = 0; j < len; j++) {
1002
376k
                            tmp0    = tab0[j];
1003
376k
                            tmp1    = tab1[j];
1004
376k
                            tab0[j] = MULLx(tmp0 + tmp1, ISQRT2, FRAC_BITS);
1005
376k
                            tab1[j] = MULLx(tmp0 - tmp1, ISQRT2, FRAC_BITS);
1006
376k
                        }
1007
30.6k
                    }
1008
122k
                }
1009
2.99M
            }
1010
998k
        }
1011
1012
935k
        non_zero_found = non_zero_found_short[0] |
1013
935k
                         non_zero_found_short[1] |
1014
935k
                         non_zero_found_short[2];
1015
1016
19.9M
        for (i = g1->long_end - 1;i >= 0;i--) {
1017
18.9M
            len   = ff_band_size_long[s->sample_rate_index][i];
1018
18.9M
            tab0 -= len;
1019
18.9M
            tab1 -= len;
1020
            /* test if non zero band. if so, stop doing i-stereo */
1021
18.9M
            if (!non_zero_found) {
1022
504M
                for (j = 0; j < len; j++) {
1023
485M
                    if (tab1[j] != 0) {
1024
6.26k
                        non_zero_found = 1;
1025
6.26k
                        goto found2;
1026
6.26k
                    }
1027
485M
                }
1028
                /* for last band, use previous scale factor */
1029
18.9M
                k  = (i == 21) ? 20 : i;
1030
18.9M
                sf = g1->scale_factors[k];
1031
18.9M
                if (sf >= sf_max)
1032
6.58k
                    goto found2;
1033
18.9M
                v1 = is_tab[0][sf];
1034
18.9M
                v2 = is_tab[1][sf];
1035
504M
                for (j = 0; j < len; j++) {
1036
485M
                    tmp0    = tab0[j];
1037
485M
                    tab0[j] = MULLx(tmp0, v1, FRAC_BITS);
1038
485M
                    tab1[j] = MULLx(tmp0, v2, FRAC_BITS);
1039
485M
                }
1040
18.9M
            } else {
1041
68.1k
found2:
1042
68.1k
                if (s->mode_ext & MODE_EXT_MS_STEREO) {
1043
                    /* lower part of the spectrum : do ms stereo
1044
                       if enabled */
1045
1.21M
                    for (j = 0; j < len; j++) {
1046
1.15M
                        tmp0    = tab0[j];
1047
1.15M
                        tmp1    = tab1[j];
1048
1.15M
                        tab0[j] = MULLx(tmp0 + tmp1, ISQRT2, FRAC_BITS);
1049
1.15M
                        tab1[j] = MULLx(tmp0 - tmp1, ISQRT2, FRAC_BITS);
1050
1.15M
                    }
1051
61.2k
                }
1052
68.1k
            }
1053
18.9M
        }
1054
935k
    } else if (s->mode_ext & MODE_EXT_MS_STEREO) {
1055
        /* ms stereo ONLY */
1056
        /* NOTE: the 1/sqrt(2) normalization factor is included in the
1057
           global gain */
1058
148k
#if USE_FLOATS
1059
148k
       s->butterflies_float(g0->sb_hybrid, g1->sb_hybrid, 576);
1060
#else
1061
        tab0 = g0->sb_hybrid;
1062
        tab1 = g1->sb_hybrid;
1063
        for (i = 0; i < 576; i++) {
1064
            tmp0    = tab0[i];
1065
            tmp1    = tab1[i];
1066
            tab0[i] = tmp0 + tmp1;
1067
            tab1[i] = tmp0 - tmp1;
1068
        }
1069
#endif
1070
148k
    }
1071
1.16M
}
mpegaudiodec_fixed.c:compute_stereo
Line
Count
Source
944
882k
{
945
882k
    int i, j, k, l;
946
882k
    int sf_max, sf, len, non_zero_found;
947
882k
    INTFLOAT *tab0, *tab1, v1, v2;
948
882k
    const INTFLOAT (*is_tab)[16];
949
882k
    SUINTFLOAT tmp0, tmp1;
950
882k
    int non_zero_found_short[3];
951
952
    /* intensity stereo */
953
882k
    if (s->mode_ext & MODE_EXT_I_STEREO) {
954
705k
        if (!s->lsf) {
955
224k
            is_tab = is_table;
956
224k
            sf_max = 7;
957
480k
        } else {
958
480k
            is_tab = is_table_lsf[g1->scalefac_compress & 1];
959
480k
            sf_max = 16;
960
480k
        }
961
962
705k
        tab0 = g0->sb_hybrid + 576;
963
705k
        tab1 = g1->sb_hybrid + 576;
964
965
705k
        non_zero_found_short[0] = 0;
966
705k
        non_zero_found_short[1] = 0;
967
705k
        non_zero_found_short[2] = 0;
968
705k
        k = (13 - g1->short_start) * 3 + g1->long_end - 3;
969
877k
        for (i = 12; i >= g1->short_start; i--) {
970
            /* for last band, use previous scale factor */
971
172k
            if (i != 11)
972
157k
                k -= 3;
973
172k
            len = ff_band_size_short[s->sample_rate_index][i];
974
690k
            for (l = 2; l >= 0; l--) {
975
518k
                tab0 -= len;
976
518k
                tab1 -= len;
977
518k
                if (!non_zero_found_short[l]) {
978
                    /* test if non zero band. if so, stop doing i-stereo */
979
8.32M
                    for (j = 0; j < len; j++) {
980
7.83M
                        if (tab1[j] != 0) {
981
4.71k
                            non_zero_found_short[l] = 1;
982
4.71k
                            goto found1;
983
4.71k
                        }
984
7.83M
                    }
985
486k
                    sf = g1->scale_factors[k + l];
986
486k
                    if (sf >= sf_max)
987
6.84k
                        goto found1;
988
989
479k
                    v1 = is_tab[0][sf];
990
479k
                    v2 = is_tab[1][sf];
991
8.20M
                    for (j = 0; j < len; j++) {
992
7.72M
                        tmp0    = tab0[j];
993
7.72M
                        tab0[j] = MULLx(tmp0, v1, FRAC_BITS);
994
7.72M
                        tab1[j] = MULLx(tmp0, v2, FRAC_BITS);
995
7.72M
                    }
996
479k
                } else {
997
38.8k
found1:
998
38.8k
                    if (s->mode_ext & MODE_EXT_MS_STEREO) {
999
                        /* lower part of the spectrum : do ms stereo
1000
                           if enabled */
1001
441k
                        for (j = 0; j < len; j++) {
1002
412k
                            tmp0    = tab0[j];
1003
412k
                            tmp1    = tab1[j];
1004
412k
                            tab0[j] = MULLx(tmp0 + tmp1, ISQRT2, FRAC_BITS);
1005
412k
                            tab1[j] = MULLx(tmp0 - tmp1, ISQRT2, FRAC_BITS);
1006
412k
                        }
1007
28.7k
                    }
1008
38.8k
                }
1009
518k
            }
1010
172k
        }
1011
1012
705k
        non_zero_found = non_zero_found_short[0] |
1013
705k
                         non_zero_found_short[1] |
1014
705k
                         non_zero_found_short[2];
1015
1016
15.9M
        for (i = g1->long_end - 1;i >= 0;i--) {
1017
15.2M
            len   = ff_band_size_long[s->sample_rate_index][i];
1018
15.2M
            tab0 -= len;
1019
15.2M
            tab1 -= len;
1020
            /* test if non zero band. if so, stop doing i-stereo */
1021
15.2M
            if (!non_zero_found) {
1022
411M
                for (j = 0; j < len; j++) {
1023
396M
                    if (tab1[j] != 0) {
1024
4.62k
                        non_zero_found = 1;
1025
4.62k
                        goto found2;
1026
4.62k
                    }
1027
396M
                }
1028
                /* for last band, use previous scale factor */
1029
15.1M
                k  = (i == 21) ? 20 : i;
1030
15.1M
                sf = g1->scale_factors[k];
1031
15.1M
                if (sf >= sf_max)
1032
3.92k
                    goto found2;
1033
15.1M
                v1 = is_tab[0][sf];
1034
15.1M
                v2 = is_tab[1][sf];
1035
411M
                for (j = 0; j < len; j++) {
1036
396M
                    tmp0    = tab0[j];
1037
396M
                    tab0[j] = MULLx(tmp0, v1, FRAC_BITS);
1038
396M
                    tab1[j] = MULLx(tmp0, v2, FRAC_BITS);
1039
396M
                }
1040
15.1M
            } else {
1041
69.2k
found2:
1042
69.2k
                if (s->mode_ext & MODE_EXT_MS_STEREO) {
1043
                    /* lower part of the spectrum : do ms stereo
1044
                       if enabled */
1045
1.36M
                    for (j = 0; j < len; j++) {
1046
1.30M
                        tmp0    = tab0[j];
1047
1.30M
                        tmp1    = tab1[j];
1048
1.30M
                        tab0[j] = MULLx(tmp0 + tmp1, ISQRT2, FRAC_BITS);
1049
1.30M
                        tab1[j] = MULLx(tmp0 - tmp1, ISQRT2, FRAC_BITS);
1050
1.30M
                    }
1051
62.6k
                }
1052
69.2k
            }
1053
15.2M
        }
1054
705k
    } else if (s->mode_ext & MODE_EXT_MS_STEREO) {
1055
        /* ms stereo ONLY */
1056
        /* NOTE: the 1/sqrt(2) normalization factor is included in the
1057
           global gain */
1058
#if USE_FLOATS
1059
       s->butterflies_float(g0->sb_hybrid, g1->sb_hybrid, 576);
1060
#else
1061
153k
        tab0 = g0->sb_hybrid;
1062
153k
        tab1 = g1->sb_hybrid;
1063
88.8M
        for (i = 0; i < 576; i++) {
1064
88.6M
            tmp0    = tab0[i];
1065
88.6M
            tmp1    = tab1[i];
1066
88.6M
            tab0[i] = tmp0 + tmp1;
1067
88.6M
            tab1[i] = tmp0 - tmp1;
1068
88.6M
        }
1069
153k
#endif
1070
153k
    }
1071
882k
}
1072
1073
#if USE_FLOATS
1074
#if HAVE_MIPSFPU
1075
#   include "mips/compute_antialias_float.h"
1076
#endif /* HAVE_MIPSFPU */
1077
#else
1078
#if HAVE_MIPSDSP
1079
#   include "mips/compute_antialias_fixed.h"
1080
#endif /* HAVE_MIPSDSP */
1081
#endif /* USE_FLOATS */
1082
1083
#ifndef compute_antialias
1084
#if USE_FLOATS
1085
490M
#define AA(j) do {                                                      \
1086
490M
        float tmp0 = ptr[-1-j];                                         \
1087
490M
        float tmp1 = ptr[   j];                                         \
1088
490M
        ptr[-1-j] = tmp0 * csa_table[j][0] - tmp1 * csa_table[j][1];    \
1089
490M
        ptr[   j] = tmp0 * csa_table[j][1] + tmp1 * csa_table[j][0];    \
1090
490M
    } while (0)
1091
#else
1092
538M
#define AA(j) do {                                              \
1093
538M
        SUINT tmp0 = ptr[-1-j];                                   \
1094
538M
        SUINT tmp1 = ptr[   j];                                   \
1095
538M
        SUINT tmp2 = MULH(tmp0 + tmp1, csa_table[j][0]);          \
1096
538M
        ptr[-1-j] = 4 * (tmp2 - MULH(tmp1, csa_table[j][2]));   \
1097
538M
        ptr[   j] = 4 * (tmp2 + MULH(tmp0, csa_table[j][3]));   \
1098
538M
    } while (0)
1099
#endif
1100
1101
static void compute_antialias(MPADecodeContext *s, GranuleDef *g)
1102
4.93M
{
1103
4.93M
    INTFLOAT *ptr;
1104
4.93M
    int n, i;
1105
1106
    /* we antialias only "long" bands */
1107
4.93M
    if (g->block_type == 2) {
1108
810k
        if (!g->switch_point)
1109
85.5k
            return;
1110
        /* XXX: check this for 8000Hz case */
1111
724k
        n = 1;
1112
4.12M
    } else {
1113
4.12M
        n = SBLIMIT - 1;
1114
4.12M
    }
1115
1116
4.85M
    ptr = g->sb_hybrid + 18;
1117
133M
    for (i = n; i > 0; i--) {
1118
128M
        AA(0);
1119
128M
        AA(1);
1120
128M
        AA(2);
1121
128M
        AA(3);
1122
128M
        AA(4);
1123
128M
        AA(5);
1124
128M
        AA(6);
1125
128M
        AA(7);
1126
1127
128M
        ptr += 18;
1128
128M
    }
1129
4.85M
}
mpegaudiodec_float.c:compute_antialias
Line
Count
Source
1102
2.48M
{
1103
2.48M
    INTFLOAT *ptr;
1104
2.48M
    int n, i;
1105
1106
    /* we antialias only "long" bands */
1107
2.48M
    if (g->block_type == 2) {
1108
527k
        if (!g->switch_point)
1109
67.0k
            return;
1110
        /* XXX: check this for 8000Hz case */
1111
460k
        n = 1;
1112
1.96M
    } else {
1113
1.96M
        n = SBLIMIT - 1;
1114
1.96M
    }
1115
1116
2.42M
    ptr = g->sb_hybrid + 18;
1117
63.7M
    for (i = n; i > 0; i--) {
1118
61.2M
        AA(0);
1119
61.2M
        AA(1);
1120
61.2M
        AA(2);
1121
61.2M
        AA(3);
1122
61.2M
        AA(4);
1123
61.2M
        AA(5);
1124
61.2M
        AA(6);
1125
61.2M
        AA(7);
1126
1127
61.2M
        ptr += 18;
1128
61.2M
    }
1129
2.42M
}
mpegaudiodec_fixed.c:compute_antialias
Line
Count
Source
1102
2.44M
{
1103
2.44M
    INTFLOAT *ptr;
1104
2.44M
    int n, i;
1105
1106
    /* we antialias only "long" bands */
1107
2.44M
    if (g->block_type == 2) {
1108
282k
        if (!g->switch_point)
1109
18.5k
            return;
1110
        /* XXX: check this for 8000Hz case */
1111
264k
        n = 1;
1112
2.16M
    } else {
1113
2.16M
        n = SBLIMIT - 1;
1114
2.16M
    }
1115
1116
2.42M
    ptr = g->sb_hybrid + 18;
1117
69.7M
    for (i = n; i > 0; i--) {
1118
67.3M
        AA(0);
1119
67.3M
        AA(1);
1120
67.3M
        AA(2);
1121
67.3M
        AA(3);
1122
67.3M
        AA(4);
1123
67.3M
        AA(5);
1124
67.3M
        AA(6);
1125
67.3M
        AA(7);
1126
1127
67.3M
        ptr += 18;
1128
67.3M
    }
1129
2.42M
}
1130
#endif /* compute_antialias */
1131
1132
static void compute_imdct(MPADecodeContext *s, GranuleDef *g,
1133
                          INTFLOAT *sb_samples, INTFLOAT *mdct_buf)
1134
6.82M
{
1135
6.82M
    INTFLOAT *win, *out_ptr, *ptr, *buf, *ptr1;
1136
6.82M
    INTFLOAT out2[12];
1137
6.82M
    int i, j, mdct_long_end, sblimit;
1138
1139
    /* find last non zero block */
1140
6.82M
    ptr  = g->sb_hybrid + 576;
1141
6.82M
    ptr1 = g->sb_hybrid + 2 * 18;
1142
623M
    while (ptr >= ptr1) {
1143
617M
        int32_t *p;
1144
617M
        ptr -= 6;
1145
617M
        p    = (int32_t*)ptr;
1146
617M
        if (p[0] | p[1] | p[2] | p[3] | p[4] | p[5])
1147
124k
            break;
1148
617M
    }
1149
6.82M
    sblimit = ((ptr - g->sb_hybrid) / 18) + 1;
1150
1151
6.82M
    if (g->block_type == 2) {
1152
        /* XXX: check for 8000 Hz */
1153
1.27M
        if (g->switch_point)
1154
1.16M
            mdct_long_end = 2;
1155
110k
        else
1156
110k
            mdct_long_end = 0;
1157
5.55M
    } else {
1158
5.55M
        mdct_long_end = sblimit;
1159
5.55M
    }
1160
1161
6.82M
    s->mpadsp.RENAME(imdct36_blocks)(sb_samples, mdct_buf, g->sb_hybrid,
1162
6.82M
                                     mdct_long_end, g->switch_point,
1163
6.82M
                                     g->block_type);
1164
1165
6.82M
    buf = mdct_buf + 4*18*(mdct_long_end >> 2) + (mdct_long_end & 3);
1166
6.82M
    ptr = g->sb_hybrid + 18 * mdct_long_end;
1167
1168
7.35M
    for (j = mdct_long_end; j < sblimit; j++) {
1169
        /* select frequency inversion */
1170
527k
        win     = RENAME(ff_mdct_win)[2 + (4  & -(j & 1))];
1171
527k
        out_ptr = sb_samples + j;
1172
1173
3.69M
        for (i = 0; i < 6; i++) {
1174
3.16M
            *out_ptr = buf[4*i];
1175
3.16M
            out_ptr += SBLIMIT;
1176
3.16M
        }
1177
527k
        imdct12(out2, ptr + 0);
1178
3.69M
        for (i = 0; i < 6; i++) {
1179
3.16M
            *out_ptr     = MULH3(out2[i    ], win[i    ], 1) + buf[4*(i + 6*1)];
1180
3.16M
            buf[4*(i + 6*2)] = MULH3(out2[i + 6], win[i + 6], 1);
1181
3.16M
            out_ptr += SBLIMIT;
1182
3.16M
        }
1183
527k
        imdct12(out2, ptr + 1);
1184
3.69M
        for (i = 0; i < 6; i++) {
1185
3.16M
            *out_ptr     = MULH3(out2[i    ], win[i    ], 1) + buf[4*(i + 6*2)];
1186
3.16M
            buf[4*(i + 6*0)] = MULH3(out2[i + 6], win[i + 6], 1);
1187
3.16M
            out_ptr += SBLIMIT;
1188
3.16M
        }
1189
527k
        imdct12(out2, ptr + 2);
1190
3.69M
        for (i = 0; i < 6; i++) {
1191
3.16M
            buf[4*(i + 6*0)] = MULH3(out2[i    ], win[i    ], 1) + buf[4*(i + 6*0)];
1192
3.16M
            buf[4*(i + 6*1)] = MULH3(out2[i + 6], win[i + 6], 1);
1193
3.16M
            buf[4*(i + 6*2)] = 0;
1194
3.16M
        }
1195
527k
        ptr += 18;
1196
527k
        buf += (j&3) != 3 ? 1 : (4*18-3);
1197
527k
    }
1198
    /* zero bands */
1199
210M
    for (j = sblimit; j < SBLIMIT; j++) {
1200
        /* overlap */
1201
203M
        out_ptr = sb_samples + j;
1202
3.86G
        for (i = 0; i < 18; i++) {
1203
3.66G
            *out_ptr = buf[4*i];
1204
3.66G
            buf[4*i]   = 0;
1205
3.66G
            out_ptr += SBLIMIT;
1206
3.66G
        }
1207
203M
        buf += (j&3) != 3 ? 1 : (4*18-3);
1208
203M
    }
1209
6.82M
}
mpegaudiodec_float.c:compute_imdct
Line
Count
Source
1134
3.61M
{
1135
3.61M
    INTFLOAT *win, *out_ptr, *ptr, *buf, *ptr1;
1136
3.61M
    INTFLOAT out2[12];
1137
3.61M
    int i, j, mdct_long_end, sblimit;
1138
1139
    /* find last non zero block */
1140
3.61M
    ptr  = g->sb_hybrid + 576;
1141
3.61M
    ptr1 = g->sb_hybrid + 2 * 18;
1142
329M
    while (ptr >= ptr1) {
1143
326M
        int32_t *p;
1144
326M
        ptr -= 6;
1145
326M
        p    = (int32_t*)ptr;
1146
326M
        if (p[0] | p[1] | p[2] | p[3] | p[4] | p[5])
1147
97.5k
            break;
1148
326M
    }
1149
3.61M
    sblimit = ((ptr - g->sb_hybrid) / 18) + 1;
1150
1151
3.61M
    if (g->block_type == 2) {
1152
        /* XXX: check for 8000 Hz */
1153
816k
        if (g->switch_point)
1154
725k
            mdct_long_end = 2;
1155
90.2k
        else
1156
90.2k
            mdct_long_end = 0;
1157
2.79M
    } else {
1158
2.79M
        mdct_long_end = sblimit;
1159
2.79M
    }
1160
1161
3.61M
    s->mpadsp.RENAME(imdct36_blocks)(sb_samples, mdct_buf, g->sb_hybrid,
1162
3.61M
                                     mdct_long_end, g->switch_point,
1163
3.61M
                                     g->block_type);
1164
1165
3.61M
    buf = mdct_buf + 4*18*(mdct_long_end >> 2) + (mdct_long_end & 3);
1166
3.61M
    ptr = g->sb_hybrid + 18 * mdct_long_end;
1167
1168
4.02M
    for (j = mdct_long_end; j < sblimit; j++) {
1169
        /* select frequency inversion */
1170
407k
        win     = RENAME(ff_mdct_win)[2 + (4  & -(j & 1))];
1171
407k
        out_ptr = sb_samples + j;
1172
1173
2.85M
        for (i = 0; i < 6; i++) {
1174
2.44M
            *out_ptr = buf[4*i];
1175
2.44M
            out_ptr += SBLIMIT;
1176
2.44M
        }
1177
407k
        imdct12(out2, ptr + 0);
1178
2.85M
        for (i = 0; i < 6; i++) {
1179
2.44M
            *out_ptr     = MULH3(out2[i    ], win[i    ], 1) + buf[4*(i + 6*1)];
1180
2.44M
            buf[4*(i + 6*2)] = MULH3(out2[i + 6], win[i + 6], 1);
1181
2.44M
            out_ptr += SBLIMIT;
1182
2.44M
        }
1183
407k
        imdct12(out2, ptr + 1);
1184
2.85M
        for (i = 0; i < 6; i++) {
1185
2.44M
            *out_ptr     = MULH3(out2[i    ], win[i    ], 1) + buf[4*(i + 6*2)];
1186
2.44M
            buf[4*(i + 6*0)] = MULH3(out2[i + 6], win[i + 6], 1);
1187
2.44M
            out_ptr += SBLIMIT;
1188
2.44M
        }
1189
407k
        imdct12(out2, ptr + 2);
1190
2.85M
        for (i = 0; i < 6; i++) {
1191
2.44M
            buf[4*(i + 6*0)] = MULH3(out2[i    ], win[i    ], 1) + buf[4*(i + 6*0)];
1192
2.44M
            buf[4*(i + 6*1)] = MULH3(out2[i + 6], win[i + 6], 1);
1193
2.44M
            buf[4*(i + 6*2)] = 0;
1194
2.44M
        }
1195
407k
        ptr += 18;
1196
407k
        buf += (j&3) != 3 ? 1 : (4*18-3);
1197
407k
    }
1198
    /* zero bands */
1199
111M
    for (j = sblimit; j < SBLIMIT; j++) {
1200
        /* overlap */
1201
107M
        out_ptr = sb_samples + j;
1202
2.04G
        for (i = 0; i < 18; i++) {
1203
1.93G
            *out_ptr = buf[4*i];
1204
1.93G
            buf[4*i]   = 0;
1205
1.93G
            out_ptr += SBLIMIT;
1206
1.93G
        }
1207
107M
        buf += (j&3) != 3 ? 1 : (4*18-3);
1208
107M
    }
1209
3.61M
}
mpegaudiodec_fixed.c:compute_imdct
Line
Count
Source
1134
3.21M
{
1135
3.21M
    INTFLOAT *win, *out_ptr, *ptr, *buf, *ptr1;
1136
3.21M
    INTFLOAT out2[12];
1137
3.21M
    int i, j, mdct_long_end, sblimit;
1138
1139
    /* find last non zero block */
1140
3.21M
    ptr  = g->sb_hybrid + 576;
1141
3.21M
    ptr1 = g->sb_hybrid + 2 * 18;
1142
294M
    while (ptr >= ptr1) {
1143
291M
        int32_t *p;
1144
291M
        ptr -= 6;
1145
291M
        p    = (int32_t*)ptr;
1146
291M
        if (p[0] | p[1] | p[2] | p[3] | p[4] | p[5])
1147
27.1k
            break;
1148
291M
    }
1149
3.21M
    sblimit = ((ptr - g->sb_hybrid) / 18) + 1;
1150
1151
3.21M
    if (g->block_type == 2) {
1152
        /* XXX: check for 8000 Hz */
1153
454k
        if (g->switch_point)
1154
434k
            mdct_long_end = 2;
1155
20.3k
        else
1156
20.3k
            mdct_long_end = 0;
1157
2.75M
    } else {
1158
2.75M
        mdct_long_end = sblimit;
1159
2.75M
    }
1160
1161
3.21M
    s->mpadsp.RENAME(imdct36_blocks)(sb_samples, mdct_buf, g->sb_hybrid,
1162
3.21M
                                     mdct_long_end, g->switch_point,
1163
3.21M
                                     g->block_type);
1164
1165
3.21M
    buf = mdct_buf + 4*18*(mdct_long_end >> 2) + (mdct_long_end & 3);
1166
3.21M
    ptr = g->sb_hybrid + 18 * mdct_long_end;
1167
1168
3.33M
    for (j = mdct_long_end; j < sblimit; j++) {
1169
        /* select frequency inversion */
1170
119k
        win     = RENAME(ff_mdct_win)[2 + (4  & -(j & 1))];
1171
119k
        out_ptr = sb_samples + j;
1172
1173
834k
        for (i = 0; i < 6; i++) {
1174
715k
            *out_ptr = buf[4*i];
1175
715k
            out_ptr += SBLIMIT;
1176
715k
        }
1177
119k
        imdct12(out2, ptr + 0);
1178
834k
        for (i = 0; i < 6; i++) {
1179
715k
            *out_ptr     = MULH3(out2[i    ], win[i    ], 1) + buf[4*(i + 6*1)];
1180
715k
            buf[4*(i + 6*2)] = MULH3(out2[i + 6], win[i + 6], 1);
1181
715k
            out_ptr += SBLIMIT;
1182
715k
        }
1183
119k
        imdct12(out2, ptr + 1);
1184
834k
        for (i = 0; i < 6; i++) {
1185
715k
            *out_ptr     = MULH3(out2[i    ], win[i    ], 1) + buf[4*(i + 6*2)];
1186
715k
            buf[4*(i + 6*0)] = MULH3(out2[i + 6], win[i + 6], 1);
1187
715k
            out_ptr += SBLIMIT;
1188
715k
        }
1189
119k
        imdct12(out2, ptr + 2);
1190
834k
        for (i = 0; i < 6; i++) {
1191
715k
            buf[4*(i + 6*0)] = MULH3(out2[i    ], win[i    ], 1) + buf[4*(i + 6*0)];
1192
715k
            buf[4*(i + 6*1)] = MULH3(out2[i + 6], win[i + 6], 1);
1193
715k
            buf[4*(i + 6*2)] = 0;
1194
715k
        }
1195
119k
        ptr += 18;
1196
119k
        buf += (j&3) != 3 ? 1 : (4*18-3);
1197
119k
    }
1198
    /* zero bands */
1199
99.1M
    for (j = sblimit; j < SBLIMIT; j++) {
1200
        /* overlap */
1201
95.9M
        out_ptr = sb_samples + j;
1202
1.82G
        for (i = 0; i < 18; i++) {
1203
1.72G
            *out_ptr = buf[4*i];
1204
1.72G
            buf[4*i]   = 0;
1205
1.72G
            out_ptr += SBLIMIT;
1206
1.72G
        }
1207
95.9M
        buf += (j&3) != 3 ? 1 : (4*18-3);
1208
95.9M
    }
1209
3.21M
}
1210
1211
/* main layer3 decoding function */
1212
static int mp_decode_layer3(MPADecodeContext *s)
1213
3.24M
{
1214
3.24M
    int nb_granules, main_data_begin;
1215
3.24M
    int gr, ch, blocksplit_flag, i, j, k, n, bits_pos;
1216
3.24M
    GranuleDef *g;
1217
3.24M
    int16_t exponents[576]; //FIXME try INTFLOAT
1218
3.24M
    int ret;
1219
1220
    /* read side info */
1221
3.24M
    if (s->lsf) {
1222
2.86M
        ret = handle_crc(s, ((s->nb_channels == 1) ? 8*9  : 8*17));
1223
2.86M
        main_data_begin = get_bits(&s->gb, 8);
1224
2.86M
        skip_bits(&s->gb, s->nb_channels);
1225
2.86M
        nb_granules = 1;
1226
2.86M
    } else {
1227
371k
        ret = handle_crc(s, ((s->nb_channels == 1) ? 8*17 : 8*32));
1228
371k
        main_data_begin = get_bits(&s->gb, 9);
1229
371k
        if (s->nb_channels == 2)
1230
345k
            skip_bits(&s->gb, 3);
1231
25.6k
        else
1232
25.6k
            skip_bits(&s->gb, 5);
1233
371k
        nb_granules = 2;
1234
1.08M
        for (ch = 0; ch < s->nb_channels; ch++) {
1235
717k
            s->granules[ch][0].scfsi = 0;/* all scale factors are transmitted */
1236
717k
            s->granules[ch][1].scfsi = get_bits(&s->gb, 4);
1237
717k
        }
1238
371k
    }
1239
3.24M
    if (ret < 0)
1240
5.98k
        return ret;
1241
1242
6.68M
    for (gr = 0; gr < nb_granules; gr++) {
1243
10.4M
        for (ch = 0; ch < s->nb_channels; ch++) {
1244
7.01M
            ff_dlog(s->avctx, "gr=%d ch=%d: side_info\n", gr, ch);
1245
7.01M
            g = &s->granules[ch][gr];
1246
7.01M
            g->part2_3_length = get_bits(&s->gb, 12);
1247
7.01M
            g->big_values     = get_bits(&s->gb,  9);
1248
7.01M
            if (g->big_values > 288) {
1249
90.0k
                av_log(s->avctx, AV_LOG_ERROR, "big_values too big\n");
1250
90.0k
                return AVERROR_INVALIDDATA;
1251
90.0k
            }
1252
1253
6.92M
            g->global_gain = get_bits(&s->gb, 8);
1254
            /* if MS stereo only is selected, we precompute the
1255
               1/sqrt(2) renormalization factor */
1256
6.92M
            if ((s->mode_ext & (MODE_EXT_MS_STEREO | MODE_EXT_I_STEREO)) ==
1257
6.92M
                MODE_EXT_MS_STEREO)
1258
789k
                g->global_gain -= 2;
1259
6.92M
            if (s->lsf)
1260
5.61M
                g->scalefac_compress = get_bits(&s->gb, 9);
1261
1.31M
            else
1262
1.31M
                g->scalefac_compress = get_bits(&s->gb, 4);
1263
6.92M
            blocksplit_flag = get_bits1(&s->gb);
1264
6.92M
            if (blocksplit_flag) {
1265
3.71M
                g->block_type = get_bits(&s->gb, 2);
1266
3.71M
                if (g->block_type == 0) {
1267
29.2k
                    av_log(s->avctx, AV_LOG_ERROR, "invalid block type\n");
1268
29.2k
                    return AVERROR_INVALIDDATA;
1269
29.2k
                }
1270
3.68M
                g->switch_point = get_bits1(&s->gb);
1271
11.0M
                for (i = 0; i < 2; i++)
1272
7.37M
                    g->table_select[i] = get_bits(&s->gb, 5);
1273
14.7M
                for (i = 0; i < 3; i++)
1274
11.0M
                    g->subblock_gain[i] = get_bits(&s->gb, 3);
1275
3.68M
                init_short_region(s, g);
1276
3.68M
            } else {
1277
3.21M
                int region_address1, region_address2;
1278
3.21M
                g->block_type = 0;
1279
3.21M
                g->switch_point = 0;
1280
12.8M
                for (i = 0; i < 3; i++)
1281
9.64M
                    g->table_select[i] = get_bits(&s->gb, 5);
1282
                /* compute huffman coded region sizes */
1283
3.21M
                region_address1 = get_bits(&s->gb, 4);
1284
3.21M
                region_address2 = get_bits(&s->gb, 3);
1285
3.21M
                ff_dlog(s->avctx, "region1=%d region2=%d\n",
1286
3.21M
                        region_address1, region_address2);
1287
3.21M
                init_long_region(s, g, region_address1, region_address2);
1288
3.21M
            }
1289
6.89M
            region_offset2size(g);
1290
6.89M
            compute_band_indexes(s, g);
1291
1292
6.89M
            g->preflag = 0;
1293
6.89M
            if (!s->lsf)
1294
1.29M
                g->preflag = get_bits1(&s->gb);
1295
6.89M
            g->scalefac_scale     = get_bits1(&s->gb);
1296
6.89M
            g->count1table_select = get_bits1(&s->gb);
1297
6.89M
            ff_dlog(s->avctx, "block_type=%d switch_point=%d\n",
1298
6.89M
                    g->block_type, g->switch_point);
1299
6.89M
        }
1300
3.57M
    }
1301
1302
3.11M
    if (!s->adu_mode) {
1303
2.67M
        int skip;
1304
2.67M
        const uint8_t *ptr = s->gb.buffer + (get_bits_count(&s->gb) >> 3);
1305
2.67M
        s->extrasize = av_clip((get_bits_left(&s->gb) >> 3) - s->extrasize, 0,
1306
2.67M
                               FFMAX(0, LAST_BUF_SIZE - s->last_buf_size));
1307
2.67M
        av_assert1((get_bits_count(&s->gb) & 7) == 0);
1308
        /* now we get bits from the main_data_begin offset */
1309
2.67M
        ff_dlog(s->avctx, "seekback:%d, lastbuf:%d\n",
1310
2.67M
                main_data_begin, s->last_buf_size);
1311
1312
2.67M
        memcpy(s->last_buf + s->last_buf_size, ptr, s->extrasize);
1313
2.67M
        s->in_gb = s->gb;
1314
2.67M
        init_get_bits(&s->gb, s->last_buf, (s->last_buf_size + s->extrasize) * 8);
1315
2.67M
        s->last_buf_size <<= 3;
1316
3.62M
        for (gr = 0; gr < nb_granules && (s->last_buf_size >> 3) < main_data_begin; gr++) {
1317
2.83M
            for (ch = 0; ch < s->nb_channels; ch++) {
1318
1.88M
                g = &s->granules[ch][gr];
1319
1.88M
                s->last_buf_size += g->part2_3_length;
1320
1.88M
                memset(g->sb_hybrid, 0, sizeof(g->sb_hybrid));
1321
1.88M
                compute_imdct(s, g, &s->sb_samples[ch][18 * gr][0], s->mdct_buf[ch]);
1322
1.88M
            }
1323
950k
        }
1324
2.67M
        skip = s->last_buf_size - 8 * main_data_begin;
1325
2.67M
        if (skip >= s->gb.size_in_bits - s->extrasize * 8 && s->in_gb.buffer) {
1326
710k
            skip_bits_long(&s->in_gb, skip - s->gb.size_in_bits + s->extrasize * 8);
1327
710k
            s->gb           = s->in_gb;
1328
710k
            s->in_gb.buffer = NULL;
1329
710k
            s->extrasize    = 0;
1330
1.96M
        } else {
1331
1.96M
            skip_bits_long(&s->gb, skip);
1332
1.96M
        }
1333
2.67M
    } else {
1334
439k
        gr = 0;
1335
439k
        s->extrasize = 0;
1336
439k
    }
1337
1338
5.61M
    for (; gr < nb_granules; gr++) {
1339
7.43M
        for (ch = 0; ch < s->nb_channels; ch++) {
1340
4.93M
            g = &s->granules[ch][gr];
1341
4.93M
            bits_pos = get_bits_count(&s->gb);
1342
1343
4.93M
            if (!s->lsf) {
1344
1.24M
                uint8_t *sc;
1345
1.24M
                int slen, slen1, slen2;
1346
1347
                /* MPEG-1 scale factors */
1348
1.24M
                slen1 = ff_slen_table[0][g->scalefac_compress];
1349
1.24M
                slen2 = ff_slen_table[1][g->scalefac_compress];
1350
1.24M
                ff_dlog(s->avctx, "slen1=%d slen2=%d\n", slen1, slen2);
1351
1.24M
                if (g->block_type == 2) {
1352
68.5k
                    n = g->switch_point ? 17 : 18;
1353
68.5k
                    j = 0;
1354
68.5k
                    if (slen1) {
1355
934k
                        for (i = 0; i < n; i++)
1356
884k
                            g->scale_factors[j++] = get_bits(&s->gb, slen1);
1357
50.2k
                    } else {
1358
337k
                        for (i = 0; i < n; i++)
1359
319k
                            g->scale_factors[j++] = 0;
1360
18.2k
                    }
1361
68.5k
                    if (slen2) {
1362
1.10M
                        for (i = 0; i < 18; i++)
1363
1.04M
                            g->scale_factors[j++] = get_bits(&s->gb, slen2);
1364
232k
                        for (i = 0; i < 3; i++)
1365
174k
                            g->scale_factors[j++] = 0;
1366
58.0k
                    } else {
1367
230k
                        for (i = 0; i < 21; i++)
1368
220k
                            g->scale_factors[j++] = 0;
1369
10.4k
                    }
1370
1.17M
                } else {
1371
1.17M
                    sc = s->granules[ch][0].scale_factors;
1372
1.17M
                    j = 0;
1373
5.86M
                    for (k = 0; k < 4; k++) {
1374
4.69M
                        n = k == 0 ? 6 : 5;
1375
4.69M
                        if ((g->scfsi & (0x8 >> k)) == 0) {
1376
4.56M
                            slen = (k < 2) ? slen1 : slen2;
1377
4.56M
                            if (slen) {
1378
972k
                                for (i = 0; i < n; i++)
1379
816k
                                    g->scale_factors[j++] = get_bits(&s->gb, slen);
1380
4.40M
                            } else {
1381
27.5M
                                for (i = 0; i < n; i++)
1382
23.1M
                                    g->scale_factors[j++] = 0;
1383
4.40M
                            }
1384
4.56M
                        } else {
1385
                            /* simply copy from last granule */
1386
829k
                            for (i = 0; i < n; i++) {
1387
694k
                                g->scale_factors[j] = sc[j];
1388
694k
                                j++;
1389
694k
                            }
1390
134k
                        }
1391
4.69M
                    }
1392
1.17M
                    g->scale_factors[j++] = 0;
1393
1.17M
                }
1394
3.69M
            } else {
1395
3.69M
                int tindex, tindex2, slen[4], sl, sf;
1396
1397
                /* LSF scale factors */
1398
3.69M
                if (g->block_type == 2)
1399
741k
                    tindex = g->switch_point ? 2 : 1;
1400
2.95M
                else
1401
2.95M
                    tindex = 0;
1402
1403
3.69M
                sf = g->scalefac_compress;
1404
3.69M
                if ((s->mode_ext & MODE_EXT_I_STEREO) && ch == 1) {
1405
                    /* intensity stereo case */
1406
1.37M
                    sf >>= 1;
1407
1.37M
                    if (sf < 180) {
1408
1.27M
                        lsf_sf_expand(slen, sf, 6, 6, 0);
1409
1.27M
                        tindex2 = 3;
1410
1.27M
                    } else if (sf < 244) {
1411
92.6k
                        lsf_sf_expand(slen, sf - 180, 4, 4, 0);
1412
92.6k
                        tindex2 = 4;
1413
92.6k
                    } else {
1414
7.82k
                        lsf_sf_expand(slen, sf - 244, 3, 0, 0);
1415
7.82k
                        tindex2 = 5;
1416
7.82k
                    }
1417
2.31M
                } else {
1418
                    /* normal case */
1419
2.31M
                    if (sf < 400) {
1420
1.70M
                        lsf_sf_expand(slen, sf, 5, 4, 4);
1421
1.70M
                        tindex2 = 0;
1422
1.70M
                    } else if (sf < 500) {
1423
598k
                        lsf_sf_expand(slen, sf - 400, 5, 4, 0);
1424
598k
                        tindex2 = 1;
1425
598k
                    } else {
1426
16.2k
                        lsf_sf_expand(slen, sf - 500, 3, 0, 0);
1427
16.2k
                        tindex2 = 2;
1428
16.2k
                        g->preflag = 1;
1429
16.2k
                    }
1430
2.31M
                }
1431
1432
3.69M
                j = 0;
1433
18.4M
                for (k = 0; k < 4; k++) {
1434
14.7M
                    n  = ff_lsf_nsf_table[tindex2][tindex][k];
1435
14.7M
                    sl = slen[k];
1436
14.7M
                    if (sl) {
1437
53.2M
                        for (i = 0; i < n; i++)
1438
46.5M
                            g->scale_factors[j++] = get_bits(&s->gb, sl);
1439
8.05M
                    } else {
1440
48.1M
                        for (i = 0; i < n; i++)
1441
40.1M
                            g->scale_factors[j++] = 0;
1442
8.05M
                    }
1443
14.7M
                }
1444
                /* XXX: should compute exact size */
1445
64.8M
                for (; j < 40; j++)
1446
61.1M
                    g->scale_factors[j] = 0;
1447
3.69M
            }
1448
1449
4.93M
            exponents_from_scale_factors(s, g, exponents);
1450
1451
            /* read Huffman coded residue */
1452
4.93M
            huffman_decode(s, g, exponents, bits_pos + g->part2_3_length);
1453
4.93M
        } /* ch */
1454
1455
2.49M
        if (s->mode == MPA_JSTEREO)
1456
2.04M
            compute_stereo(s, &s->granules[0][gr], &s->granules[1][gr]);
1457
1458
7.43M
        for (ch = 0; ch < s->nb_channels; ch++) {
1459
4.93M
            g = &s->granules[ch][gr];
1460
1461
4.93M
            reorder_block(s, g);
1462
4.93M
            compute_antialias(s, g);
1463
4.93M
            compute_imdct(s, g, &s->sb_samples[ch][18 * gr][0], s->mdct_buf[ch]);
1464
4.93M
        }
1465
2.49M
    } /* gr */
1466
3.11M
    if (get_bits_count(&s->gb) < 0)
1467
0
        skip_bits_long(&s->gb, -get_bits_count(&s->gb));
1468
3.11M
    return nb_granules * 18;
1469
3.23M
}
mpegaudiodec_float.c:mp_decode_layer3
Line
Count
Source
1213
1.78M
{
1214
1.78M
    int nb_granules, main_data_begin;
1215
1.78M
    int gr, ch, blocksplit_flag, i, j, k, n, bits_pos;
1216
1.78M
    GranuleDef *g;
1217
1.78M
    int16_t exponents[576]; //FIXME try INTFLOAT
1218
1.78M
    int ret;
1219
1220
    /* read side info */
1221
1.78M
    if (s->lsf) {
1222
1.63M
        ret = handle_crc(s, ((s->nb_channels == 1) ? 8*9  : 8*17));
1223
1.63M
        main_data_begin = get_bits(&s->gb, 8);
1224
1.63M
        skip_bits(&s->gb, s->nb_channels);
1225
1.63M
        nb_granules = 1;
1226
1.63M
    } else {
1227
153k
        ret = handle_crc(s, ((s->nb_channels == 1) ? 8*17 : 8*32));
1228
153k
        main_data_begin = get_bits(&s->gb, 9);
1229
153k
        if (s->nb_channels == 2)
1230
138k
            skip_bits(&s->gb, 3);
1231
14.5k
        else
1232
14.5k
            skip_bits(&s->gb, 5);
1233
153k
        nb_granules = 2;
1234
444k
        for (ch = 0; ch < s->nb_channels; ch++) {
1235
291k
            s->granules[ch][0].scfsi = 0;/* all scale factors are transmitted */
1236
291k
            s->granules[ch][1].scfsi = get_bits(&s->gb, 4);
1237
291k
        }
1238
153k
    }
1239
1.78M
    if (ret < 0)
1240
2.24k
        return ret;
1241
1242
3.61M
    for (gr = 0; gr < nb_granules; gr++) {
1243
5.58M
        for (ch = 0; ch < s->nb_channels; ch++) {
1244
3.75M
            ff_dlog(s->avctx, "gr=%d ch=%d: side_info\n", gr, ch);
1245
3.75M
            g = &s->granules[ch][gr];
1246
3.75M
            g->part2_3_length = get_bits(&s->gb, 12);
1247
3.75M
            g->big_values     = get_bits(&s->gb,  9);
1248
3.75M
            if (g->big_values > 288) {
1249
64.1k
                av_log(s->avctx, AV_LOG_ERROR, "big_values too big\n");
1250
64.1k
                return AVERROR_INVALIDDATA;
1251
64.1k
            }
1252
1253
3.69M
            g->global_gain = get_bits(&s->gb, 8);
1254
            /* if MS stereo only is selected, we precompute the
1255
               1/sqrt(2) renormalization factor */
1256
3.69M
            if ((s->mode_ext & (MODE_EXT_MS_STEREO | MODE_EXT_I_STEREO)) ==
1257
3.69M
                MODE_EXT_MS_STEREO)
1258
336k
                g->global_gain -= 2;
1259
3.69M
            if (s->lsf)
1260
3.18M
                g->scalefac_compress = get_bits(&s->gb, 9);
1261
507k
            else
1262
507k
                g->scalefac_compress = get_bits(&s->gb, 4);
1263
3.69M
            blocksplit_flag = get_bits1(&s->gb);
1264
3.69M
            if (blocksplit_flag) {
1265
2.12M
                g->block_type = get_bits(&s->gb, 2);
1266
2.12M
                if (g->block_type == 0) {
1267
22.5k
                    av_log(s->avctx, AV_LOG_ERROR, "invalid block type\n");
1268
22.5k
                    return AVERROR_INVALIDDATA;
1269
22.5k
                }
1270
2.10M
                g->switch_point = get_bits1(&s->gb);
1271
6.31M
                for (i = 0; i < 2; i++)
1272
4.21M
                    g->table_select[i] = get_bits(&s->gb, 5);
1273
8.42M
                for (i = 0; i < 3; i++)
1274
6.31M
                    g->subblock_gain[i] = get_bits(&s->gb, 3);
1275
2.10M
                init_short_region(s, g);
1276
2.10M
            } else {
1277
1.56M
                int region_address1, region_address2;
1278
1.56M
                g->block_type = 0;
1279
1.56M
                g->switch_point = 0;
1280
6.25M
                for (i = 0; i < 3; i++)
1281
4.68M
                    g->table_select[i] = get_bits(&s->gb, 5);
1282
                /* compute huffman coded region sizes */
1283
1.56M
                region_address1 = get_bits(&s->gb, 4);
1284
1.56M
                region_address2 = get_bits(&s->gb, 3);
1285
1.56M
                ff_dlog(s->avctx, "region1=%d region2=%d\n",
1286
1.56M
                        region_address1, region_address2);
1287
1.56M
                init_long_region(s, g, region_address1, region_address2);
1288
1.56M
            }
1289
3.66M
            region_offset2size(g);
1290
3.66M
            compute_band_indexes(s, g);
1291
1292
3.66M
            g->preflag = 0;
1293
3.66M
            if (!s->lsf)
1294
490k
                g->preflag = get_bits1(&s->gb);
1295
3.66M
            g->scalefac_scale     = get_bits1(&s->gb);
1296
3.66M
            g->count1table_select = get_bits1(&s->gb);
1297
3.66M
            ff_dlog(s->avctx, "block_type=%d switch_point=%d\n",
1298
3.66M
                    g->block_type, g->switch_point);
1299
3.66M
        }
1300
1.91M
    }
1301
1302
1.69M
    if (!s->adu_mode) {
1303
1.53M
        int skip;
1304
1.53M
        const uint8_t *ptr = s->gb.buffer + (get_bits_count(&s->gb) >> 3);
1305
1.53M
        s->extrasize = av_clip((get_bits_left(&s->gb) >> 3) - s->extrasize, 0,
1306
1.53M
                               FFMAX(0, LAST_BUF_SIZE - s->last_buf_size));
1307
1.53M
        av_assert1((get_bits_count(&s->gb) & 7) == 0);
1308
        /* now we get bits from the main_data_begin offset */
1309
1.53M
        ff_dlog(s->avctx, "seekback:%d, lastbuf:%d\n",
1310
1.53M
                main_data_begin, s->last_buf_size);
1311
1312
1.53M
        memcpy(s->last_buf + s->last_buf_size, ptr, s->extrasize);
1313
1.53M
        s->in_gb = s->gb;
1314
1.53M
        init_get_bits(&s->gb, s->last_buf, (s->last_buf_size + s->extrasize) * 8);
1315
1.53M
        s->last_buf_size <<= 3;
1316
2.10M
        for (gr = 0; gr < nb_granules && (s->last_buf_size >> 3) < main_data_begin; gr++) {
1317
1.68M
            for (ch = 0; ch < s->nb_channels; ch++) {
1318
1.12M
                g = &s->granules[ch][gr];
1319
1.12M
                s->last_buf_size += g->part2_3_length;
1320
1.12M
                memset(g->sb_hybrid, 0, sizeof(g->sb_hybrid));
1321
1.12M
                compute_imdct(s, g, &s->sb_samples[ch][18 * gr][0], s->mdct_buf[ch]);
1322
1.12M
            }
1323
563k
        }
1324
1.53M
        skip = s->last_buf_size - 8 * main_data_begin;
1325
1.53M
        if (skip >= s->gb.size_in_bits - s->extrasize * 8 && s->in_gb.buffer) {
1326
372k
            skip_bits_long(&s->in_gb, skip - s->gb.size_in_bits + s->extrasize * 8);
1327
372k
            s->gb           = s->in_gb;
1328
372k
            s->in_gb.buffer = NULL;
1329
372k
            s->extrasize    = 0;
1330
1.16M
        } else {
1331
1.16M
            skip_bits_long(&s->gb, skip);
1332
1.16M
        }
1333
1.53M
    } else {
1334
159k
        gr = 0;
1335
159k
        s->extrasize = 0;
1336
159k
    }
1337
1338
2.95M
    for (; gr < nb_granules; gr++) {
1339
3.74M
        for (ch = 0; ch < s->nb_channels; ch++) {
1340
2.48M
            g = &s->granules[ch][gr];
1341
2.48M
            bits_pos = get_bits_count(&s->gb);
1342
1343
2.48M
            if (!s->lsf) {
1344
462k
                uint8_t *sc;
1345
462k
                int slen, slen1, slen2;
1346
1347
                /* MPEG-1 scale factors */
1348
462k
                slen1 = ff_slen_table[0][g->scalefac_compress];
1349
462k
                slen2 = ff_slen_table[1][g->scalefac_compress];
1350
462k
                ff_dlog(s->avctx, "slen1=%d slen2=%d\n", slen1, slen2);
1351
462k
                if (g->block_type == 2) {
1352
38.1k
                    n = g->switch_point ? 17 : 18;
1353
38.1k
                    j = 0;
1354
38.1k
                    if (slen1) {
1355
530k
                        for (i = 0; i < n; i++)
1356
501k
                            g->scale_factors[j++] = get_bits(&s->gb, slen1);
1357
28.4k
                    } else {
1358
179k
                        for (i = 0; i < n; i++)
1359
169k
                            g->scale_factors[j++] = 0;
1360
9.70k
                    }
1361
38.1k
                    if (slen2) {
1362
622k
                        for (i = 0; i < 18; i++)
1363
589k
                            g->scale_factors[j++] = get_bits(&s->gb, slen2);
1364
130k
                        for (i = 0; i < 3; i++)
1365
98.2k
                            g->scale_factors[j++] = 0;
1366
32.7k
                    } else {
1367
119k
                        for (i = 0; i < 21; i++)
1368
114k
                            g->scale_factors[j++] = 0;
1369
5.43k
                    }
1370
424k
                } else {
1371
424k
                    sc = s->granules[ch][0].scale_factors;
1372
424k
                    j = 0;
1373
2.12M
                    for (k = 0; k < 4; k++) {
1374
1.69M
                        n = k == 0 ? 6 : 5;
1375
1.69M
                        if ((g->scfsi & (0x8 >> k)) == 0) {
1376
1.63M
                            slen = (k < 2) ? slen1 : slen2;
1377
1.63M
                            if (slen) {
1378
489k
                                for (i = 0; i < n; i++)
1379
410k
                                    g->scale_factors[j++] = get_bits(&s->gb, slen);
1380
1.55M
                            } else {
1381
9.71M
                                for (i = 0; i < n; i++)
1382
8.16M
                                    g->scale_factors[j++] = 0;
1383
1.55M
                            }
1384
1.63M
                        } else {
1385
                            /* simply copy from last granule */
1386
393k
                            for (i = 0; i < n; i++) {
1387
330k
                                g->scale_factors[j] = sc[j];
1388
330k
                                j++;
1389
330k
                            }
1390
63.7k
                        }
1391
1.69M
                    }
1392
424k
                    g->scale_factors[j++] = 0;
1393
424k
                }
1394
2.02M
            } else {
1395
2.02M
                int tindex, tindex2, slen[4], sl, sf;
1396
1397
                /* LSF scale factors */
1398
2.02M
                if (g->block_type == 2)
1399
489k
                    tindex = g->switch_point ? 2 : 1;
1400
1.53M
                else
1401
1.53M
                    tindex = 0;
1402
1403
2.02M
                sf = g->scalefac_compress;
1404
2.02M
                if ((s->mode_ext & MODE_EXT_I_STEREO) && ch == 1) {
1405
                    /* intensity stereo case */
1406
895k
                    sf >>= 1;
1407
895k
                    if (sf < 180) {
1408
802k
                        lsf_sf_expand(slen, sf, 6, 6, 0);
1409
802k
                        tindex2 = 3;
1410
802k
                    } else if (sf < 244) {
1411
88.8k
                        lsf_sf_expand(slen, sf - 180, 4, 4, 0);
1412
88.8k
                        tindex2 = 4;
1413
88.8k
                    } else {
1414
4.05k
                        lsf_sf_expand(slen, sf - 244, 3, 0, 0);
1415
4.05k
                        tindex2 = 5;
1416
4.05k
                    }
1417
1.13M
                } else {
1418
                    /* normal case */
1419
1.13M
                    if (sf < 400) {
1420
784k
                        lsf_sf_expand(slen, sf, 5, 4, 4);
1421
784k
                        tindex2 = 0;
1422
784k
                    } else if (sf < 500) {
1423
341k
                        lsf_sf_expand(slen, sf - 400, 5, 4, 0);
1424
341k
                        tindex2 = 1;
1425
341k
                    } else {
1426
6.01k
                        lsf_sf_expand(slen, sf - 500, 3, 0, 0);
1427
6.01k
                        tindex2 = 2;
1428
6.01k
                        g->preflag = 1;
1429
6.01k
                    }
1430
1.13M
                }
1431
1432
2.02M
                j = 0;
1433
10.1M
                for (k = 0; k < 4; k++) {
1434
8.11M
                    n  = ff_lsf_nsf_table[tindex2][tindex][k];
1435
8.11M
                    sl = slen[k];
1436
8.11M
                    if (sl) {
1437
29.9M
                        for (i = 0; i < n; i++)
1438
26.3M
                            g->scale_factors[j++] = get_bits(&s->gb, sl);
1439
4.44M
                    } else {
1440
26.7M
                        for (i = 0; i < n; i++)
1441
22.2M
                            g->scale_factors[j++] = 0;
1442
4.44M
                    }
1443
8.11M
                }
1444
                /* XXX: should compute exact size */
1445
34.5M
                for (; j < 40; j++)
1446
32.5M
                    g->scale_factors[j] = 0;
1447
2.02M
            }
1448
1449
2.48M
            exponents_from_scale_factors(s, g, exponents);
1450
1451
            /* read Huffman coded residue */
1452
2.48M
            huffman_decode(s, g, exponents, bits_pos + g->part2_3_length);
1453
2.48M
        } /* ch */
1454
1455
1.25M
        if (s->mode == MPA_JSTEREO)
1456
1.16M
            compute_stereo(s, &s->granules[0][gr], &s->granules[1][gr]);
1457
1458
3.74M
        for (ch = 0; ch < s->nb_channels; ch++) {
1459
2.48M
            g = &s->granules[ch][gr];
1460
1461
2.48M
            reorder_block(s, g);
1462
2.48M
            compute_antialias(s, g);
1463
2.48M
            compute_imdct(s, g, &s->sb_samples[ch][18 * gr][0], s->mdct_buf[ch]);
1464
2.48M
        }
1465
1.25M
    } /* gr */
1466
1.69M
    if (get_bits_count(&s->gb) < 0)
1467
0
        skip_bits_long(&s->gb, -get_bits_count(&s->gb));
1468
1.69M
    return nb_granules * 18;
1469
1.78M
}
mpegaudiodec_fixed.c:mp_decode_layer3
Line
Count
Source
1213
1.45M
{
1214
1.45M
    int nb_granules, main_data_begin;
1215
1.45M
    int gr, ch, blocksplit_flag, i, j, k, n, bits_pos;
1216
1.45M
    GranuleDef *g;
1217
1.45M
    int16_t exponents[576]; //FIXME try INTFLOAT
1218
1.45M
    int ret;
1219
1220
    /* read side info */
1221
1.45M
    if (s->lsf) {
1222
1.23M
        ret = handle_crc(s, ((s->nb_channels == 1) ? 8*9  : 8*17));
1223
1.23M
        main_data_begin = get_bits(&s->gb, 8);
1224
1.23M
        skip_bits(&s->gb, s->nb_channels);
1225
1.23M
        nb_granules = 1;
1226
1.23M
    } else {
1227
218k
        ret = handle_crc(s, ((s->nb_channels == 1) ? 8*17 : 8*32));
1228
218k
        main_data_begin = get_bits(&s->gb, 9);
1229
218k
        if (s->nb_channels == 2)
1230
207k
            skip_bits(&s->gb, 3);
1231
11.1k
        else
1232
11.1k
            skip_bits(&s->gb, 5);
1233
218k
        nb_granules = 2;
1234
643k
        for (ch = 0; ch < s->nb_channels; ch++) {
1235
425k
            s->granules[ch][0].scfsi = 0;/* all scale factors are transmitted */
1236
425k
            s->granules[ch][1].scfsi = get_bits(&s->gb, 4);
1237
425k
        }
1238
218k
    }
1239
1.45M
    if (ret < 0)
1240
3.73k
        return ret;
1241
1242
3.07M
    for (gr = 0; gr < nb_granules; gr++) {
1243
4.88M
        for (ch = 0; ch < s->nb_channels; ch++) {
1244
3.26M
            ff_dlog(s->avctx, "gr=%d ch=%d: side_info\n", gr, ch);
1245
3.26M
            g = &s->granules[ch][gr];
1246
3.26M
            g->part2_3_length = get_bits(&s->gb, 12);
1247
3.26M
            g->big_values     = get_bits(&s->gb,  9);
1248
3.26M
            if (g->big_values > 288) {
1249
25.8k
                av_log(s->avctx, AV_LOG_ERROR, "big_values too big\n");
1250
25.8k
                return AVERROR_INVALIDDATA;
1251
25.8k
            }
1252
1253
3.23M
            g->global_gain = get_bits(&s->gb, 8);
1254
            /* if MS stereo only is selected, we precompute the
1255
               1/sqrt(2) renormalization factor */
1256
3.23M
            if ((s->mode_ext & (MODE_EXT_MS_STEREO | MODE_EXT_I_STEREO)) ==
1257
3.23M
                MODE_EXT_MS_STEREO)
1258
452k
                g->global_gain -= 2;
1259
3.23M
            if (s->lsf)
1260
2.42M
                g->scalefac_compress = get_bits(&s->gb, 9);
1261
807k
            else
1262
807k
                g->scalefac_compress = get_bits(&s->gb, 4);
1263
3.23M
            blocksplit_flag = get_bits1(&s->gb);
1264
3.23M
            if (blocksplit_flag) {
1265
1.58M
                g->block_type = get_bits(&s->gb, 2);
1266
1.58M
                if (g->block_type == 0) {
1267
6.73k
                    av_log(s->avctx, AV_LOG_ERROR, "invalid block type\n");
1268
6.73k
                    return AVERROR_INVALIDDATA;
1269
6.73k
                }
1270
1.57M
                g->switch_point = get_bits1(&s->gb);
1271
4.73M
                for (i = 0; i < 2; i++)
1272
3.15M
                    g->table_select[i] = get_bits(&s->gb, 5);
1273
6.31M
                for (i = 0; i < 3; i++)
1274
4.73M
                    g->subblock_gain[i] = get_bits(&s->gb, 3);
1275
1.57M
                init_short_region(s, g);
1276
1.65M
            } else {
1277
1.65M
                int region_address1, region_address2;
1278
1.65M
                g->block_type = 0;
1279
1.65M
                g->switch_point = 0;
1280
6.60M
                for (i = 0; i < 3; i++)
1281
4.95M
                    g->table_select[i] = get_bits(&s->gb, 5);
1282
                /* compute huffman coded region sizes */
1283
1.65M
                region_address1 = get_bits(&s->gb, 4);
1284
1.65M
                region_address2 = get_bits(&s->gb, 3);
1285
1.65M
                ff_dlog(s->avctx, "region1=%d region2=%d\n",
1286
1.65M
                        region_address1, region_address2);
1287
1.65M
                init_long_region(s, g, region_address1, region_address2);
1288
1.65M
            }
1289
3.23M
            region_offset2size(g);
1290
3.23M
            compute_band_indexes(s, g);
1291
1292
3.23M
            g->preflag = 0;
1293
3.23M
            if (!s->lsf)
1294
805k
                g->preflag = get_bits1(&s->gb);
1295
3.23M
            g->scalefac_scale     = get_bits1(&s->gb);
1296
3.23M
            g->count1table_select = get_bits1(&s->gb);
1297
3.23M
            ff_dlog(s->avctx, "block_type=%d switch_point=%d\n",
1298
3.23M
                    g->block_type, g->switch_point);
1299
3.23M
        }
1300
1.65M
    }
1301
1302
1.41M
    if (!s->adu_mode) {
1303
1.13M
        int skip;
1304
1.13M
        const uint8_t *ptr = s->gb.buffer + (get_bits_count(&s->gb) >> 3);
1305
1.13M
        s->extrasize = av_clip((get_bits_left(&s->gb) >> 3) - s->extrasize, 0,
1306
1.13M
                               FFMAX(0, LAST_BUF_SIZE - s->last_buf_size));
1307
1.13M
        av_assert1((get_bits_count(&s->gb) & 7) == 0);
1308
        /* now we get bits from the main_data_begin offset */
1309
1.13M
        ff_dlog(s->avctx, "seekback:%d, lastbuf:%d\n",
1310
1.13M
                main_data_begin, s->last_buf_size);
1311
1312
1.13M
        memcpy(s->last_buf + s->last_buf_size, ptr, s->extrasize);
1313
1.13M
        s->in_gb = s->gb;
1314
1.13M
        init_get_bits(&s->gb, s->last_buf, (s->last_buf_size + s->extrasize) * 8);
1315
1.13M
        s->last_buf_size <<= 3;
1316
1.52M
        for (gr = 0; gr < nb_granules && (s->last_buf_size >> 3) < main_data_begin; gr++) {
1317
1.15M
            for (ch = 0; ch < s->nb_channels; ch++) {
1318
765k
                g = &s->granules[ch][gr];
1319
765k
                s->last_buf_size += g->part2_3_length;
1320
765k
                memset(g->sb_hybrid, 0, sizeof(g->sb_hybrid));
1321
765k
                compute_imdct(s, g, &s->sb_samples[ch][18 * gr][0], s->mdct_buf[ch]);
1322
765k
            }
1323
386k
        }
1324
1.13M
        skip = s->last_buf_size - 8 * main_data_begin;
1325
1.13M
        if (skip >= s->gb.size_in_bits - s->extrasize * 8 && s->in_gb.buffer) {
1326
337k
            skip_bits_long(&s->in_gb, skip - s->gb.size_in_bits + s->extrasize * 8);
1327
337k
            s->gb           = s->in_gb;
1328
337k
            s->in_gb.buffer = NULL;
1329
337k
            s->extrasize    = 0;
1330
800k
        } else {
1331
800k
            skip_bits_long(&s->gb, skip);
1332
800k
        }
1333
1.13M
    } else {
1334
280k
        gr = 0;
1335
280k
        s->extrasize = 0;
1336
280k
    }
1337
1338
2.65M
    for (; gr < nb_granules; gr++) {
1339
3.68M
        for (ch = 0; ch < s->nb_channels; ch++) {
1340
2.44M
            g = &s->granules[ch][gr];
1341
2.44M
            bits_pos = get_bits_count(&s->gb);
1342
1343
2.44M
            if (!s->lsf) {
1344
780k
                uint8_t *sc;
1345
780k
                int slen, slen1, slen2;
1346
1347
                /* MPEG-1 scale factors */
1348
780k
                slen1 = ff_slen_table[0][g->scalefac_compress];
1349
780k
                slen2 = ff_slen_table[1][g->scalefac_compress];
1350
780k
                ff_dlog(s->avctx, "slen1=%d slen2=%d\n", slen1, slen2);
1351
780k
                if (g->block_type == 2) {
1352
30.3k
                    n = g->switch_point ? 17 : 18;
1353
30.3k
                    j = 0;
1354
30.3k
                    if (slen1) {
1355
404k
                        for (i = 0; i < n; i++)
1356
382k
                            g->scale_factors[j++] = get_bits(&s->gb, slen1);
1357
21.8k
                    } else {
1358
158k
                        for (i = 0; i < n; i++)
1359
149k
                            g->scale_factors[j++] = 0;
1360
8.55k
                    }
1361
30.3k
                    if (slen2) {
1362
481k
                        for (i = 0; i < 18; i++)
1363
455k
                            g->scale_factors[j++] = get_bits(&s->gb, slen2);
1364
101k
                        for (i = 0; i < 3; i++)
1365
75.9k
                            g->scale_factors[j++] = 0;
1366
25.3k
                    } else {
1367
110k
                        for (i = 0; i < 21; i++)
1368
105k
                            g->scale_factors[j++] = 0;
1369
5.04k
                    }
1370
749k
                } else {
1371
749k
                    sc = s->granules[ch][0].scale_factors;
1372
749k
                    j = 0;
1373
3.74M
                    for (k = 0; k < 4; k++) {
1374
2.99M
                        n = k == 0 ? 6 : 5;
1375
2.99M
                        if ((g->scfsi & (0x8 >> k)) == 0) {
1376
2.92M
                            slen = (k < 2) ? slen1 : slen2;
1377
2.92M
                            if (slen) {
1378
482k
                                for (i = 0; i < n; i++)
1379
405k
                                    g->scale_factors[j++] = get_bits(&s->gb, slen);
1380
2.85M
                            } else {
1381
17.8M
                                for (i = 0; i < n; i++)
1382
14.9M
                                    g->scale_factors[j++] = 0;
1383
2.85M
                            }
1384
2.92M
                        } else {
1385
                            /* simply copy from last granule */
1386
435k
                            for (i = 0; i < n; i++) {
1387
364k
                                g->scale_factors[j] = sc[j];
1388
364k
                                j++;
1389
364k
                            }
1390
70.7k
                        }
1391
2.99M
                    }
1392
749k
                    g->scale_factors[j++] = 0;
1393
749k
                }
1394
1.66M
            } else {
1395
1.66M
                int tindex, tindex2, slen[4], sl, sf;
1396
1397
                /* LSF scale factors */
1398
1.66M
                if (g->block_type == 2)
1399
252k
                    tindex = g->switch_point ? 2 : 1;
1400
1.41M
                else
1401
1.41M
                    tindex = 0;
1402
1403
1.66M
                sf = g->scalefac_compress;
1404
1.66M
                if ((s->mode_ext & MODE_EXT_I_STEREO) && ch == 1) {
1405
                    /* intensity stereo case */
1406
484k
                    sf >>= 1;
1407
484k
                    if (sf < 180) {
1408
477k
                        lsf_sf_expand(slen, sf, 6, 6, 0);
1409
477k
                        tindex2 = 3;
1410
477k
                    } else if (sf < 244) {
1411
3.80k
                        lsf_sf_expand(slen, sf - 180, 4, 4, 0);
1412
3.80k
                        tindex2 = 4;
1413
3.80k
                    } else {
1414
3.76k
                        lsf_sf_expand(slen, sf - 244, 3, 0, 0);
1415
3.76k
                        tindex2 = 5;
1416
3.76k
                    }
1417
1.18M
                } else {
1418
                    /* normal case */
1419
1.18M
                    if (sf < 400) {
1420
915k
                        lsf_sf_expand(slen, sf, 5, 4, 4);
1421
915k
                        tindex2 = 0;
1422
915k
                    } else if (sf < 500) {
1423
256k
                        lsf_sf_expand(slen, sf - 400, 5, 4, 0);
1424
256k
                        tindex2 = 1;
1425
256k
                    } else {
1426
10.2k
                        lsf_sf_expand(slen, sf - 500, 3, 0, 0);
1427
10.2k
                        tindex2 = 2;
1428
10.2k
                        g->preflag = 1;
1429
10.2k
                    }
1430
1.18M
                }
1431
1432
1.66M
                j = 0;
1433
8.33M
                for (k = 0; k < 4; k++) {
1434
6.66M
                    n  = ff_lsf_nsf_table[tindex2][tindex][k];
1435
6.66M
                    sl = slen[k];
1436
6.66M
                    if (sl) {
1437
23.2M
                        for (i = 0; i < n; i++)
1438
20.2M
                            g->scale_factors[j++] = get_bits(&s->gb, sl);
1439
3.60M
                    } else {
1440
21.4M
                        for (i = 0; i < n; i++)
1441
17.8M
                            g->scale_factors[j++] = 0;
1442
3.60M
                    }
1443
6.66M
                }
1444
                /* XXX: should compute exact size */
1445
30.3M
                for (; j < 40; j++)
1446
28.6M
                    g->scale_factors[j] = 0;
1447
1.66M
            }
1448
1449
2.44M
            exponents_from_scale_factors(s, g, exponents);
1450
1451
            /* read Huffman coded residue */
1452
2.44M
            huffman_decode(s, g, exponents, bits_pos + g->part2_3_length);
1453
2.44M
        } /* ch */
1454
1455
1.23M
        if (s->mode == MPA_JSTEREO)
1456
882k
            compute_stereo(s, &s->granules[0][gr], &s->granules[1][gr]);
1457
1458
3.68M
        for (ch = 0; ch < s->nb_channels; ch++) {
1459
2.44M
            g = &s->granules[ch][gr];
1460
1461
2.44M
            reorder_block(s, g);
1462
2.44M
            compute_antialias(s, g);
1463
2.44M
            compute_imdct(s, g, &s->sb_samples[ch][18 * gr][0], s->mdct_buf[ch]);
1464
2.44M
        }
1465
1.23M
    } /* gr */
1466
1.41M
    if (get_bits_count(&s->gb) < 0)
1467
0
        skip_bits_long(&s->gb, -get_bits_count(&s->gb));
1468
1.41M
    return nb_granules * 18;
1469
1.45M
}
1470
1471
static int mp_decode_frame(MPADecodeContext *s, OUT_INT **samples,
1472
                           const uint8_t *buf, int buf_size)
1473
4.38M
{
1474
4.38M
    int i, nb_frames, ch, ret;
1475
4.38M
    OUT_INT *samples_ptr;
1476
1477
4.38M
    init_get_bits(&s->gb, buf + HEADER_SIZE, (buf_size - HEADER_SIZE) * 8);
1478
4.38M
    if (s->error_protection)
1479
1.03M
        s->crc = get_bits(&s->gb, 16);
1480
1481
4.38M
    switch(s->layer) {
1482
901k
    case 1:
1483
901k
        s->avctx->frame_size = 384;
1484
901k
        nb_frames = mp_decode_layer1(s);
1485
901k
        break;
1486
239k
    case 2:
1487
239k
        s->avctx->frame_size = 1152;
1488
239k
        nb_frames = mp_decode_layer2(s);
1489
239k
        break;
1490
3.24M
    case 3:
1491
3.24M
        s->avctx->frame_size = s->lsf ? 576 : 1152;
1492
3.24M
    default:
1493
3.24M
        nb_frames = mp_decode_layer3(s);
1494
1495
3.24M
        s->last_buf_size=0;
1496
3.24M
        if (s->in_gb.buffer) {
1497
777k
            align_get_bits(&s->gb);
1498
777k
            i = (get_bits_left(&s->gb) >> 3) - s->extrasize;
1499
777k
            if (i >= 0 && i <= BACKSTEP_SIZE) {
1500
777k
                memmove(s->last_buf, s->gb.buffer + (get_bits_count(&s->gb) >> 3), i);
1501
777k
                s->last_buf_size=i;
1502
777k
            } else
1503
0
                av_log(s->avctx, AV_LOG_ERROR, "invalid old backstep %d\n", i);
1504
777k
            s->gb           = s->in_gb;
1505
777k
            s->in_gb.buffer = NULL;
1506
777k
            s->extrasize    = 0;
1507
777k
        }
1508
1509
3.24M
        align_get_bits(&s->gb);
1510
3.24M
        av_assert1((get_bits_count(&s->gb) & 7) == 0);
1511
3.24M
        i = (get_bits_left(&s->gb) >> 3) - s->extrasize;
1512
3.24M
        if (i < 0 || i > BACKSTEP_SIZE || nb_frames < 0) {
1513
1.16M
            if (i < 0)
1514
1.05M
                av_log(s->avctx, AV_LOG_ERROR, "invalid new backstep %d\n", i);
1515
1.16M
            i = FFMIN(BACKSTEP_SIZE, buf_size - HEADER_SIZE);
1516
1.16M
        }
1517
3.24M
        av_assert1(i <= buf_size - HEADER_SIZE && i >= 0);
1518
3.24M
        memcpy(s->last_buf + s->last_buf_size, s->gb.buffer + buf_size - HEADER_SIZE - i, i);
1519
3.24M
        s->last_buf_size += i;
1520
4.38M
    }
1521
1522
4.38M
    if(nb_frames < 0)
1523
132k
        return nb_frames;
1524
1525
    /* get output buffer */
1526
4.24M
    if (!samples) {
1527
3.85M
        av_assert0(s->frame);
1528
3.85M
        s->frame->nb_samples = s->avctx->frame_size;
1529
3.85M
        if ((ret = ff_get_buffer(s->avctx, s->frame, 0)) < 0)
1530
0
            return ret;
1531
3.85M
        samples = (OUT_INT **)s->frame->extended_data;
1532
3.85M
    }
1533
1534
    /* apply the synthesis filter */
1535
12.0M
    for (ch = 0; ch < s->nb_channels; ch++) {
1536
7.78M
        int sample_stride;
1537
7.78M
        if (s->avctx->sample_fmt == OUT_FMT_P) {
1538
7.78M
            samples_ptr   = samples[ch];
1539
7.78M
            sample_stride = 1;
1540
7.78M
        } else {
1541
0
            samples_ptr   = samples[0] + ch;
1542
0
            sample_stride = s->nb_channels;
1543
0
        }
1544
160M
        for (i = 0; i < nb_frames; i++) {
1545
153M
            RENAME(ff_mpa_synth_filter)(&s->mpadsp, s->synth_buf[ch],
1546
153M
                                        &(s->synth_buf_offset[ch]),
1547
153M
                                        RENAME(ff_mpa_synth_window),
1548
153M
                                        &s->dither_state, samples_ptr,
1549
153M
                                        sample_stride, s->sb_samples[ch][i]);
1550
153M
            samples_ptr += 32 * sample_stride;
1551
153M
        }
1552
7.78M
    }
1553
1554
4.24M
    return nb_frames * 32 * sizeof(OUT_INT) * s->nb_channels;
1555
4.24M
}
mpegaudiodec_float.c:mp_decode_frame
Line
Count
Source
1473
2.50M
{
1474
2.50M
    int i, nb_frames, ch, ret;
1475
2.50M
    OUT_INT *samples_ptr;
1476
1477
2.50M
    init_get_bits(&s->gb, buf + HEADER_SIZE, (buf_size - HEADER_SIZE) * 8);
1478
2.50M
    if (s->error_protection)
1479
562k
        s->crc = get_bits(&s->gb, 16);
1480
1481
2.50M
    switch(s->layer) {
1482
566k
    case 1:
1483
566k
        s->avctx->frame_size = 384;
1484
566k
        nb_frames = mp_decode_layer1(s);
1485
566k
        break;
1486
152k
    case 2:
1487
152k
        s->avctx->frame_size = 1152;
1488
152k
        nb_frames = mp_decode_layer2(s);
1489
152k
        break;
1490
1.78M
    case 3:
1491
1.78M
        s->avctx->frame_size = s->lsf ? 576 : 1152;
1492
1.78M
    default:
1493
1.78M
        nb_frames = mp_decode_layer3(s);
1494
1495
1.78M
        s->last_buf_size=0;
1496
1.78M
        if (s->in_gb.buffer) {
1497
443k
            align_get_bits(&s->gb);
1498
443k
            i = (get_bits_left(&s->gb) >> 3) - s->extrasize;
1499
443k
            if (i >= 0 && i <= BACKSTEP_SIZE) {
1500
443k
                memmove(s->last_buf, s->gb.buffer + (get_bits_count(&s->gb) >> 3), i);
1501
443k
                s->last_buf_size=i;
1502
443k
            } else
1503
0
                av_log(s->avctx, AV_LOG_ERROR, "invalid old backstep %d\n", i);
1504
443k
            s->gb           = s->in_gb;
1505
443k
            s->in_gb.buffer = NULL;
1506
443k
            s->extrasize    = 0;
1507
443k
        }
1508
1509
1.78M
        align_get_bits(&s->gb);
1510
1.78M
        av_assert1((get_bits_count(&s->gb) & 7) == 0);
1511
1.78M
        i = (get_bits_left(&s->gb) >> 3) - s->extrasize;
1512
1.78M
        if (i < 0 || i > BACKSTEP_SIZE || nb_frames < 0) {
1513
633k
            if (i < 0)
1514
551k
                av_log(s->avctx, AV_LOG_ERROR, "invalid new backstep %d\n", i);
1515
633k
            i = FFMIN(BACKSTEP_SIZE, buf_size - HEADER_SIZE);
1516
633k
        }
1517
1.78M
        av_assert1(i <= buf_size - HEADER_SIZE && i >= 0);
1518
1.78M
        memcpy(s->last_buf + s->last_buf_size, s->gb.buffer + buf_size - HEADER_SIZE - i, i);
1519
1.78M
        s->last_buf_size += i;
1520
2.50M
    }
1521
1522
2.50M
    if(nb_frames < 0)
1523
93.2k
        return nb_frames;
1524
1525
    /* get output buffer */
1526
2.41M
    if (!samples) {
1527
2.19M
        av_assert0(s->frame);
1528
2.19M
        s->frame->nb_samples = s->avctx->frame_size;
1529
2.19M
        if ((ret = ff_get_buffer(s->avctx, s->frame, 0)) < 0)
1530
0
            return ret;
1531
2.19M
        samples = (OUT_INT **)s->frame->extended_data;
1532
2.19M
    }
1533
1534
    /* apply the synthesis filter */
1535
6.85M
    for (ch = 0; ch < s->nb_channels; ch++) {
1536
4.43M
        int sample_stride;
1537
4.43M
        if (s->avctx->sample_fmt == OUT_FMT_P) {
1538
4.43M
            samples_ptr   = samples[ch];
1539
4.43M
            sample_stride = 1;
1540
4.43M
        } else {
1541
0
            samples_ptr   = samples[0] + ch;
1542
0
            sample_stride = s->nb_channels;
1543
0
        }
1544
89.3M
        for (i = 0; i < nb_frames; i++) {
1545
84.8M
            RENAME(ff_mpa_synth_filter)(&s->mpadsp, s->synth_buf[ch],
1546
84.8M
                                        &(s->synth_buf_offset[ch]),
1547
84.8M
                                        RENAME(ff_mpa_synth_window),
1548
84.8M
                                        &s->dither_state, samples_ptr,
1549
84.8M
                                        sample_stride, s->sb_samples[ch][i]);
1550
84.8M
            samples_ptr += 32 * sample_stride;
1551
84.8M
        }
1552
4.43M
    }
1553
1554
2.41M
    return nb_frames * 32 * sizeof(OUT_INT) * s->nb_channels;
1555
2.41M
}
mpegaudiodec_fixed.c:mp_decode_frame
Line
Count
Source
1473
1.87M
{
1474
1.87M
    int i, nb_frames, ch, ret;
1475
1.87M
    OUT_INT *samples_ptr;
1476
1477
1.87M
    init_get_bits(&s->gb, buf + HEADER_SIZE, (buf_size - HEADER_SIZE) * 8);
1478
1.87M
    if (s->error_protection)
1479
467k
        s->crc = get_bits(&s->gb, 16);
1480
1481
1.87M
    switch(s->layer) {
1482
334k
    case 1:
1483
334k
        s->avctx->frame_size = 384;
1484
334k
        nb_frames = mp_decode_layer1(s);
1485
334k
        break;
1486
86.7k
    case 2:
1487
86.7k
        s->avctx->frame_size = 1152;
1488
86.7k
        nb_frames = mp_decode_layer2(s);
1489
86.7k
        break;
1490
1.45M
    case 3:
1491
1.45M
        s->avctx->frame_size = s->lsf ? 576 : 1152;
1492
1.45M
    default:
1493
1.45M
        nb_frames = mp_decode_layer3(s);
1494
1495
1.45M
        s->last_buf_size=0;
1496
1.45M
        if (s->in_gb.buffer) {
1497
333k
            align_get_bits(&s->gb);
1498
333k
            i = (get_bits_left(&s->gb) >> 3) - s->extrasize;
1499
333k
            if (i >= 0 && i <= BACKSTEP_SIZE) {
1500
333k
                memmove(s->last_buf, s->gb.buffer + (get_bits_count(&s->gb) >> 3), i);
1501
333k
                s->last_buf_size=i;
1502
333k
            } else
1503
0
                av_log(s->avctx, AV_LOG_ERROR, "invalid old backstep %d\n", i);
1504
333k
            s->gb           = s->in_gb;
1505
333k
            s->in_gb.buffer = NULL;
1506
333k
            s->extrasize    = 0;
1507
333k
        }
1508
1509
1.45M
        align_get_bits(&s->gb);
1510
1.45M
        av_assert1((get_bits_count(&s->gb) & 7) == 0);
1511
1.45M
        i = (get_bits_left(&s->gb) >> 3) - s->extrasize;
1512
1.45M
        if (i < 0 || i > BACKSTEP_SIZE || nb_frames < 0) {
1513
535k
            if (i < 0)
1514
505k
                av_log(s->avctx, AV_LOG_ERROR, "invalid new backstep %d\n", i);
1515
535k
            i = FFMIN(BACKSTEP_SIZE, buf_size - HEADER_SIZE);
1516
535k
        }
1517
1.45M
        av_assert1(i <= buf_size - HEADER_SIZE && i >= 0);
1518
1.45M
        memcpy(s->last_buf + s->last_buf_size, s->gb.buffer + buf_size - HEADER_SIZE - i, i);
1519
1.45M
        s->last_buf_size += i;
1520
1.87M
    }
1521
1522
1.87M
    if(nb_frames < 0)
1523
39.5k
        return nb_frames;
1524
1525
    /* get output buffer */
1526
1.83M
    if (!samples) {
1527
1.66M
        av_assert0(s->frame);
1528
1.66M
        s->frame->nb_samples = s->avctx->frame_size;
1529
1.66M
        if ((ret = ff_get_buffer(s->avctx, s->frame, 0)) < 0)
1530
0
            return ret;
1531
1.66M
        samples = (OUT_INT **)s->frame->extended_data;
1532
1.66M
    }
1533
1534
    /* apply the synthesis filter */
1535
5.18M
    for (ch = 0; ch < s->nb_channels; ch++) {
1536
3.34M
        int sample_stride;
1537
3.34M
        if (s->avctx->sample_fmt == OUT_FMT_P) {
1538
3.34M
            samples_ptr   = samples[ch];
1539
3.34M
            sample_stride = 1;
1540
3.34M
        } else {
1541
0
            samples_ptr   = samples[0] + ch;
1542
0
            sample_stride = s->nb_channels;
1543
0
        }
1544
71.5M
        for (i = 0; i < nb_frames; i++) {
1545
68.1M
            RENAME(ff_mpa_synth_filter)(&s->mpadsp, s->synth_buf[ch],
1546
68.1M
                                        &(s->synth_buf_offset[ch]),
1547
68.1M
                                        RENAME(ff_mpa_synth_window),
1548
68.1M
                                        &s->dither_state, samples_ptr,
1549
68.1M
                                        sample_stride, s->sb_samples[ch][i]);
1550
68.1M
            samples_ptr += 32 * sample_stride;
1551
68.1M
        }
1552
3.34M
    }
1553
1554
1.83M
    return nb_frames * 32 * sizeof(OUT_INT) * s->nb_channels;
1555
1.83M
}
1556
1557
static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
1558
                        int *got_frame_ptr, AVPacket *avpkt)
1559
5.06M
{
1560
5.06M
    const uint8_t *buf  = avpkt->data;
1561
5.06M
    int buf_size        = avpkt->size;
1562
5.06M
    MPADecodeContext *s = avctx->priv_data;
1563
5.06M
    uint32_t header;
1564
5.06M
    int ret;
1565
1566
5.06M
    int skipped = 0;
1567
342M
    while(buf_size && !*buf){
1568
336M
        buf++;
1569
336M
        buf_size--;
1570
336M
        skipped++;
1571
336M
    }
1572
1573
5.06M
    if (buf_size < HEADER_SIZE)
1574
817k
        return AVERROR_INVALIDDATA;
1575
1576
4.24M
    header = AV_RB32(buf);
1577
4.24M
    if (header >> 8 == AV_RB32("TAG") >> 8) {
1578
356k
        av_log(avctx, AV_LOG_DEBUG, "discarding ID3 tag\n");
1579
356k
        return buf_size + skipped;
1580
356k
    }
1581
3.88M
    ret = avpriv_mpegaudio_decode_header((MPADecodeHeader *)s, header);
1582
3.88M
    if (ret < 0) {
1583
863k
        av_log(avctx, AV_LOG_ERROR, "Header missing\n");
1584
863k
        return AVERROR_INVALIDDATA;
1585
3.02M
    } else if (ret == 1) {
1586
        /* free format: prepare to compute frame size */
1587
3.82k
        s->frame_size = -1;
1588
3.82k
        return AVERROR_INVALIDDATA;
1589
3.82k
    }
1590
    /* update codec info */
1591
3.02M
    av_channel_layout_uninit(&avctx->ch_layout);
1592
3.02M
    avctx->ch_layout = s->nb_channels == 1 ? (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO :
1593
3.02M
                                             (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO;
1594
3.02M
    if (!avctx->bit_rate)
1595
300
        avctx->bit_rate = s->bit_rate;
1596
1597
3.02M
    if (s->frame_size <= 0) {
1598
0
        av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
1599
0
        return AVERROR_INVALIDDATA;
1600
3.02M
    } else if (s->frame_size < buf_size) {
1601
634k
        av_log(avctx, AV_LOG_DEBUG, "incorrect frame size - multiple frames in buffer?\n");
1602
634k
        buf_size= s->frame_size;
1603
634k
    }
1604
1605
3.02M
    s->frame = frame;
1606
1607
3.02M
    ret = mp_decode_frame(s, NULL, buf, buf_size);
1608
3.02M
    if (ret >= 0) {
1609
2.94M
        s->frame->nb_samples = avctx->frame_size;
1610
2.94M
        *got_frame_ptr       = 1;
1611
2.94M
        if (avctx->codec_id != AV_CODEC_ID_AHX)
1612
2.72M
            avctx->sample_rate = s->sample_rate;
1613
        //FIXME maybe move the other codec info stuff from above here too
1614
2.94M
    } else {
1615
80.2k
        av_log(avctx, AV_LOG_ERROR, "Error while decoding MPEG audio frame.\n");
1616
        /* Only return an error if the bad frame makes up the whole packet or
1617
         * the error is related to buffer management.
1618
         * If there is more data in the packet, just consume the bad frame
1619
         * instead of returning an error, which would discard the whole
1620
         * packet. */
1621
80.2k
        *got_frame_ptr = 0;
1622
80.2k
        if (buf_size == avpkt->size || ret != AVERROR_INVALIDDATA)
1623
60.2k
            return ret;
1624
80.2k
    }
1625
2.96M
    s->frame_size = 0;
1626
2.96M
    return buf_size + skipped;
1627
3.02M
}
mpegaudiodec_float.c:decode_frame
Line
Count
Source
1559
3.33M
{
1560
3.33M
    const uint8_t *buf  = avpkt->data;
1561
3.33M
    int buf_size        = avpkt->size;
1562
3.33M
    MPADecodeContext *s = avctx->priv_data;
1563
3.33M
    uint32_t header;
1564
3.33M
    int ret;
1565
1566
3.33M
    int skipped = 0;
1567
339M
    while(buf_size && !*buf){
1568
336M
        buf++;
1569
336M
        buf_size--;
1570
336M
        skipped++;
1571
336M
    }
1572
1573
3.33M
    if (buf_size < HEADER_SIZE)
1574
598k
        return AVERROR_INVALIDDATA;
1575
1576
2.74M
    header = AV_RB32(buf);
1577
2.74M
    if (header >> 8 == AV_RB32("TAG") >> 8) {
1578
117k
        av_log(avctx, AV_LOG_DEBUG, "discarding ID3 tag\n");
1579
117k
        return buf_size + skipped;
1580
117k
    }
1581
2.62M
    ret = avpriv_mpegaudio_decode_header((MPADecodeHeader *)s, header);
1582
2.62M
    if (ret < 0) {
1583
828k
        av_log(avctx, AV_LOG_ERROR, "Header missing\n");
1584
828k
        return AVERROR_INVALIDDATA;
1585
1.79M
    } else if (ret == 1) {
1586
        /* free format: prepare to compute frame size */
1587
2.69k
        s->frame_size = -1;
1588
2.69k
        return AVERROR_INVALIDDATA;
1589
2.69k
    }
1590
    /* update codec info */
1591
1.79M
    av_channel_layout_uninit(&avctx->ch_layout);
1592
1.79M
    avctx->ch_layout = s->nb_channels == 1 ? (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO :
1593
1.79M
                                             (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO;
1594
1.79M
    if (!avctx->bit_rate)
1595
177
        avctx->bit_rate = s->bit_rate;
1596
1597
1.79M
    if (s->frame_size <= 0) {
1598
0
        av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
1599
0
        return AVERROR_INVALIDDATA;
1600
1.79M
    } else if (s->frame_size < buf_size) {
1601
427k
        av_log(avctx, AV_LOG_DEBUG, "incorrect frame size - multiple frames in buffer?\n");
1602
427k
        buf_size= s->frame_size;
1603
427k
    }
1604
1605
1.79M
    s->frame = frame;
1606
1607
1.79M
    ret = mp_decode_frame(s, NULL, buf, buf_size);
1608
1.79M
    if (ret >= 0) {
1609
1.72M
        s->frame->nb_samples = avctx->frame_size;
1610
1.72M
        *got_frame_ptr       = 1;
1611
1.72M
        if (avctx->codec_id != AV_CODEC_ID_AHX)
1612
1.51M
            avctx->sample_rate = s->sample_rate;
1613
        //FIXME maybe move the other codec info stuff from above here too
1614
1.72M
    } else {
1615
63.3k
        av_log(avctx, AV_LOG_ERROR, "Error while decoding MPEG audio frame.\n");
1616
        /* Only return an error if the bad frame makes up the whole packet or
1617
         * the error is related to buffer management.
1618
         * If there is more data in the packet, just consume the bad frame
1619
         * instead of returning an error, which would discard the whole
1620
         * packet. */
1621
63.3k
        *got_frame_ptr = 0;
1622
63.3k
        if (buf_size == avpkt->size || ret != AVERROR_INVALIDDATA)
1623
46.7k
            return ret;
1624
63.3k
    }
1625
1.74M
    s->frame_size = 0;
1626
1.74M
    return buf_size + skipped;
1627
1.79M
}
mpegaudiodec_fixed.c:decode_frame
Line
Count
Source
1559
1.72M
{
1560
1.72M
    const uint8_t *buf  = avpkt->data;
1561
1.72M
    int buf_size        = avpkt->size;
1562
1.72M
    MPADecodeContext *s = avctx->priv_data;
1563
1.72M
    uint32_t header;
1564
1.72M
    int ret;
1565
1566
1.72M
    int skipped = 0;
1567
2.33M
    while(buf_size && !*buf){
1568
605k
        buf++;
1569
605k
        buf_size--;
1570
605k
        skipped++;
1571
605k
    }
1572
1573
1.72M
    if (buf_size < HEADER_SIZE)
1574
219k
        return AVERROR_INVALIDDATA;
1575
1576
1.50M
    header = AV_RB32(buf);
1577
1.50M
    if (header >> 8 == AV_RB32("TAG") >> 8) {
1578
239k
        av_log(avctx, AV_LOG_DEBUG, "discarding ID3 tag\n");
1579
239k
        return buf_size + skipped;
1580
239k
    }
1581
1.26M
    ret = avpriv_mpegaudio_decode_header((MPADecodeHeader *)s, header);
1582
1.26M
    if (ret < 0) {
1583
35.2k
        av_log(avctx, AV_LOG_ERROR, "Header missing\n");
1584
35.2k
        return AVERROR_INVALIDDATA;
1585
1.23M
    } else if (ret == 1) {
1586
        /* free format: prepare to compute frame size */
1587
1.12k
        s->frame_size = -1;
1588
1.12k
        return AVERROR_INVALIDDATA;
1589
1.12k
    }
1590
    /* update codec info */
1591
1.22M
    av_channel_layout_uninit(&avctx->ch_layout);
1592
1.22M
    avctx->ch_layout = s->nb_channels == 1 ? (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO :
1593
1.22M
                                             (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO;
1594
1.22M
    if (!avctx->bit_rate)
1595
123
        avctx->bit_rate = s->bit_rate;
1596
1597
1.22M
    if (s->frame_size <= 0) {
1598
0
        av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
1599
0
        return AVERROR_INVALIDDATA;
1600
1.22M
    } else if (s->frame_size < buf_size) {
1601
207k
        av_log(avctx, AV_LOG_DEBUG, "incorrect frame size - multiple frames in buffer?\n");
1602
207k
        buf_size= s->frame_size;
1603
207k
    }
1604
1605
1.22M
    s->frame = frame;
1606
1607
1.22M
    ret = mp_decode_frame(s, NULL, buf, buf_size);
1608
1.22M
    if (ret >= 0) {
1609
1.21M
        s->frame->nb_samples = avctx->frame_size;
1610
1.21M
        *got_frame_ptr       = 1;
1611
1.21M
        if (avctx->codec_id != AV_CODEC_ID_AHX)
1612
1.21M
            avctx->sample_rate = s->sample_rate;
1613
        //FIXME maybe move the other codec info stuff from above here too
1614
1.21M
    } else {
1615
16.9k
        av_log(avctx, AV_LOG_ERROR, "Error while decoding MPEG audio frame.\n");
1616
        /* Only return an error if the bad frame makes up the whole packet or
1617
         * the error is related to buffer management.
1618
         * If there is more data in the packet, just consume the bad frame
1619
         * instead of returning an error, which would discard the whole
1620
         * packet. */
1621
16.9k
        *got_frame_ptr = 0;
1622
16.9k
        if (buf_size == avpkt->size || ret != AVERROR_INVALIDDATA)
1623
13.4k
            return ret;
1624
16.9k
    }
1625
1.21M
    s->frame_size = 0;
1626
1.21M
    return buf_size + skipped;
1627
1.22M
}
1628
1629
static av_cold void mp_flush(MPADecodeContext *ctx)
1630
2.52M
{
1631
2.52M
    memset(ctx->synth_buf, 0, sizeof(ctx->synth_buf));
1632
2.52M
    memset(ctx->mdct_buf, 0, sizeof(ctx->mdct_buf));
1633
2.52M
    ctx->last_buf_size = 0;
1634
2.52M
    ctx->dither_state = 0;
1635
2.52M
}
mpegaudiodec_float.c:mp_flush
Line
Count
Source
1630
1.52M
{
1631
1.52M
    memset(ctx->synth_buf, 0, sizeof(ctx->synth_buf));
1632
1.52M
    memset(ctx->mdct_buf, 0, sizeof(ctx->mdct_buf));
1633
1.52M
    ctx->last_buf_size = 0;
1634
1.52M
    ctx->dither_state = 0;
1635
1.52M
}
mpegaudiodec_fixed.c:mp_flush
Line
Count
Source
1630
1.00M
{
1631
1.00M
    memset(ctx->synth_buf, 0, sizeof(ctx->synth_buf));
1632
1.00M
    memset(ctx->mdct_buf, 0, sizeof(ctx->mdct_buf));
1633
1.00M
    ctx->last_buf_size = 0;
1634
1.00M
    ctx->dither_state = 0;
1635
1.00M
}
1636
1637
static av_cold void flush(AVCodecContext *avctx)
1638
1.99M
{
1639
1.99M
    mp_flush(avctx->priv_data);
1640
1.99M
}
mpegaudiodec_float.c:flush
Line
Count
Source
1638
1.20M
{
1639
1.20M
    mp_flush(avctx->priv_data);
1640
1.20M
}
mpegaudiodec_fixed.c:flush
Line
Count
Source
1638
794k
{
1639
794k
    mp_flush(avctx->priv_data);
1640
794k
}
1641
1642
#if CONFIG_MP3ADU_DECODER || CONFIG_MP3ADUFLOAT_DECODER
1643
static int decode_frame_adu(AVCodecContext *avctx, AVFrame *frame,
1644
                            int *got_frame_ptr, AVPacket *avpkt)
1645
1.11M
{
1646
1.11M
    const uint8_t *buf  = avpkt->data;
1647
1.11M
    int buf_size        = avpkt->size;
1648
1.11M
    MPADecodeContext *s = avctx->priv_data;
1649
1.11M
    uint32_t header;
1650
1.11M
    int len, ret;
1651
1652
1.11M
    len = buf_size;
1653
1654
    // Discard too short frames
1655
1.11M
    if (buf_size < HEADER_SIZE) {
1656
161k
        av_log(avctx, AV_LOG_ERROR, "Packet is too small\n");
1657
161k
        return AVERROR_INVALIDDATA;
1658
161k
    }
1659
1660
1661
950k
    if (len > MPA_MAX_CODED_FRAME_SIZE)
1662
2.53k
        len = MPA_MAX_CODED_FRAME_SIZE;
1663
1664
    // Get header and restore sync word
1665
950k
    header = AV_RB32(buf) | 0xffe00000;
1666
1667
950k
    ret = avpriv_mpegaudio_decode_header((MPADecodeHeader *)s, header);
1668
950k
    if (ret < 0) {
1669
30.1k
        av_log(avctx, AV_LOG_ERROR, "Invalid frame header\n");
1670
30.1k
        return ret;
1671
30.1k
    }
1672
    /* update codec info */
1673
920k
    avctx->sample_rate = s->sample_rate;
1674
920k
    av_channel_layout_uninit(&avctx->ch_layout);
1675
920k
    avctx->ch_layout = s->nb_channels == 1 ? (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO :
1676
920k
                                             (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO;
1677
920k
    if (!avctx->bit_rate)
1678
1.32k
        avctx->bit_rate = s->bit_rate;
1679
1680
920k
    s->frame_size = len;
1681
1682
920k
    s->frame = frame;
1683
1684
920k
    ret = mp_decode_frame(s, NULL, buf, buf_size);
1685
920k
    if (ret < 0) {
1686
8.26k
        av_log(avctx, AV_LOG_ERROR, "Error while decoding MPEG audio frame.\n");
1687
8.26k
        return ret;
1688
8.26k
    }
1689
1690
912k
    *got_frame_ptr = 1;
1691
1692
912k
    return buf_size;
1693
920k
}
mpegaudiodec_float.c:decode_frame_adu
Line
Count
Source
1645
567k
{
1646
567k
    const uint8_t *buf  = avpkt->data;
1647
567k
    int buf_size        = avpkt->size;
1648
567k
    MPADecodeContext *s = avctx->priv_data;
1649
567k
    uint32_t header;
1650
567k
    int len, ret;
1651
1652
567k
    len = buf_size;
1653
1654
    // Discard too short frames
1655
567k
    if (buf_size < HEADER_SIZE) {
1656
86.4k
        av_log(avctx, AV_LOG_ERROR, "Packet is too small\n");
1657
86.4k
        return AVERROR_INVALIDDATA;
1658
86.4k
    }
1659
1660
1661
480k
    if (len > MPA_MAX_CODED_FRAME_SIZE)
1662
1.14k
        len = MPA_MAX_CODED_FRAME_SIZE;
1663
1664
    // Get header and restore sync word
1665
480k
    header = AV_RB32(buf) | 0xffe00000;
1666
1667
480k
    ret = avpriv_mpegaudio_decode_header((MPADecodeHeader *)s, header);
1668
480k
    if (ret < 0) {
1669
12.4k
        av_log(avctx, AV_LOG_ERROR, "Invalid frame header\n");
1670
12.4k
        return ret;
1671
12.4k
    }
1672
    /* update codec info */
1673
468k
    avctx->sample_rate = s->sample_rate;
1674
468k
    av_channel_layout_uninit(&avctx->ch_layout);
1675
468k
    avctx->ch_layout = s->nb_channels == 1 ? (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO :
1676
468k
                                             (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO;
1677
468k
    if (!avctx->bit_rate)
1678
597
        avctx->bit_rate = s->bit_rate;
1679
1680
468k
    s->frame_size = len;
1681
1682
468k
    s->frame = frame;
1683
1684
468k
    ret = mp_decode_frame(s, NULL, buf, buf_size);
1685
468k
    if (ret < 0) {
1686
4.32k
        av_log(avctx, AV_LOG_ERROR, "Error while decoding MPEG audio frame.\n");
1687
4.32k
        return ret;
1688
4.32k
    }
1689
1690
464k
    *got_frame_ptr = 1;
1691
1692
464k
    return buf_size;
1693
468k
}
mpegaudiodec_fixed.c:decode_frame_adu
Line
Count
Source
1645
544k
{
1646
544k
    const uint8_t *buf  = avpkt->data;
1647
544k
    int buf_size        = avpkt->size;
1648
544k
    MPADecodeContext *s = avctx->priv_data;
1649
544k
    uint32_t header;
1650
544k
    int len, ret;
1651
1652
544k
    len = buf_size;
1653
1654
    // Discard too short frames
1655
544k
    if (buf_size < HEADER_SIZE) {
1656
75.1k
        av_log(avctx, AV_LOG_ERROR, "Packet is too small\n");
1657
75.1k
        return AVERROR_INVALIDDATA;
1658
75.1k
    }
1659
1660
1661
469k
    if (len > MPA_MAX_CODED_FRAME_SIZE)
1662
1.39k
        len = MPA_MAX_CODED_FRAME_SIZE;
1663
1664
    // Get header and restore sync word
1665
469k
    header = AV_RB32(buf) | 0xffe00000;
1666
1667
469k
    ret = avpriv_mpegaudio_decode_header((MPADecodeHeader *)s, header);
1668
469k
    if (ret < 0) {
1669
17.6k
        av_log(avctx, AV_LOG_ERROR, "Invalid frame header\n");
1670
17.6k
        return ret;
1671
17.6k
    }
1672
    /* update codec info */
1673
451k
    avctx->sample_rate = s->sample_rate;
1674
451k
    av_channel_layout_uninit(&avctx->ch_layout);
1675
451k
    avctx->ch_layout = s->nb_channels == 1 ? (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO :
1676
451k
                                             (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO;
1677
451k
    if (!avctx->bit_rate)
1678
725
        avctx->bit_rate = s->bit_rate;
1679
1680
451k
    s->frame_size = len;
1681
1682
451k
    s->frame = frame;
1683
1684
451k
    ret = mp_decode_frame(s, NULL, buf, buf_size);
1685
451k
    if (ret < 0) {
1686
3.94k
        av_log(avctx, AV_LOG_ERROR, "Error while decoding MPEG audio frame.\n");
1687
3.94k
        return ret;
1688
3.94k
    }
1689
1690
447k
    *got_frame_ptr = 1;
1691
1692
447k
    return buf_size;
1693
451k
}
1694
#endif /* CONFIG_MP3ADU_DECODER || CONFIG_MP3ADUFLOAT_DECODER */
1695
1696
#if CONFIG_MP3ON4_DECODER || CONFIG_MP3ON4FLOAT_DECODER
1697
1698
/**
1699
 * Context for MP3On4 decoder
1700
 */
1701
typedef struct MP3On4DecodeContext {
1702
    int frames;                     ///< number of mp3 frames per block (number of mp3 decoder instances)
1703
    int syncword;                   ///< syncword patch
1704
    const uint8_t *coff;            ///< channel offsets in output buffer
1705
    MPADecodeContext *mp3decctx[5]; ///< MPADecodeContext for every decoder instance
1706
} MP3On4DecodeContext;
1707
1708
#include "mpeg4audio.h"
1709
1710
/* Next 3 arrays are indexed by channel config number (passed via codecdata) */
1711
1712
/* number of mp3 decoder instances */
1713
static const uint8_t mp3Frames[8] = { 0, 1, 1, 2, 3, 3, 4, 5 };
1714
1715
/* offsets into output buffer, assume output order is FL FR C LFE BL BR SL SR */
1716
static const uint8_t chan_offset[8][5] = {
1717
    { 0             },
1718
    { 0             },  // C
1719
    { 0             },  // FLR
1720
    { 2, 0          },  // C FLR
1721
    { 2, 0, 3       },  // C FLR BS
1722
    { 2, 0, 3       },  // C FLR BLRS
1723
    { 2, 0, 4, 3    },  // C FLR BLRS LFE
1724
    { 2, 0, 6, 4, 3 },  // C FLR BLRS BLR LFE
1725
};
1726
1727
/* mp3on4 channel layouts */
1728
static const int16_t chan_layout[8] = {
1729
    0,
1730
    AV_CH_LAYOUT_MONO,
1731
    AV_CH_LAYOUT_STEREO,
1732
    AV_CH_LAYOUT_SURROUND,
1733
    AV_CH_LAYOUT_4POINT0,
1734
    AV_CH_LAYOUT_5POINT0,
1735
    AV_CH_LAYOUT_5POINT1,
1736
    AV_CH_LAYOUT_7POINT1
1737
};
1738
1739
static av_cold int decode_close_mp3on4(AVCodecContext * avctx)
1740
3.04k
{
1741
3.04k
    MP3On4DecodeContext *s = avctx->priv_data;
1742
1743
3.04k
    av_freep(&s->mp3decctx[0]);
1744
1745
3.04k
    return 0;
1746
3.04k
}
mpegaudiodec_float.c:decode_close_mp3on4
Line
Count
Source
1740
1.51k
{
1741
1.51k
    MP3On4DecodeContext *s = avctx->priv_data;
1742
1743
1.51k
    av_freep(&s->mp3decctx[0]);
1744
1745
1.51k
    return 0;
1746
1.51k
}
mpegaudiodec_fixed.c:decode_close_mp3on4
Line
Count
Source
1740
1.53k
{
1741
1.53k
    MP3On4DecodeContext *s = avctx->priv_data;
1742
1743
1.53k
    av_freep(&s->mp3decctx[0]);
1744
1745
1.53k
    return 0;
1746
1.53k
}
1747
1748
1749
static av_cold int decode_init_mp3on4(AVCodecContext * avctx)
1750
3.04k
{
1751
3.04k
    MP3On4DecodeContext *s = avctx->priv_data;
1752
3.04k
    MPEG4AudioConfig cfg;
1753
3.04k
    int i, ret;
1754
1755
3.04k
    if ((avctx->extradata_size < 2) || !avctx->extradata) {
1756
362
        av_log(avctx, AV_LOG_ERROR, "Codec extradata missing or too short.\n");
1757
362
        return AVERROR_INVALIDDATA;
1758
362
    }
1759
1760
2.68k
    avpriv_mpeg4audio_get_config2(&cfg, avctx->extradata,
1761
2.68k
                                  avctx->extradata_size, 1, avctx);
1762
2.68k
    if (!cfg.chan_config || cfg.chan_config > 7) {
1763
530
        av_log(avctx, AV_LOG_ERROR, "Invalid channel config number.\n");
1764
530
        return AVERROR_INVALIDDATA;
1765
530
    }
1766
2.15k
    s->frames             = mp3Frames[cfg.chan_config];
1767
2.15k
    s->coff               = chan_offset[cfg.chan_config];
1768
2.15k
    av_channel_layout_uninit(&avctx->ch_layout);
1769
2.15k
    av_channel_layout_from_mask(&avctx->ch_layout, chan_layout[cfg.chan_config]);
1770
1771
2.15k
    if (cfg.sample_rate < 16000)
1772
336
        s->syncword = 0xffe00000;
1773
1.81k
    else
1774
1.81k
        s->syncword = 0xfff00000;
1775
1776
    /* Init the first mp3 decoder in standard way, so that all tables get built
1777
     * Other decoders will be initialized here copying data from the first context
1778
     */
1779
    // Allocate zeroed memory for the decoder contexts
1780
2.15k
    s->mp3decctx[0] = av_calloc(s->frames, sizeof(*s->mp3decctx[0]));
1781
2.15k
    if (!s->mp3decctx[0])
1782
0
        return AVERROR(ENOMEM);
1783
2.15k
    ret = decode_ctx_init(avctx, s->mp3decctx[0]);
1784
2.15k
    if (ret < 0)
1785
0
        return ret;
1786
2.15k
    s->mp3decctx[0]->adu_mode = 1; // Set adu mode
1787
1788
    /* Create a separate codec/context for each frame (first is already ok).
1789
     * Each frame is 1 or 2 channels - up to 5 frames allowed
1790
     */
1791
5.86k
    for (i = 1; i < s->frames; i++) {
1792
3.71k
        s->mp3decctx[i] = s->mp3decctx[0] + i;
1793
3.71k
        s->mp3decctx[i]->adu_mode = 1;
1794
3.71k
        s->mp3decctx[i]->avctx = avctx;
1795
3.71k
        s->mp3decctx[i]->mpadsp = s->mp3decctx[0]->mpadsp;
1796
#if USE_FLOATS
1797
        s->mp3decctx[i]->butterflies_float = s->mp3decctx[0]->butterflies_float;
1798
#endif
1799
3.71k
    }
1800
1801
2.15k
    return 0;
1802
2.15k
}
mpegaudiodec_float.c:decode_init_mp3on4
Line
Count
Source
1750
1.51k
{
1751
1.51k
    MP3On4DecodeContext *s = avctx->priv_data;
1752
1.51k
    MPEG4AudioConfig cfg;
1753
1.51k
    int i, ret;
1754
1755
1.51k
    if ((avctx->extradata_size < 2) || !avctx->extradata) {
1756
177
        av_log(avctx, AV_LOG_ERROR, "Codec extradata missing or too short.\n");
1757
177
        return AVERROR_INVALIDDATA;
1758
177
    }
1759
1760
1.33k
    avpriv_mpeg4audio_get_config2(&cfg, avctx->extradata,
1761
1.33k
                                  avctx->extradata_size, 1, avctx);
1762
1.33k
    if (!cfg.chan_config || cfg.chan_config > 7) {
1763
252
        av_log(avctx, AV_LOG_ERROR, "Invalid channel config number.\n");
1764
252
        return AVERROR_INVALIDDATA;
1765
252
    }
1766
1.08k
    s->frames             = mp3Frames[cfg.chan_config];
1767
1.08k
    s->coff               = chan_offset[cfg.chan_config];
1768
1.08k
    av_channel_layout_uninit(&avctx->ch_layout);
1769
1.08k
    av_channel_layout_from_mask(&avctx->ch_layout, chan_layout[cfg.chan_config]);
1770
1771
1.08k
    if (cfg.sample_rate < 16000)
1772
194
        s->syncword = 0xffe00000;
1773
892
    else
1774
892
        s->syncword = 0xfff00000;
1775
1776
    /* Init the first mp3 decoder in standard way, so that all tables get built
1777
     * Other decoders will be initialized here copying data from the first context
1778
     */
1779
    // Allocate zeroed memory for the decoder contexts
1780
1.08k
    s->mp3decctx[0] = av_calloc(s->frames, sizeof(*s->mp3decctx[0]));
1781
1.08k
    if (!s->mp3decctx[0])
1782
0
        return AVERROR(ENOMEM);
1783
1.08k
    ret = decode_ctx_init(avctx, s->mp3decctx[0]);
1784
1.08k
    if (ret < 0)
1785
0
        return ret;
1786
1.08k
    s->mp3decctx[0]->adu_mode = 1; // Set adu mode
1787
1788
    /* Create a separate codec/context for each frame (first is already ok).
1789
     * Each frame is 1 or 2 channels - up to 5 frames allowed
1790
     */
1791
2.74k
    for (i = 1; i < s->frames; i++) {
1792
1.66k
        s->mp3decctx[i] = s->mp3decctx[0] + i;
1793
1.66k
        s->mp3decctx[i]->adu_mode = 1;
1794
1.66k
        s->mp3decctx[i]->avctx = avctx;
1795
1.66k
        s->mp3decctx[i]->mpadsp = s->mp3decctx[0]->mpadsp;
1796
1.66k
#if USE_FLOATS
1797
1.66k
        s->mp3decctx[i]->butterflies_float = s->mp3decctx[0]->butterflies_float;
1798
1.66k
#endif
1799
1.66k
    }
1800
1801
1.08k
    return 0;
1802
1.08k
}
mpegaudiodec_fixed.c:decode_init_mp3on4
Line
Count
Source
1750
1.53k
{
1751
1.53k
    MP3On4DecodeContext *s = avctx->priv_data;
1752
1.53k
    MPEG4AudioConfig cfg;
1753
1.53k
    int i, ret;
1754
1755
1.53k
    if ((avctx->extradata_size < 2) || !avctx->extradata) {
1756
185
        av_log(avctx, AV_LOG_ERROR, "Codec extradata missing or too short.\n");
1757
185
        return AVERROR_INVALIDDATA;
1758
185
    }
1759
1760
1.34k
    avpriv_mpeg4audio_get_config2(&cfg, avctx->extradata,
1761
1.34k
                                  avctx->extradata_size, 1, avctx);
1762
1.34k
    if (!cfg.chan_config || cfg.chan_config > 7) {
1763
278
        av_log(avctx, AV_LOG_ERROR, "Invalid channel config number.\n");
1764
278
        return AVERROR_INVALIDDATA;
1765
278
    }
1766
1.06k
    s->frames             = mp3Frames[cfg.chan_config];
1767
1.06k
    s->coff               = chan_offset[cfg.chan_config];
1768
1.06k
    av_channel_layout_uninit(&avctx->ch_layout);
1769
1.06k
    av_channel_layout_from_mask(&avctx->ch_layout, chan_layout[cfg.chan_config]);
1770
1771
1.06k
    if (cfg.sample_rate < 16000)
1772
142
        s->syncword = 0xffe00000;
1773
927
    else
1774
927
        s->syncword = 0xfff00000;
1775
1776
    /* Init the first mp3 decoder in standard way, so that all tables get built
1777
     * Other decoders will be initialized here copying data from the first context
1778
     */
1779
    // Allocate zeroed memory for the decoder contexts
1780
1.06k
    s->mp3decctx[0] = av_calloc(s->frames, sizeof(*s->mp3decctx[0]));
1781
1.06k
    if (!s->mp3decctx[0])
1782
0
        return AVERROR(ENOMEM);
1783
1.06k
    ret = decode_ctx_init(avctx, s->mp3decctx[0]);
1784
1.06k
    if (ret < 0)
1785
0
        return ret;
1786
1.06k
    s->mp3decctx[0]->adu_mode = 1; // Set adu mode
1787
1788
    /* Create a separate codec/context for each frame (first is already ok).
1789
     * Each frame is 1 or 2 channels - up to 5 frames allowed
1790
     */
1791
3.11k
    for (i = 1; i < s->frames; i++) {
1792
2.04k
        s->mp3decctx[i] = s->mp3decctx[0] + i;
1793
2.04k
        s->mp3decctx[i]->adu_mode = 1;
1794
2.04k
        s->mp3decctx[i]->avctx = avctx;
1795
2.04k
        s->mp3decctx[i]->mpadsp = s->mp3decctx[0]->mpadsp;
1796
#if USE_FLOATS
1797
        s->mp3decctx[i]->butterflies_float = s->mp3decctx[0]->butterflies_float;
1798
#endif
1799
2.04k
    }
1800
1801
1.06k
    return 0;
1802
1.06k
}
1803
1804
1805
static av_cold void flush_mp3on4(AVCodecContext *avctx)
1806
247k
{
1807
247k
    int i;
1808
247k
    MP3On4DecodeContext *s = avctx->priv_data;
1809
1810
781k
    for (i = 0; i < s->frames; i++)
1811
533k
        mp_flush(s->mp3decctx[i]);
1812
247k
}
mpegaudiodec_float.c:flush_mp3on4
Line
Count
Source
1806
142k
{
1807
142k
    int i;
1808
142k
    MP3On4DecodeContext *s = avctx->priv_data;
1809
1810
468k
    for (i = 0; i < s->frames; i++)
1811
325k
        mp_flush(s->mp3decctx[i]);
1812
142k
}
mpegaudiodec_fixed.c:flush_mp3on4
Line
Count
Source
1806
105k
{
1807
105k
    int i;
1808
105k
    MP3On4DecodeContext *s = avctx->priv_data;
1809
1810
312k
    for (i = 0; i < s->frames; i++)
1811
207k
        mp_flush(s->mp3decctx[i]);
1812
105k
}
1813
1814
1815
static int decode_frame_mp3on4(AVCodecContext *avctx, AVFrame *frame,
1816
                               int *got_frame_ptr, AVPacket *avpkt)
1817
748k
{
1818
748k
    const uint8_t *buf     = avpkt->data;
1819
748k
    int buf_size           = avpkt->size;
1820
748k
    MP3On4DecodeContext *s = avctx->priv_data;
1821
748k
    MPADecodeContext *m;
1822
748k
    int fsize, len = buf_size, out_size = 0;
1823
748k
    uint32_t header;
1824
748k
    OUT_INT **out_samples;
1825
748k
    OUT_INT *outptr[2];
1826
748k
    int fr, ch, ret;
1827
1828
    /* get output buffer */
1829
748k
    frame->nb_samples = MPA_FRAME_SIZE;
1830
748k
    if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
1831
0
        return ret;
1832
748k
    out_samples = (OUT_INT **)frame->extended_data;
1833
1834
    // Discard too short frames
1835
748k
    if (buf_size < HEADER_SIZE)
1836
275k
        return AVERROR_INVALIDDATA;
1837
1838
472k
    avctx->bit_rate = 0;
1839
1840
472k
    ch = 0;
1841
913k
    for (fr = 0; fr < s->frames; fr++) {
1842
617k
        fsize = AV_RB16(buf) >> 4;
1843
617k
        fsize = FFMIN3(fsize, len, MPA_MAX_CODED_FRAME_SIZE);
1844
617k
        m     = s->mp3decctx[fr];
1845
617k
        av_assert1(m);
1846
1847
617k
        if (fsize < HEADER_SIZE) {
1848
119k
            av_log(avctx, AV_LOG_ERROR, "Frame size smaller than header size\n");
1849
119k
            return AVERROR_INVALIDDATA;
1850
119k
        }
1851
497k
        header = (AV_RB32(buf) & 0x000fffff) | s->syncword; // patch header
1852
1853
497k
        ret = avpriv_mpegaudio_decode_header((MPADecodeHeader *)m, header);
1854
497k
        if (ret < 0) {
1855
35.9k
            av_log(avctx, AV_LOG_ERROR, "Bad header, discard block\n");
1856
35.9k
            return AVERROR_INVALIDDATA;
1857
35.9k
        }
1858
1859
461k
        if (ch + m->nb_channels > avctx->ch_layout.nb_channels ||
1860
445k
            s->coff[fr] + m->nb_channels > avctx->ch_layout.nb_channels) {
1861
21.4k
            av_log(avctx, AV_LOG_ERROR, "frame channel count exceeds codec "
1862
21.4k
                                        "channel count\n");
1863
21.4k
            return AVERROR_INVALIDDATA;
1864
21.4k
        }
1865
440k
        ch += m->nb_channels;
1866
1867
440k
        outptr[0] = out_samples[s->coff[fr]];
1868
440k
        if (m->nb_channels > 1)
1869
417k
            outptr[1] = out_samples[s->coff[fr] + 1];
1870
1871
440k
        if ((ret = mp_decode_frame(m, outptr, buf, fsize)) < 0) {
1872
44.2k
            av_log(avctx, AV_LOG_ERROR, "failed to decode channel %d\n", ch);
1873
44.2k
            memset(outptr[0], 0, MPA_FRAME_SIZE*sizeof(OUT_INT));
1874
44.2k
            if (m->nb_channels > 1)
1875
39.1k
                memset(outptr[1], 0, MPA_FRAME_SIZE*sizeof(OUT_INT));
1876
44.2k
            ret = m->nb_channels * MPA_FRAME_SIZE*sizeof(OUT_INT);
1877
44.2k
        }
1878
1879
440k
        out_size += ret;
1880
440k
        buf      += fsize;
1881
440k
        len      -= fsize;
1882
1883
440k
        avctx->bit_rate += m->bit_rate;
1884
440k
    }
1885
295k
    if (ch != avctx->ch_layout.nb_channels) {
1886
4.58k
        av_log(avctx, AV_LOG_ERROR, "failed to decode all channels\n");
1887
4.58k
        return AVERROR_INVALIDDATA;
1888
4.58k
    }
1889
1890
    /* update codec info */
1891
291k
    avctx->sample_rate = s->mp3decctx[0]->sample_rate;
1892
1893
291k
    frame->nb_samples = out_size / (avctx->ch_layout.nb_channels * sizeof(OUT_INT));
1894
291k
    *got_frame_ptr    = 1;
1895
1896
291k
    return buf_size;
1897
295k
}
mpegaudiodec_float.c:decode_frame_mp3on4
Line
Count
Source
1817
422k
{
1818
422k
    const uint8_t *buf     = avpkt->data;
1819
422k
    int buf_size           = avpkt->size;
1820
422k
    MP3On4DecodeContext *s = avctx->priv_data;
1821
422k
    MPADecodeContext *m;
1822
422k
    int fsize, len = buf_size, out_size = 0;
1823
422k
    uint32_t header;
1824
422k
    OUT_INT **out_samples;
1825
422k
    OUT_INT *outptr[2];
1826
422k
    int fr, ch, ret;
1827
1828
    /* get output buffer */
1829
422k
    frame->nb_samples = MPA_FRAME_SIZE;
1830
422k
    if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
1831
0
        return ret;
1832
422k
    out_samples = (OUT_INT **)frame->extended_data;
1833
1834
    // Discard too short frames
1835
422k
    if (buf_size < HEADER_SIZE)
1836
160k
        return AVERROR_INVALIDDATA;
1837
1838
262k
    avctx->bit_rate = 0;
1839
1840
262k
    ch = 0;
1841
508k
    for (fr = 0; fr < s->frames; fr++) {
1842
351k
        fsize = AV_RB16(buf) >> 4;
1843
351k
        fsize = FFMIN3(fsize, len, MPA_MAX_CODED_FRAME_SIZE);
1844
351k
        m     = s->mp3decctx[fr];
1845
351k
        av_assert1(m);
1846
1847
351k
        if (fsize < HEADER_SIZE) {
1848
71.1k
            av_log(avctx, AV_LOG_ERROR, "Frame size smaller than header size\n");
1849
71.1k
            return AVERROR_INVALIDDATA;
1850
71.1k
        }
1851
280k
        header = (AV_RB32(buf) & 0x000fffff) | s->syncword; // patch header
1852
1853
280k
        ret = avpriv_mpegaudio_decode_header((MPADecodeHeader *)m, header);
1854
280k
        if (ret < 0) {
1855
23.2k
            av_log(avctx, AV_LOG_ERROR, "Bad header, discard block\n");
1856
23.2k
            return AVERROR_INVALIDDATA;
1857
23.2k
        }
1858
1859
257k
        if (ch + m->nb_channels > avctx->ch_layout.nb_channels ||
1860
248k
            s->coff[fr] + m->nb_channels > avctx->ch_layout.nb_channels) {
1861
12.3k
            av_log(avctx, AV_LOG_ERROR, "frame channel count exceeds codec "
1862
12.3k
                                        "channel count\n");
1863
12.3k
            return AVERROR_INVALIDDATA;
1864
12.3k
        }
1865
245k
        ch += m->nb_channels;
1866
1867
245k
        outptr[0] = out_samples[s->coff[fr]];
1868
245k
        if (m->nb_channels > 1)
1869
229k
            outptr[1] = out_samples[s->coff[fr] + 1];
1870
1871
245k
        if ((ret = mp_decode_frame(m, outptr, buf, fsize)) < 0) {
1872
25.5k
            av_log(avctx, AV_LOG_ERROR, "failed to decode channel %d\n", ch);
1873
25.5k
            memset(outptr[0], 0, MPA_FRAME_SIZE*sizeof(OUT_INT));
1874
25.5k
            if (m->nb_channels > 1)
1875
22.4k
                memset(outptr[1], 0, MPA_FRAME_SIZE*sizeof(OUT_INT));
1876
25.5k
            ret = m->nb_channels * MPA_FRAME_SIZE*sizeof(OUT_INT);
1877
25.5k
        }
1878
1879
245k
        out_size += ret;
1880
245k
        buf      += fsize;
1881
245k
        len      -= fsize;
1882
1883
245k
        avctx->bit_rate += m->bit_rate;
1884
245k
    }
1885
156k
    if (ch != avctx->ch_layout.nb_channels) {
1886
2.92k
        av_log(avctx, AV_LOG_ERROR, "failed to decode all channels\n");
1887
2.92k
        return AVERROR_INVALIDDATA;
1888
2.92k
    }
1889
1890
    /* update codec info */
1891
153k
    avctx->sample_rate = s->mp3decctx[0]->sample_rate;
1892
1893
153k
    frame->nb_samples = out_size / (avctx->ch_layout.nb_channels * sizeof(OUT_INT));
1894
153k
    *got_frame_ptr    = 1;
1895
1896
153k
    return buf_size;
1897
156k
}
mpegaudiodec_fixed.c:decode_frame_mp3on4
Line
Count
Source
1817
325k
{
1818
325k
    const uint8_t *buf     = avpkt->data;
1819
325k
    int buf_size           = avpkt->size;
1820
325k
    MP3On4DecodeContext *s = avctx->priv_data;
1821
325k
    MPADecodeContext *m;
1822
325k
    int fsize, len = buf_size, out_size = 0;
1823
325k
    uint32_t header;
1824
325k
    OUT_INT **out_samples;
1825
325k
    OUT_INT *outptr[2];
1826
325k
    int fr, ch, ret;
1827
1828
    /* get output buffer */
1829
325k
    frame->nb_samples = MPA_FRAME_SIZE;
1830
325k
    if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
1831
0
        return ret;
1832
325k
    out_samples = (OUT_INT **)frame->extended_data;
1833
1834
    // Discard too short frames
1835
325k
    if (buf_size < HEADER_SIZE)
1836
115k
        return AVERROR_INVALIDDATA;
1837
1838
209k
    avctx->bit_rate = 0;
1839
1840
209k
    ch = 0;
1841
405k
    for (fr = 0; fr < s->frames; fr++) {
1842
265k
        fsize = AV_RB16(buf) >> 4;
1843
265k
        fsize = FFMIN3(fsize, len, MPA_MAX_CODED_FRAME_SIZE);
1844
265k
        m     = s->mp3decctx[fr];
1845
265k
        av_assert1(m);
1846
1847
265k
        if (fsize < HEADER_SIZE) {
1848
48.6k
            av_log(avctx, AV_LOG_ERROR, "Frame size smaller than header size\n");
1849
48.6k
            return AVERROR_INVALIDDATA;
1850
48.6k
        }
1851
217k
        header = (AV_RB32(buf) & 0x000fffff) | s->syncword; // patch header
1852
1853
217k
        ret = avpriv_mpegaudio_decode_header((MPADecodeHeader *)m, header);
1854
217k
        if (ret < 0) {
1855
12.6k
            av_log(avctx, AV_LOG_ERROR, "Bad header, discard block\n");
1856
12.6k
            return AVERROR_INVALIDDATA;
1857
12.6k
        }
1858
1859
204k
        if (ch + m->nb_channels > avctx->ch_layout.nb_channels ||
1860
196k
            s->coff[fr] + m->nb_channels > avctx->ch_layout.nb_channels) {
1861
9.12k
            av_log(avctx, AV_LOG_ERROR, "frame channel count exceeds codec "
1862
9.12k
                                        "channel count\n");
1863
9.12k
            return AVERROR_INVALIDDATA;
1864
9.12k
        }
1865
195k
        ch += m->nb_channels;
1866
1867
195k
        outptr[0] = out_samples[s->coff[fr]];
1868
195k
        if (m->nb_channels > 1)
1869
188k
            outptr[1] = out_samples[s->coff[fr] + 1];
1870
1871
195k
        if ((ret = mp_decode_frame(m, outptr, buf, fsize)) < 0) {
1872
18.6k
            av_log(avctx, AV_LOG_ERROR, "failed to decode channel %d\n", ch);
1873
18.6k
            memset(outptr[0], 0, MPA_FRAME_SIZE*sizeof(OUT_INT));
1874
18.6k
            if (m->nb_channels > 1)
1875
16.6k
                memset(outptr[1], 0, MPA_FRAME_SIZE*sizeof(OUT_INT));
1876
18.6k
            ret = m->nb_channels * MPA_FRAME_SIZE*sizeof(OUT_INT);
1877
18.6k
        }
1878
1879
195k
        out_size += ret;
1880
195k
        buf      += fsize;
1881
195k
        len      -= fsize;
1882
1883
195k
        avctx->bit_rate += m->bit_rate;
1884
195k
    }
1885
139k
    if (ch != avctx->ch_layout.nb_channels) {
1886
1.66k
        av_log(avctx, AV_LOG_ERROR, "failed to decode all channels\n");
1887
1.66k
        return AVERROR_INVALIDDATA;
1888
1.66k
    }
1889
1890
    /* update codec info */
1891
137k
    avctx->sample_rate = s->mp3decctx[0]->sample_rate;
1892
1893
137k
    frame->nb_samples = out_size / (avctx->ch_layout.nb_channels * sizeof(OUT_INT));
1894
137k
    *got_frame_ptr    = 1;
1895
1896
137k
    return buf_size;
1897
139k
}
1898
#endif /* CONFIG_MP3ON4_DECODER || CONFIG_MP3ON4FLOAT_DECODER */