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 ) {
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;
}
}
}

View file

@ -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<uint32_t> Duration;
std::vector<uint32_t> UnitsPerSecond;
std::vector<stts_record> stts;
Box_ftyp * ftyp;
Box_moov * moov;