#include "box.cpp" #include #define SECONDS_DIFFERENCE 2082844800 class Box_mdhd { public: Box_mdhd( ); ~Box_mdhd(); Box * GetBox(); void SetCreationTime( uint32_t TimeStamp = 0 ); void SetModificationTime( uint32_t TimeStamp = 0 ); void SetTimeScale( uint32_t TimeUnits = 0 ); void SetDurationTime( uint32_t TimeUnits = 0 ); void SetLanguage( uint8_t Firstchar = 'n', uint8_t Secondchar = 'l', uint8_t Thirdchar = 'd' ); private: void SetReserved(); void SetDefaults(); Box * Container; };//Box_ftyp Class Box_mdhd::Box_mdhd( ) { Container = new Box( 0x6D646864 ); } Box_mdhd::~Box_mdhd() { delete Container; } Box * Box_mdhd::GetBox() { return Container; } void Box_mdhd::SetCreationTime( uint32_t TimeStamp ) { uint32_t CreationTime; if(!TimeStamp) { CreationTime = time(NULL) + SECONDS_DIFFERENCE; } else { CreationTime = TimeStamp; } Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(CreationTime),4); } void Box_mdhd::SetModificationTime( uint32_t TimeStamp ) { uint32_t ModificationTime; if(!TimeStamp) { ModificationTime = time(NULL) + SECONDS_DIFFERENCE; } else { ModificationTime = TimeStamp; } Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(ModificationTime),8); } void Box_mdhd::SetTimeScale( uint32_t TimeUnits ) { Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(TimeUnits),12); } void Box_mdhd::SetDurationTime( uint32_t TimeUnits ) { Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(TimeUnits),16); } void Box_mdhd::SetLanguage( uint8_t Firstchar, uint8_t Secondchar, uint8_t Thirdchar ) { uint8_t FirstByte = 0; uint8_t SecondByte = 0; Firstchar -= 0x60; Secondchar -= 0x60; Thirdchar -= 0x60; FirstByte += (Firstchar << 2); FirstByte += (Secondchar >> 3); SecondByte += (Secondchar << 5); SecondByte += Thirdchar; Container->SetPayload((uint32_t)1,&SecondByte,21); Container->SetPayload((uint32_t)1,&FirstByte,20); } void Box_mdhd::SetReserved() { Container->SetPayload((uint32_t)2,Box::uint16_to_uint8(0),22); Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(0)); } void Box_mdhd::SetDefaults() { SetLanguage(); SetDurationTime(); SetTimeScale(); SetModificationTime(); SetCreationTime(); }