Mercurial > mplayer.hg
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