mirror of
https://github.com/mpv-player/mpv
synced 2025-03-25 04:38:01 +00:00
(hopefully) fixing remaining float endianness problems
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@15977 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
e20ffdf5b6
commit
2d7dbaa10f
43
bswap.h
43
bswap.h
@ -117,6 +117,37 @@ static inline uint64_t ByteSwap64(uint64_t x)
|
||||
|
||||
#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 @@ static inline uint64_t ByteSwap64(uint64_t x)
|
||||
#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 @@ static inline uint64_t ByteSwap64(uint64_t x)
|
||||
#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__ */
|
||||
|
@ -12,6 +12,7 @@
|
||||
|
||||
#include "stream.h"
|
||||
#include "ebml.h"
|
||||
#include "bswap.h"
|
||||
|
||||
|
||||
/*
|
||||
@ -194,7 +195,7 @@ ebml_read_float (stream_t *s, uint64_t *length)
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -92,12 +92,13 @@ typedef struct audbuffertype
|
||||
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 @@ typedef struct audbuffertype
|
||||
(h)->timecode = le2me_32((h)->timecode); \
|
||||
(h)->packetlength = le2me_32((h)->packetlength); \
|
||||
}
|
||||
#else
|
||||
#define le2me_rtfileheader(h) /**/
|
||||
#define le2me_rtframeheader(h) /**/
|
||||
#endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user