]> git.sesse.net Git - ffmpeg/blobdiff - libavutil/intfloat_readwrite.c
Handle input or output len of 0 properly in lzo decoder.
[ffmpeg] / libavutil / intfloat_readwrite.c
index 261cf76c33ea56191e48477d0f50e790a3422d0c..d9b3752bb1cc51bdca9c5c127d65029d28136aee 100644 (file)
  */
 
 /**
- * @file intfloat_readwrite.c
- * Portable IEEE float/double read/write functions.
+ * @file
+ * portable IEEE float/double read/write functions
  */
 
-#include "common.h"
+#include <stdint.h>
+#include <math.h>
 #include "intfloat_readwrite.h"
 
 double av_int2dbl(int64_t v){
     if(v+v > 0xFFEULL<<52)
-        return 0.0/0.0;
+        return NAN;
     return ldexp(((v&((1LL<<52)-1)) + (1LL<<52)) * (v>>63|1), (v>>52&0x7FF)-1075);
 }
 
 float av_int2flt(int32_t v){
     if(v+v > 0xFF000000U)
-        return 0.0/0.0;
+        return NAN;
     return ldexp(((v&0x7FFFFF) + (1<<23)) * (v>>31|1), (v>>23&0xFF)-150);
 }
 
@@ -48,10 +49,10 @@ double av_ext2dbl(const AVExtFloat ext){
         m = (m<<8) + ext.mantissa[i];
     e = (((int)ext.exponent[0]&0x7f)<<8) | ext.exponent[1];
     if (e == 0x7fff && m)
-        return 0.0/0.0;
+        return NAN;
     e -= 16383 + 63;        /* In IEEE 80 bits, the whole (i.e. 1.xxxx)
                              * mantissa bit is written as opposed to the
-                             * single and double precision formats */
+                             * single and double precision formats. */
     if (ext.exponent[0]&0x80)
         m= -m;
     return ldexp(m, e);
@@ -87,7 +88,7 @@ AVExtFloat av_dbl2ext(double d){
             ext.mantissa[i] = m>>(56-(i<<3));
     } else if (f != 0.0) {
         ext.exponent[0] = 0x7f; ext.exponent[1] = 0xff;
-        if (f != 1/0.0)
+        if (f != INFINITY)
             ext.mantissa[0] = ~0;
     }
     if (d < 0)