diff --git a/libavcodec/exr.c b/libavcodec/exr.c index a37bebf27a..c8f2b9ad75 100644 --- a/libavcodec/exr.c +++ b/libavcodec/exr.c @@ -77,15 +77,13 @@ static inline uint16_t exr_flt2uint(uint32_t v) */ static inline uint16_t exr_halflt2uint(uint16_t v) { - int exp = v >> 10; - if (v & 0x8000) - return 0; - if (!exp) - return (v >> 9) & 1; - if (exp >= 15) - return 0xffff; + unsigned exp = 14 - (v >> 10); + if (exp >= 14) { + if (exp == 14) return (v >> 9) & 1; + else return (v & 0x8000) ? 0 : 0xffff; + } v <<= 6; - return (v + (1 << 16)) >> (15 - exp); + return (v + (1 << 16)) >> (exp + 1); } /**