#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( 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;///