From c5a4d8c725d5eb5f70f35fdb618e1275101aad1e Mon Sep 17 00:00:00 2001 From: Erik Zandvliet Date: Fri, 21 Jan 2011 19:39:09 +0100 Subject: [PATCH] MVHD Box start --- MP4/box_mvhd.cpp | 75 ++++++++++++++++++++++++++++++++++++++++++++++++ MP4/box_mvhd.h | 24 ++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 MP4/box_mvhd.cpp create mode 100644 MP4/box_mvhd.h diff --git a/MP4/box_mvhd.cpp b/MP4/box_mvhd.cpp new file mode 100644 index 00000000..fbb6750f --- /dev/null +++ b/MP4/box_mvhd.cpp @@ -0,0 +1,75 @@ +#include "box_mvhd.h" + +Box_mvhd::Box_mvhd( ) { + Container = new Box( 0x6D766864 ); +} + +Box_mvhd::~Box_mvhd() { + delete Container; +} + +Box * Box_mvhd::GetBox() { + return Container; +} + +void Box_mvhd::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_mvhd::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_mvhd::SetTimeScale( uint32_t TimeUnits = 1 ); + +void Box_mvhd::SetDurationTime( uint32_t TimeUnits ) { + Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(TimeUnits),16); +} + +void Box_mvhd::SetRate( uint32_t Rate = 0x00010000 ); +void Box_mvhd::SetVolume( uint16_t Volume = 0x0100 ); + +void Box_mvhd::SetNextTrackID( uint32_t TrackID ) { + Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(TrackID),12); +} + +void Box_mvhd::SetReserved() { + Container->SetPayload((uint32_t)4,Box::uint16_to_uint8(0x40000000),68); + Container->SetPayload((uint32_t)4,Box::uint16_to_uint8(0),64); + Container->SetPayload((uint32_t)4,Box::uint16_to_uint8(0),60); + Container->SetPayload((uint32_t)4,Box::uint16_to_uint8(0),56); + Container->SetPayload((uint32_t)4,Box::uint16_to_uint8(0x10000),52); + Container->SetPayload((uint32_t)4,Box::uint16_to_uint8(0),48); + Container->SetPayload((uint32_t)4,Box::uint16_to_uint8(0),44); + Container->SetPayload((uint32_t)4,Box::uint16_to_uint8(0),40); + Container->SetPayload((uint32_t)4,Box::uint16_to_uint8(0x10000),36); + Container->SetPayload((uint32_t)4,Box::uint16_to_uint8(0),34); + Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(0),28); + Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(0),24); + Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(0),20); + Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(0),12); +} + +void Box_mvhd::SetDefaults() { + SetHeight(); + SetWidth(); + SetCreationTime(); + SetModificationTime(); + SetDurationTime(); + SetFlags(); + SetVersion(); + SetTrackID(); +} + diff --git a/MP4/box_mvhd.h b/MP4/box_mvhd.h new file mode 100644 index 00000000..28caa169 --- /dev/null +++ b/MP4/box_mvhd.h @@ -0,0 +1,24 @@ +#include "box.h" +#include + +#define SECONDS_DIFFERENCE 2082844800 + +class Box_mvhd { + public: + Box_mvhd( ); + ~Box_mvhd(); + Box * GetBox(); + void SetCreationTime( uint32_t TimeStamp = 0 ); + void SetModificationTime( uint32_t TimeStamp = 0 ); + void SetTimeScale( uint32_t TimeUnits = 1 ); + void SetDurationTime( uint32_t TimeUnits = 0 ); + void SetRate( uint32_t Rate = 0x00010000 ); + void SetVolume( uint16_t Volume = 0x0100 ); + void SetNextTrackID( uint32_t TrackID = 0 ); + private: + void SetReserved(); + void SetDefaults(); + Box * Container; + +};//Box_ftyp Class +