diff --git a/MP4/box_mdhd.cpp b/MP4/box_mdhd.cpp index e3cf8ab1..a0e75979 100644 --- a/MP4/box_mdhd.cpp +++ b/MP4/box_mdhd.cpp @@ -12,6 +12,34 @@ 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; @@ -22,4 +50,20 @@ void Box_mdhd::SetLanguage( uint8_t Firstchar, uint8_t Secondchar, uint8_t Third 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(); } diff --git a/MP4/box_mdhd.h b/MP4/box_mdhd.h index 9ba99d10..b71b9cf5 100644 --- a/MP4/box_mdhd.h +++ b/MP4/box_mdhd.h @@ -1,14 +1,17 @@ #include "box.h" +#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 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();