#include "box.cpp" #include struct trun_sampleinformationstructure { uint32_t SampleDuration; uint32_t SampleSize; }; class Box_trun { public: Box_trun( ); ~Box_trun(); Box * GetBox(); void SetDataOffset( uint32_t Offset = 0 ); void AddSampleInformation( uint32_t SampleDuration = 0, uint32_t SampleSize = 0, uint32_t Offset = 0 ); void WriteContent( ); private: void SetDefaults( ); bool setSampleDuration; bool setSampleSize; uint32_t curDataOffset; std::vector SampleInfo; Box * Container; };//Box_ftyp Class Box_trun::Box_trun( ) { Container = new Box( 0x74666864 ); SetDefaults( ); } Box_trun::~Box_trun() { delete Container; } Box * Box_trun::GetBox() { return Container; } void Box_trun::SetDataOffset( uint32_t Offset ) { curDataOffset = Offset; } void Box_trun::WriteContent( ) { uint32_t curoffset; uint32_t flags = 0 & ( curDataOffset ? 0x1 : 0 ) & ( setSampleDuration ? 0x100 : 0 ) & ( setSampleSize ? 0x200 : 0 ); Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(flags)); Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(SampleInfo.size()),4); curoffset = 8; if( curDataOffset ) { Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(curDataOffset),curoffset); curoffset += 4; } for( uint32_t i = 0; i < SampleInfo.size(); i++ ) { if( setSampleDuration ) { Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(SampleInfo[i].SampleDuration),curoffset); curoffset += 4; } if( setSampleSize ) { Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(SampleInfo[i].SampleSize),curoffset); curoffset += 4; } } } void Box_trun::SetDefaults( ) { setSampleDuration = false; setSampleSize = false; }