FFmpeg
libavutil
half2float.c
Go to the documentation of this file.
1
/*
2
* This file is part of FFmpeg.
3
*
4
* FFmpeg is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU Lesser General Public
6
* License as published by the Free Software Foundation; either
7
* version 2.1 of the License, or (at your option) any later version.
8
*
9
* FFmpeg is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* Lesser General Public License for more details.
13
*
14
* You should have received a copy of the GNU Lesser General Public
15
* License along with FFmpeg; if not, write to the Free Software
16
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
*/
18
19
#include "
libavutil/half2float.h
"
20
21
#if !HAVE_FAST_FLOAT16
22
static
uint32_t
convertmantissa
(uint32_t
i
)
23
{
24
int32_t
m =
i
<< 13;
// Zero pad mantissa bits
25
int32_t
e = 0;
// Zero exponent
26
27
while
(!(m & 0x00800000)) {
// While not normalized
28
e -= 0x00800000;
// Decrement exponent (1<<23)
29
m <<= 1;
// Shift mantissa
30
}
31
32
m &= ~0x00800000;
// Clear leading 1 bit
33
e += 0x38800000;
// Adjust bias ((127-14)<<23)
34
35
return
m | e;
// Return combined number
36
}
37
#endif
38
39
void
ff_init_half2float_tables
(
Half2FloatTables
*t)
40
{
41
#if !HAVE_FAST_FLOAT16
42
t->
mantissatable
[0] = 0;
43
for
(
int
i
= 1;
i
< 1024;
i
++)
44
t->
mantissatable
[
i
] =
convertmantissa
(
i
);
45
for
(
int
i
= 1024;
i
< 2048;
i
++)
46
t->
mantissatable
[
i
] = 0x38000000UL + ((
i
- 1024) << 13UL);
47
for
(
int
i
= 2048;
i
< 3072;
i
++)
48
t->
mantissatable
[
i
] = t->
mantissatable
[
i
- 1024] | 0x400000UL;
49
t->
mantissatable
[2048] = t->
mantissatable
[1024];
50
51
t->
exponenttable
[0] = 0;
52
for
(
int
i
= 1;
i
< 31;
i
++)
53
t->
exponenttable
[
i
] =
i
<< 23;
54
for
(
int
i
= 33;
i
< 63;
i
++)
55
t->
exponenttable
[
i
] = 0x80000000UL + ((
i
- 32) << 23UL);
56
t->
exponenttable
[31]= 0x47800000UL;
57
t->
exponenttable
[32]= 0x80000000UL;
58
t->
exponenttable
[63]= 0xC7800000UL;
59
60
t->
offsettable
[0] = 0;
61
for
(
int
i
= 1;
i
< 64;
i
++)
62
t->
offsettable
[
i
] = 1024;
63
t->
offsettable
[31] = 2048;
64
t->
offsettable
[32] = 0;
65
t->
offsettable
[63] = 2048;
66
#endif
67
}
Half2FloatTables
Definition:
half2float.h:27
convertmantissa
static uint32_t convertmantissa(uint32_t i)
Definition:
half2float.c:22
Half2FloatTables::offsettable
uint16_t offsettable[64]
Definition:
half2float.h:33
for
for(k=2;k<=8;++k)
Definition:
h264pred_template.c:425
half2float.h
i
#define i(width, name, range_min, range_max)
Definition:
cbs_h2645.c:255
ff_init_half2float_tables
void ff_init_half2float_tables(Half2FloatTables *t)
Definition:
half2float.c:39
Half2FloatTables::exponenttable
uint32_t exponenttable[64]
Definition:
half2float.h:32
Half2FloatTables::mantissatable
uint32_t mantissatable[3072]
Definition:
half2float.h:31
int32_t
int32_t
Definition:
audioconvert.c:56
Generated on Thu Apr 18 2024 22:41:51 for FFmpeg by
1.8.17