From 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d Mon Sep 17 00:00:00 2001 From: Jef Date: Tue, 24 Sep 2024 14:54:57 +0200 Subject: Initial community commit --- Src/Plugins/Input/in_flv/FLVUtil.h | 90 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 Src/Plugins/Input/in_flv/FLVUtil.h (limited to 'Src/Plugins/Input/in_flv/FLVUtil.h') 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 +#include +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 -- cgit