summaryrefslogtreecommitdiff
path: root/libavutil/float2half.h
diff options
context:
space:
mode:
Diffstat (limited to 'libavutil/float2half.h')
-rw-r--r--libavutil/float2half.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/libavutil/float2half.h b/libavutil/float2half.h
index 20fdc2a36b..e619046911 100644
--- a/libavutil/float2half.h
+++ b/libavutil/float2half.h
@@ -20,21 +20,37 @@
#define AVUTIL_FLOAT2HALF_H
#include <stdint.h>
+#include "intfloat.h"
+
+#include "config.h"
typedef struct Float2HalfTables {
+#if HAVE_FAST_FLOAT16
+ uint8_t dummy;
+#else
uint16_t basetable[512];
uint8_t shifttable[512];
+#endif
} Float2HalfTables;
void ff_init_float2half_tables(Float2HalfTables *t);
static inline uint16_t float2half(uint32_t f, const Float2HalfTables *t)
{
+#if HAVE_FAST_FLOAT16
+ union {
+ _Float16 f;
+ uint16_t i;
+ } u;
+ u.f = av_int2float(f);
+ return u.i;
+#else
uint16_t h;
h = t->basetable[(f >> 23) & 0x1ff] + ((f & 0x007fffff) >> t->shifttable[(f >> 23) & 0x1ff]);
return h;
+#endif
}
#endif /* AVUTIL_FLOAT2HALF_H */