FFmpeg
Main Page
Related Pages
Modules
Namespaces
Namespace List
Namespace Members
All
Functions
Variables
Data Structures
Data Structures
Data Structure Index
Class Hierarchy
Data Fields
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Functions
_
a
c
d
g
i
o
q
r
s
v
~
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Enumerations
Enumerator
a
d
e
f
i
j
l
m
n
p
r
s
v
Files
File List
Globals
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
b
c
d
e
f
g
h
i
l
m
o
p
q
r
s
t
u
v
w
x
y
Enumerations
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Enumerator
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Macros
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Examples
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Modules
Pages
libavcodec
mpegaudio_tablegen.h
Go to the documentation of this file.
1
/*
2
* Header file for hardcoded mpegaudiodec tables
3
*
4
* Copyright (c) 2009 Reimar Döffinger <Reimar.Doeffinger@gmx.de>
5
*
6
* This file is part of FFmpeg.
7
*
8
* FFmpeg is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU Lesser General Public
10
* License as published by the Free Software Foundation; either
11
* version 2.1 of the License, or (at your option) any later version.
12
*
13
* FFmpeg is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* Lesser General Public License for more details.
17
*
18
* You should have received a copy of the GNU Lesser General Public
19
* License along with FFmpeg; if not, write to the Free Software
20
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
*/
22
23
#ifndef AVCODEC_MPEGAUDIO_TABLEGEN_H
24
#define AVCODEC_MPEGAUDIO_TABLEGEN_H
25
26
#include <stdint.h>
27
#include <math.h>
28
#include "
libavutil/attributes.h
"
29
30
#define TABLE_4_3_SIZE (8191 + 16)*4
31
#if CONFIG_HARDCODED_TABLES
32
#define mpegaudio_tableinit()
33
#include "libavcodec/mpegaudio_tables.h"
34
#else
35
static
int8_t
table_4_3_exp
[
TABLE_4_3_SIZE
];
36
static
uint32_t
table_4_3_value
[
TABLE_4_3_SIZE
];
37
static
uint32_t
exp_table_fixed
[512];
38
static
uint32_t
expval_table_fixed
[512][16];
39
static
float
exp_table_float
[512];
40
static
float
expval_table_float
[512][16];
41
42
#define FRAC_BITS 23
43
#define IMDCT_SCALAR 1.759
44
45
static
av_cold
void
mpegaudio_tableinit
(
void
)
46
{
47
int
i
,
value
, exponent;
48
static
const
double
exp2_lut[4] = {
49
1.00000000000000000000,
/* 2 ^ (0 * 0.25) */
50
1.18920711500272106672,
/* 2 ^ (1 * 0.25) */
51
M_SQRT2
,
/* 2 ^ (2 * 0.25) */
52
1.68179283050742908606,
/* 2 ^ (3 * 0.25) */
53
};
54
static
double
pow43_lut[16];
55
double
exp2_base = 2.11758236813575084767080625169910490512847900390625e-22;
// 2^(-72)
56
double
exp2_val;
57
double
pow43_val = 0;
58
for
(
i
= 0;
i
< 16; ++
i
)
59
pow43_lut[
i
] =
i
*
cbrt
(
i
);
60
61
for
(
i
= 1;
i
<
TABLE_4_3_SIZE
;
i
++) {
62
double
f
, fm;
63
int
e, m;
64
double
value
=
i
/ 4;
65
if
((
i
& 3) == 0)
66
pow43_val =
value
/
IMDCT_SCALAR
*
cbrt
(
value
);
67
f
= pow43_val * exp2_lut[
i
& 3];
68
fm = frexp(
f
, &e);
69
m =
llrint
(fm * (1LL << 31));
70
e +=
FRAC_BITS
- 31 + 5 - 100;
71
72
/* normalized to FRAC_BITS */
73
table_4_3_value
[
i
] = m;
74
table_4_3_exp
[
i
] = -e;
75
}
76
for
(exponent = 0; exponent < 512; exponent++) {
77
if
(exponent && (exponent & 3) == 0)
78
exp2_base *= 2;
79
exp2_val = exp2_base * exp2_lut[exponent & 3] /
IMDCT_SCALAR
;
80
for
(
value
= 0;
value
< 16;
value
++) {
81
double
f
= pow43_lut[
value
] * exp2_val;
82
expval_table_fixed
[exponent][
value
] = (
f
< 0xFFFFFFFF ?
llrint
(
f
) : 0xFFFFFFFF);
83
expval_table_float
[exponent][
value
] =
f
;
84
}
85
exp_table_fixed
[exponent] =
expval_table_fixed
[exponent][1];
86
exp_table_float
[exponent] =
expval_table_float
[exponent][1];
87
}
88
}
89
#endif
/* CONFIG_HARDCODED_TABLES */
90
91
#endif
/* AVCODEC_MPEGAUDIO_TABLEGEN_H */
FRAC_BITS
#define FRAC_BITS
Definition:
mpegaudio_tablegen.h:42
exp_table_float
static float exp_table_float[512]
Definition:
mpegaudio_tablegen.h:39
table_4_3_exp
static int8_t table_4_3_exp[TABLE_4_3_SIZE]
Definition:
mpegaudio_tablegen.h:35
TABLE_4_3_SIZE
#define TABLE_4_3_SIZE
Definition:
mpegaudio_tablegen.h:30
mpegaudio_tableinit
static av_cold void mpegaudio_tableinit(void)
Definition:
mpegaudio_tablegen.h:45
cbrt
#define cbrt
Definition:
tablegen.h:35
av_cold
#define av_cold
Definition:
attributes.h:90
f
#define f(width, name)
Definition:
cbs_vp9.c:255
expval_table_fixed
static uint32_t expval_table_fixed[512][16]
Definition:
mpegaudio_tablegen.h:38
IMDCT_SCALAR
#define IMDCT_SCALAR
Definition:
mpegaudio_tablegen.h:43
attributes.h
i
#define i(width, name, range_min, range_max)
Definition:
cbs_h2645.c:269
value
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default value
Definition:
writing_filters.txt:86
expval_table_float
static float expval_table_float[512][16]
Definition:
mpegaudio_tablegen.h:40
exp_table_fixed
static uint32_t exp_table_fixed[512]
Definition:
mpegaudio_tablegen.h:37
llrint
#define llrint(x)
Definition:
libm.h:394
M_SQRT2
#define M_SQRT2
Definition:
mathematics.h:61
table_4_3_value
static uint32_t table_4_3_value[TABLE_4_3_SIZE]
Definition:
mpegaudio_tablegen.h:36
Generated on Wed Aug 24 2022 21:31:28 for FFmpeg by
1.8.17