diff options
Diffstat (limited to 'libavutil/half2float.h')
-rw-r--r-- | libavutil/half2float.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/libavutil/half2float.h b/libavutil/half2float.h index 428a27a19f..dbd5e7150f 100644 --- a/libavutil/half2float.h +++ b/libavutil/half2float.h @@ -20,22 +20,38 @@ #define AVUTIL_HALF2FLOAT_H #include <stdint.h> +#include "intfloat.h" + +#include "config.h" typedef struct Half2FloatTables { +#if HAVE_FAST_FLOAT16 + uint8_t dummy; +#else uint32_t mantissatable[3072]; uint32_t exponenttable[64]; uint16_t offsettable[64]; +#endif } Half2FloatTables; void ff_init_half2float_tables(Half2FloatTables *t); static inline uint32_t half2float(uint16_t h, const Half2FloatTables *t) { +#if HAVE_FAST_FLOAT16 + union { + _Float16 f; + uint16_t i; + } u; + u.i = h; + return av_float2int(u.f); +#else uint32_t f; f = t->mantissatable[t->offsettable[h >> 10] + (h & 0x3ff)] + t->exponenttable[h >> 10]; return f; +#endif } #endif /* AVUTIL_HALF2FLOAT_H */ |