X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;ds=inline;f=cinelerra-5.1%2Fcinelerra%2Ftrack.C;h=1cf0f69dbcd6a51c14251977759d64ca3445a189;hb=a6fa7638ac79011ab3188e1f4120680c641cca52;hp=264bd95f829da34765232284043c585bd2e55f9b;hpb=9a75aafbc51be29b49351a51e9084bb34d255c0d;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/track.C b/cinelerra-5.1/cinelerra/track.C index 264bd95f..1cf0f69d 100644 --- a/cinelerra-5.1/cinelerra/track.C +++ b/cinelerra-5.1/cinelerra/track.C @@ -271,6 +271,13 @@ int Track::has_speed() return 0; } +int64_t Track::speed_length(int64_t start, int64_t end) +{ + if( !has_speed() ) return end - start; + FloatAutos *speeds = (FloatAutos *) automation->autos[AUTOMATION_SPEED]; + return speeds->automation_integral(start, end-start, PLAY_FORWARD); +} + int Track::show_assets() { return expand_view || edl->session->show_assets ? 1 : 0; @@ -1055,6 +1062,8 @@ int Track::clear(int64_t start, int64_t end, int edit_edits, int edit_labels, int edit_plugins, int edit_autos, Edits *trim_edits) { + if( edit_edits ) + edits->clear(start, end); //printf("Track::clear 1 %d %d %d\n", edit_edits, edit_labels, edit_plugins); if( edit_autos ) automation->clear(start, end, 0, 1); @@ -1065,8 +1074,6 @@ int Track::clear(int64_t start, int64_t end, plugin_set.values[i]->clear(start, end, edit_keyframes); } } - if( edit_edits ) - edits->clear(start, end); return 0; } @@ -1793,10 +1800,25 @@ void Track::set_camera(float x, float y, float z) Track *Track::gang_master() { - if( edl->session->gang_tracks == GANG_NONE ) return this; Track *track = this; - while( track && !track->master ) track = track->previous; - return !track ? tracks->first : track; + switch( edl->session->gang_tracks ) { + case GANG_NONE: + return track; + case GANG_CHANNELS: { + Track *current = track; + int data_type = track->data_type; + while( current && !track->master ) { + if( !(current = current->previous) ) break; + if( current->data_type == data_type ) track = current; + if( track->master ) break; + } + break; } + case GANG_MEDIA: { + while( track && !track->master ) track = track->previous; + break; } + } + if( !track ) track = tracks->first; + return track; } int Track::is_hidden() @@ -1815,6 +1837,7 @@ int Track::is_armed() { return gang_master()->armed; } + int Track::is_ganged() { return gang_master()->ganged;