changeset 15976:28b8fc8278e0

(hopefully) fixing remaining float endianness problems
author reimar
date Wed, 13 Jul 2005 17:24:42 +0000
parents a711c944b79b
children 54f2deef4b68
files bswap.h libmpdemux/ebml.c libmpdemux/nuppelvideo.h
diffstat 3 files changed, 47 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/bswap.h	Wed Jul 13 07:44:54 2005 +0000
+++ b/bswap.h	Wed Jul 13 17:24:42 2005 +0000
@@ -117,6 +117,37 @@
 
 #endif	/* !HAVE_BYTESWAP_H */
 
+static float inline bswap_flt(float x) {
+  union {uint32_t i; float f;} u;
+  u.f = x;
+  u.i = bswap_32(u.i);
+  return u.f;
+}
+
+static double inline bswap_dbl(double x) {
+  union {uint64_t i; double d;} u;
+  u.d = x;
+  u.i = bswap_64(u.i);
+  return u.d;
+}
+
+static long double inline bswap_ldbl(long double x) {
+  union {char d[10]; long double ld;} uin;
+  union {char d[10]; long double ld;} uout;
+  uin.ld = x;
+  uout.d[0] = uin.d[9];
+  uout.d[1] = uin.d[8];
+  uout.d[2] = uin.d[7];
+  uout.d[3] = uin.d[6];
+  uout.d[4] = uin.d[5];
+  uout.d[5] = uin.d[4];
+  uout.d[6] = uin.d[3];
+  uout.d[7] = uin.d[2];
+  uout.d[8] = uin.d[1];
+  uout.d[9] = uin.d[0];
+  return uout.ld;
+}
+
 // be2me ... BigEndian to MachineEndian
 // le2me ... LittleEndian to MachineEndian
 
@@ -127,6 +158,12 @@
 #define le2me_16(x) bswap_16(x)
 #define le2me_32(x) bswap_32(x)
 #define le2me_64(x) bswap_64(x)
+#define be2me_flt(x) (x)
+#define be2me_dbl(x) (x)
+#define be2me_ldbl(x) (x)
+#define le2me_flt(x) bswap_flt(x)
+#define le2me_dbl(x) bswap_dbl(x)
+#define le2me_ldbl(x) bswap_ldbl(x)
 #else
 #define be2me_16(x) bswap_16(x)
 #define be2me_32(x) bswap_32(x)
@@ -134,6 +171,12 @@
 #define le2me_16(x) (x)
 #define le2me_32(x) (x)
 #define le2me_64(x) (x)
+#define be2me_flt(x) bswap_flt(x)
+#define be2me_dbl(x) bswap_dbl(x)
+#define be2me_ldbl(x) bswap_ldbl(x)
+#define le2me_flt(x) (x)
+#define le2me_dbl(x) (x)
+#define le2me_ldbl(x) (x)
 #endif
 
 #endif /* __BSWAP_H__ */
--- a/libmpdemux/ebml.c	Wed Jul 13 07:44:54 2005 +0000
+++ b/libmpdemux/ebml.c	Wed Jul 13 17:24:42 2005 +0000
@@ -12,6 +12,7 @@
 
 #include "stream.h"
 #include "ebml.h"
+#include "bswap.h"
 
 
 /*
@@ -194,7 +195,7 @@
         union {uint8_t data[10]; long double ld;} u;
         if (stream_read (s, u.data, 10) != 10)
           return EBML_FLOAT_INVALID;
-        value = u.ld;
+        value = be2me_ldbl(u.ld);
         break;
       }
 
--- a/libmpdemux/nuppelvideo.h	Wed Jul 13 07:44:54 2005 +0000
+++ b/libmpdemux/nuppelvideo.h	Wed Jul 13 17:24:42 2005 +0000
@@ -92,12 +92,13 @@
     unsigned char *buffer_offset;
 } audbuffertyp;
 
-#ifdef WORDS_BIGENDIAN
 #define le2me_rtfileheader(h) {					\
     (h)->width = le2me_32((h)->width);				\
     (h)->height = le2me_32((h)->height);			\
     (h)->desiredwidth = le2me_32((h)->desiredwidth);		\
     (h)->desiredheight = le2me_32((h)->desiredheight);		\
+    (h)->aspect = le2me_dbl((h)->aspect);			\
+    (h)->fps = le2me_dbl((h)->fps);				\
     (h)->videoblocks = le2me_32((h)->videoblocks);		\
     (h)->audioblocks = le2me_32((h)->audioblocks);		\
     (h)->textsblocks = le2me_32((h)->textsblocks);		\
@@ -107,8 +108,4 @@
     (h)->timecode = le2me_32((h)->timecode);			\
     (h)->packetlength = le2me_32((h)->packetlength);		\
   }
-#else
-#define le2me_rtfileheader(h) /**/
-#define le2me_rtframeheader(h) /**/
-#endif