Edited SetDuration en SetTimescale zodat we ze apart per track kunnen setten

This commit is contained in:
Erik Zandvliet 2011-01-24 11:17:58 +01:00
parent 0d974a7df8
commit f986339488
2 changed files with 48 additions and 21 deletions

View file

@ -194,22 +194,46 @@ void Interface::SetHeight( uint16_t NewHeight ) {
} }
} }
void Interface::SetDurationTime( uint32_t NewDuration ) { void Interface::SetDurationTime( uint32_t NewDuration, uint32_t Track ) {
if( Duration != NewDuration ) { if( Duration.size() < Track ) { Duration.resize(Track+1); }
Duration = NewDuration; if( Duration[Track] != NewDuration ) {
mvhd->SetDurationTime( Duration ); Duration[Track] = NewDuration;
mdhd_vide->SetDurationTime( Duration ); switch( Track ) {
tkhd_vide->SetDurationTime( Duration ); case 0:
mdhd_soun->SetDurationTime( Duration ); mvhd->SetDurationTime( Duration[Track] );
tkhd_soun->SetDurationTime( Duration ); 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 ) { void Interface::SetTimeScale( uint32_t NewUnitsPerSecond, uint32_t Track ) {
if( UnitsPerSecond != NewUnitsPerSecond ) { if( UnitsPerSecond.size() < Track ) { UnitsPerSecond.resize(Track+1); }
UnitsPerSecond = NewUnitsPerSecond; if( UnitsPerSecond[Track] != NewUnitsPerSecond ) {
mvhd->SetTimeScale( UnitsPerSecond ); UnitsPerSecond[Track] = NewUnitsPerSecond;
mdhd_vide->SetTimeScale( UnitsPerSecond ); switch(Track) {
mdhd_soun->SetTimeScale( UnitsPerSecond ); 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;
}
} }
} }

View file

@ -10,19 +10,22 @@ class Interface {
void SetWidth( uint16_t NewWidth ); void SetWidth( uint16_t NewWidth );
void SetHeight( uint16_t NewHeight ); void SetHeight( uint16_t NewHeight );
void SetDurationTime( uint32_t NewDuration ); void SetDurationTime( uint32_t NewDuration, uint32_t Track );
void SetTimeScale( uint32_t NewUnitsPerSecond ); void SetTimeScale( uint32_t NewUnitsPerSecond, uint32_t Track );
void AddSTTSEntry( uint32_t SampleCount, uint32_t SampleDelta ); void AddSTTSEntry( uint32_t SampleCount, uint32_t SampleDelta, uint32_t Track );
void EmptySTTS( ); void EmptySTTS( uint32_t Track );
void AddSTSCEntry( uint32_t FirstChunk, uint32_t SamplesPerChunk, uint32_t Track );
void EmptySTSC( uint32_t Track );
private: private:
void SetStaticDefaults(); void SetStaticDefaults();
void UpdateContents(); void UpdateContents();
void WriteSTTS( ); void WriteSTTS( uint32_t Track );
void WriteSTSC( uint32_t Track );
bool AllBoxesExist(); bool AllBoxesExist();
uint16_t Width; uint16_t Width;
uint16_t Height; uint16_t Height;
uint32_t Duration; std::vector<uint32_t> Duration;
uint32_t UnitsPerSecond; std::vector<uint32_t> UnitsPerSecond;
std::vector<stts_record> stts; std::vector<stts_record> stts;
Box_ftyp * ftyp; Box_ftyp * ftyp;
Box_moov * moov; Box_moov * moov;