FFmpeg
float2half.h
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 #ifndef AVUTIL_FLOAT2HALF_H
20 #define AVUTIL_FLOAT2HALF_H
21 
22 #include <stdint.h>
23 #include "intfloat.h"
24 
25 #include "config.h"
26 
27 typedef struct Float2HalfTables {
28 #if HAVE_FAST_FLOAT16
29  uint8_t dummy;
30 #else
31  uint16_t basetable[512];
32  uint8_t shifttable[512];
33 #endif
35 
37 
38 static inline uint16_t float2half(uint32_t f, const Float2HalfTables *t)
39 {
40 #if HAVE_FAST_FLOAT16
41  union {
42  _Float16 f;
43  uint16_t i;
44  } u;
45  u.f = av_int2float(f);
46  return u.i;
47 #else
48  uint16_t h;
49 
50  h = t->basetable[(f >> 23) & 0x1ff] + ((f & 0x007fffff) >> t->shifttable[(f >> 23) & 0x1ff]);
51 
52  return h;
53 #endif
54 }
55 
56 #endif /* AVUTIL_FLOAT2HALF_H */
Float2HalfTables
Definition: float2half.h:27
u
#define u(width, name, range_min, range_max)
Definition: cbs_h2645.c:251
intfloat.h
av_int2float
static av_always_inline float av_int2float(uint32_t i)
Reinterpret a 32-bit integer as a float.
Definition: intfloat.h:40
dummy
int dummy
Definition: motion.c:66
Float2HalfTables::shifttable
uint8_t shifttable[512]
Definition: float2half.h:32
f
f
Definition: af_crystalizer.c:122
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
ff_init_float2half_tables
void ff_init_float2half_tables(Float2HalfTables *t)
Definition: float2half.c:21
float2half
static uint16_t float2half(uint32_t f, const Float2HalfTables *t)
Definition: float2half.h:38
Float2HalfTables::basetable
uint16_t basetable[512]
Definition: float2half.h:31
h
h
Definition: vp9dsp_template.c:2070