From f9863394880f258bf37629c17b5bae6a0db8395d Mon Sep 17 00:00:00 2001 From: Erik Zandvliet Date: Mon, 24 Jan 2011 11:17:58 +0100 Subject: [PATCH] Edited SetDuration en SetTimescale zodat we ze apart per track kunnen setten --- MP4/interface.cpp | 52 ++++++++++++++++++++++++++++++++++------------- MP4/interface.h | 17 +++++++++------- 2 files changed, 48 insertions(+), 21 deletions(-) diff --git a/MP4/interface.cpp b/MP4/interface.cpp index 7fd024cc..f5510708 100644 --- a/MP4/interface.cpp +++ b/MP4/interface.cpp @@ -194,22 +194,46 @@ void Interface::SetHeight( uint16_t NewHeight ) { } } -void Interface::SetDurationTime( uint32_t NewDuration ) { - if( Duration != NewDuration ) { - Duration = NewDuration; - mvhd->SetDurationTime( Duration ); - mdhd_vide->SetDurationTime( Duration ); - tkhd_vide->SetDurationTime( Duration ); - mdhd_soun->SetDurationTime( Duration ); - tkhd_soun->SetDurationTime( Duration ); +void Interface::SetDurationTime( uint32_t NewDuration, uint32_t Track ) { + if( Duration.size() < Track ) { Duration.resize(Track+1); } + if( Duration[Track] != NewDuration ) { + Duration[Track] = NewDuration; + switch( Track ) { + case 0: + mvhd->SetDurationTime( Duration[Track] ); + break; + case 1: + mdhd_vide->SetDurationTime( Duration[Track] ); + tkhd_vide->SetDurationTime( Duration[Track] ); + break; + case 2: + mdhd_soun->SetDurationTime( Duration[Track] ); + tkhd_soun->SetDurationTime( Duration[Track] ); + break; + default: + fprintf( stderr, "WARNING, Setting Duration for track %d does have any effect\n", Track ); + break; + } } } -void Interface::SetTimeScale( uint32_t NewUnitsPerSecond ) { - if( UnitsPerSecond != NewUnitsPerSecond ) { - UnitsPerSecond = NewUnitsPerSecond; - mvhd->SetTimeScale( UnitsPerSecond ); - mdhd_vide->SetTimeScale( UnitsPerSecond ); - mdhd_soun->SetTimeScale( UnitsPerSecond ); +void Interface::SetTimeScale( uint32_t NewUnitsPerSecond, uint32_t Track ) { + if( UnitsPerSecond.size() < Track ) { UnitsPerSecond.resize(Track+1); } + if( UnitsPerSecond[Track] != NewUnitsPerSecond ) { + UnitsPerSecond[Track] = NewUnitsPerSecond; + switch(Track) { + case 0: + mvhd->SetTimeScale( UnitsPerSecond[Track] ); + break; + case 1: + mdhd_vide->SetTimeScale( UnitsPerSecond[Track] ); + break; + case 2: + mdhd_soun->SetTimeScale( UnitsPerSecond[Track] ); + break; + default: + fprintf( stderr, "WARNING, Setting Timescale for track %d does have any effect\n", Track ); + break; + } } } diff --git a/MP4/interface.h b/MP4/interface.h index 5d339fba..39c5ffcd 100644 --- a/MP4/interface.h +++ b/MP4/interface.h @@ -10,19 +10,22 @@ class Interface { void SetWidth( uint16_t NewWidth ); void SetHeight( uint16_t NewHeight ); - void SetDurationTime( uint32_t NewDuration ); - void SetTimeScale( uint32_t NewUnitsPerSecond ); - void AddSTTSEntry( uint32_t SampleCount, uint32_t SampleDelta ); - void EmptySTTS( ); + void SetDurationTime( uint32_t NewDuration, uint32_t Track ); + void SetTimeScale( uint32_t NewUnitsPerSecond, uint32_t Track ); + void AddSTTSEntry( uint32_t SampleCount, uint32_t SampleDelta, uint32_t Track ); + void EmptySTTS( uint32_t Track ); + void AddSTSCEntry( uint32_t FirstChunk, uint32_t SamplesPerChunk, uint32_t Track ); + void EmptySTSC( uint32_t Track ); private: void SetStaticDefaults(); void UpdateContents(); - void WriteSTTS( ); + void WriteSTTS( uint32_t Track ); + void WriteSTSC( uint32_t Track ); bool AllBoxesExist(); uint16_t Width; uint16_t Height; - uint32_t Duration; - uint32_t UnitsPerSecond; + std::vector Duration; + std::vector UnitsPerSecond; std::vector stts; Box_ftyp * ftyp; Box_moov * moov;