#pragma once #include #include #include #include #include #include #include #include "json.h" /// Contains all MP4 format related code. namespace MP4 { class Box{ public: Box(char * datapointer = 0, bool manage = true); ~Box(); std::string getType(); bool isType(const char* boxType); bool read(std::string & newData); long long int boxedSize(); long long int payloadSize(); char * asBox(); char * payload(); void clear(); std::string toPrettyString(int indent = 0); protected: //integer functions void setInt8(char newData, size_t index); char getInt8(size_t index); void setInt16(short newData, size_t index); short getInt16(size_t index); void setInt24(long newData, size_t index); long getInt24(size_t index); void setInt32(long newData, size_t index); long getInt32(size_t index); void setInt64(long long int newData, size_t index); long long int getInt64(size_t index); //string functions void setString(std::string newData, size_t index); void setString(char* newData, size_t size, size_t index); char * getString(size_t index); size_t getStringLen(size_t index); //box functions Box & getBox(size_t index); size_t getBoxLen(size_t index); void setBox(Box & newEntry, size_t index); //data functions bool reserve(size_t position, size_t current, size_t wanted); //internal variables char * data; ///< Holds the data of this box int data_size; ///< Currently reserved size bool managed; ///< If false, will not attempt to resize/free the data pointer. int payloadOffset; ///