summaryrefslogtreecommitdiff
path: root/src/libffmpeg/libavutil/intreadwrite.h
diff options
context:
space:
mode:
authorDiego 'Flameeyes' Pettenò <flameeyes@gmail.com>2007-04-03 00:38:22 +0200
committerDiego 'Flameeyes' Pettenò <flameeyes@gmail.com>2007-04-03 00:38:22 +0200
commit0ed2cd4f34189ec303dfac5a30de0abae0decba8 (patch)
tree7a8d08d25ca7c81daa9d6cd65fd4f633fd676b41 /src/libffmpeg/libavutil/intreadwrite.h
parent6081bc9a06ee97333769f77a9e5c18a15afb29da (diff)
parent3dd7d925c2feb7868a49e7a1a0b953a5aab233f0 (diff)
downloadxine-lib-0ed2cd4f34189ec303dfac5a30de0abae0decba8.tar.gz
xine-lib-0ed2cd4f34189ec303dfac5a30de0abae0decba8.tar.bz2
Merge changes happened in 1.1 development.
Diffstat (limited to 'src/libffmpeg/libavutil/intreadwrite.h')
-rw-r--r--src/libffmpeg/libavutil/intreadwrite.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/libffmpeg/libavutil/intreadwrite.h b/src/libffmpeg/libavutil/intreadwrite.h
new file mode 100644
index 000000000..e6db5ce6f
--- /dev/null
+++ b/src/libffmpeg/libavutil/intreadwrite.h
@@ -0,0 +1,65 @@
+#ifndef INTREADWRITE_H
+#define INTREADWRITE_H
+
+#ifdef __GNUC__
+
+struct unaligned_64 { uint64_t l; } __attribute__((packed));
+struct unaligned_32 { uint32_t l; } __attribute__((packed));
+struct unaligned_16 { uint16_t l; } __attribute__((packed));
+
+#define LD16(a) (((const struct unaligned_16 *) (a))->l)
+#define LD32(a) (((const struct unaligned_32 *) (a))->l)
+#define LD64(a) (((const struct unaligned_64 *) (a))->l)
+
+#define ST16(a, b) (((struct unaligned_16 *) (a))->l) = (b)
+#define ST32(a, b) (((struct unaligned_32 *) (a))->l) = (b)
+
+#else /* __GNUC__ */
+
+#define LD16(a) (*((uint16_t*)(a)))
+#define LD32(a) (*((uint32_t*)(a)))
+#define LD64(a) (*((uint64_t*)(a)))
+
+#define ST16(a, b) *((uint16_t*)(a)) = (b)
+#define ST32(a, b) *((uint32_t*)(a)) = (b)
+
+#endif /* !__GNUC__ */
+
+/* endian macros */
+#define AV_RB8(x) (((uint8_t*)(x))[0])
+#define AV_WB8(p, i, d) { ((uint8_t*)(p))[(i)] = (d); }
+
+#define AV_RB16(x) ((((uint8_t*)(x))[0] << 8) | ((uint8_t*)(x))[1])
+#define AV_WB16(p, i, d) { \
+ ((uint8_t*)(p))[(i)+1] = (d); \
+ ((uint8_t*)(p))[(i)] = (d)>>8; }
+
+#define AV_RB32(x) ((((uint8_t*)(x))[0] << 24) | \
+ (((uint8_t*)(x))[1] << 16) | \
+ (((uint8_t*)(x))[2] << 8) | \
+ ((uint8_t*)(x))[3])
+#define AV_WB32(p, i, d) { \
+ ((uint8_t*)(p))[(i)+3] = (d); \
+ ((uint8_t*)(p))[(i)+2] = (d)>>8; \
+ ((uint8_t*)(p))[(i)+1] = (d)>>16; \
+ ((uint8_t*)(p))[(i)] = (d)>>24; }
+
+#define AV_RL8(x) AV_RB8(x)
+#define AV_WL8(p, i, d) AV_WB8(p, i, d)
+
+#define AV_RL16(x) ((((uint8_t*)(x))[1] << 8) | ((uint8_t*)(x))[0])
+#define AV_WL16(p, i, d) { \
+ ((uint8_t*)(p))[(i)] = (d); \
+ ((uint8_t*)(p))[(i)+1] = (d)>>8; }
+
+#define AV_RL32(x) ((((uint8_t*)(x))[3] << 24) | \
+ (((uint8_t*)(x))[2] << 16) | \
+ (((uint8_t*)(x))[1] << 8) | \
+ ((uint8_t*)(x))[0])
+#define AV_WL32(p, i, d) { \
+ ((uint8_t*)(p))[(i)] = (d); \
+ ((uint8_t*)(p))[(i)+1] = (d)>>8; \
+ ((uint8_t*)(p))[(i)+2] = (d)>>16; \
+ ((uint8_t*)(p))[(i)+3] = (d)>>24; }
+
+#endif /* INTREADWRITE_H */