annotate mpegaudio_tablegen.h @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents a1b4029b2465
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10469
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
1 /*
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
2 * Header file for hardcoded mpegaudiodec tables
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
3 *
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
4 * Copyright (c) 2009 Reimar Döffinger <Reimar.Doeffinger@gmx.de>
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
5 *
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
6 * This file is part of FFmpeg.
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
7 *
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
8 * FFmpeg is free software; you can redistribute it and/or
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
10 * License as published by the Free Software Foundation; either
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
11 * version 2.1 of the License, or (at your option) any later version.
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
12 *
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
13 * FFmpeg is distributed in the hope that it will be useful,
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
16 * Lesser General Public License for more details.
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
17 *
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
19 * License along with FFmpeg; if not, write to the Free Software
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
21 */
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
22
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
23 #ifndef MPEGAUDIO_TABLEGEN_H
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
24 #define MPEGAUDIO_TABLEGEN_H
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
25
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
26 #include <stdint.h>
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
27 #include <math.h>
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
28
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
29 #define TABLE_4_3_SIZE (8191 + 16)*4
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
30 #if CONFIG_HARDCODED_TABLES
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
31 #define mpegaudio_tableinit()
10473
36a16fb5c497 Fix out-of-tree builds with --enable-hardcoded-tables
reimar
parents: 10470
diff changeset
32 #include "libavcodec/mpegaudio_tables.h"
10469
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
33 #else
10575
bcd863ec8208 cosmetics: K&R style, prettyprinting
diego
parents: 10570
diff changeset
34 static int8_t table_4_3_exp[TABLE_4_3_SIZE];
10469
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
35 static uint32_t table_4_3_value[TABLE_4_3_SIZE];
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
36 static uint32_t exp_table[512];
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
37 static uint32_t expval_table[512][16];
11707
eb9e142ea51f float based mp1/mp2/mp3 decoders.
michael
parents: 10576
diff changeset
38 static float exp_table_float[512];
eb9e142ea51f float based mp1/mp2/mp3 decoders.
michael
parents: 10576
diff changeset
39 static float expval_table_float[512][16];
10469
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
40
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
41 static void mpegaudio_tableinit(void)
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
42 {
10497
8b4b365d08f5 Simpliy exp*table init, based on patch by reimar.
michael
parents: 10473
diff changeset
43 int i, value, exponent;
10575
bcd863ec8208 cosmetics: K&R style, prettyprinting
diego
parents: 10570
diff changeset
44 for (i = 1; i < TABLE_4_3_SIZE; i++) {
bcd863ec8208 cosmetics: K&R style, prettyprinting
diego
parents: 10570
diff changeset
45 double value = i / 4;
10469
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
46 double f, fm;
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
47 int e, m;
10575
bcd863ec8208 cosmetics: K&R style, prettyprinting
diego
parents: 10570
diff changeset
48 f = value * cbrtf(value) * pow(2, (i & 3) * 0.25);
10469
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
49 fm = frexp(f, &e);
10575
bcd863ec8208 cosmetics: K&R style, prettyprinting
diego
parents: 10570
diff changeset
50 m = (uint32_t)(fm * (1LL << 31) + 0.5);
bcd863ec8208 cosmetics: K&R style, prettyprinting
diego
parents: 10570
diff changeset
51 e += FRAC_BITS - 31 + 5 - 100;
10469
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
52
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
53 /* normalized to FRAC_BITS */
10575
bcd863ec8208 cosmetics: K&R style, prettyprinting
diego
parents: 10570
diff changeset
54 table_4_3_value[i] = m;
bcd863ec8208 cosmetics: K&R style, prettyprinting
diego
parents: 10570
diff changeset
55 table_4_3_exp[i] = -e;
10469
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
56 }
10575
bcd863ec8208 cosmetics: K&R style, prettyprinting
diego
parents: 10570
diff changeset
57 for (exponent = 0; exponent < 512; exponent++) {
bcd863ec8208 cosmetics: K&R style, prettyprinting
diego
parents: 10570
diff changeset
58 for (value = 0; value < 16; value++) {
bcd863ec8208 cosmetics: K&R style, prettyprinting
diego
parents: 10570
diff changeset
59 double f = (double)value * cbrtf(value) * pow(2, (exponent - 400) * 0.25 + FRAC_BITS + 5);
bcd863ec8208 cosmetics: K&R style, prettyprinting
diego
parents: 10570
diff changeset
60 expval_table[exponent][value] = llrint(f);
11707
eb9e142ea51f float based mp1/mp2/mp3 decoders.
michael
parents: 10576
diff changeset
61 expval_table_float[exponent][value] = f;
10497
8b4b365d08f5 Simpliy exp*table init, based on patch by reimar.
michael
parents: 10473
diff changeset
62 }
10575
bcd863ec8208 cosmetics: K&R style, prettyprinting
diego
parents: 10570
diff changeset
63 exp_table[exponent] = expval_table[exponent][1];
11707
eb9e142ea51f float based mp1/mp2/mp3 decoders.
michael
parents: 10576
diff changeset
64 exp_table_float[exponent] = expval_table_float[exponent][1];
10469
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
65 }
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
66 }
10470
08be6978ac8e 10l, fix incorrect endif comment.
reimar
parents: 10469
diff changeset
67 #endif /* CONFIG_HARDCODED_TABLES */
10469
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
68
23ca6d60184d Add support for hardcoding the mpegaudiodec tables.
reimar
parents:
diff changeset
69 #endif /* MPEGAUDIO_TABLEGEN_H */