aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Input/in_flv/FLVUtil.h
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Plugins/Input/in_flv/FLVUtil.h
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Plugins/Input/in_flv/FLVUtil.h')
-rw-r--r--Src/Plugins/Input/in_flv/FLVUtil.h90
1 files changed, 90 insertions, 0 deletions
diff --git a/Src/Plugins/Input/in_flv/FLVUtil.h b/Src/Plugins/Input/in_flv/FLVUtil.h
new file mode 100644
index 00000000..9b9da776
--- /dev/null
+++ b/Src/Plugins/Input/in_flv/FLVUtil.h
@@ -0,0 +1,90 @@
+#ifndef NULLSOFT_FLVUTIL_H
+#define NULLSOFT_FLVUTIL_H
+
+#include <memory.h>
+#include <bfc/platform/types.h>
+namespace FLV
+{
+ // reads 32 bits from data and converts from big endian
+inline uint32_t Read32(uint8_t *data)
+{
+ uint32_t returnVal;
+#ifdef __BIG_ENDIAN__
+ returnVal = *(uint32_t *)(&data[0]);
+#else
+ // need to swap endianness
+ uint8_t *swap = (uint8_t *)&returnVal;
+ swap[0]=data[3];
+ swap[1]=data[2];
+ swap[2]=data[1];
+ swap[3]=data[0];
+#endif
+ return returnVal;
+
+}
+// reads 24 bits from data, converts from big endian, and returns as a 32bit int
+inline uint32_t Read24(uint8_t *data)
+{
+ uint32_t returnVal=0;
+ uint8_t *swap = (uint8_t *)&returnVal;
+#ifdef __BIG_ENDIAN__
+ swap[1]=data[0];
+ swap[2]=data[1];
+ swap[3]=data[2];
+ returnVal = *(uint32_t *)(&data[0]);
+#else
+ // need to swap endianness
+ swap[0]=data[2];
+ swap[1]=data[1];
+ swap[2]=data[0];
+#endif
+ return returnVal;
+
+}
+
+// reads 16 bits from data and converts from big endian
+inline uint16_t Read16(uint8_t *data)
+{
+ uint16_t returnVal;
+#ifdef __BIG_ENDIAN__
+ returnVal = *(uint16_t *)(&data[0]);
+#else
+ // need to swap endianness
+ uint8_t *swap = (uint8_t *)&returnVal;
+ swap[0]=data[1];
+ swap[1]=data[0];
+#endif
+ return returnVal;
+}
+
+// reads 16 bits from data and converts from big endian
+inline uint8_t Read8(uint8_t *data)
+{
+ uint8_t returnVal;
+
+ returnVal = *(uint8_t *)(&data[0]);
+ return returnVal;
+}
+
+// reads a double from data
+inline double ReadDouble(uint8_t *data)
+{
+ double returnVal;
+#ifdef __BIG_ENDIAN__
+ memcpy(&returnVal, data, 8);
+ #else
+ uint8_t *swap = (uint8_t *)&returnVal;
+ swap[0]=data[7];
+ swap[1]=data[6];
+ swap[2]=data[5];
+ swap[3]=data[4];
+ swap[4]=data[3];
+ swap[5]=data[2];
+ swap[6]=data[1];
+ swap[7]=data[0];
+ #endif
+ return returnVal;
+}
+
+}
+#endif \ No newline at end of file