diff options
Diffstat (limited to 'libavutil/float2half.h')
-rw-r--r-- | libavutil/float2half.h | 16 |
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 */ |