X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Ftrack.C;fp=cinelerra-5.1%2Fcinelerra%2Ftrack.C;h=9e86481c8df919e4d01f441b2a60ce8ff292368f;hp=264bd95f829da34765232284043c585bd2e55f9b;hb=f5725c7e12def18fec49a295dad688652edaa4b3;hpb=c387b8938dc838e5b92d1cd735975d0928ecf61a diff --git a/cinelerra-5.1/cinelerra/track.C b/cinelerra-5.1/cinelerra/track.C index 264bd95f..9e86481c 100644 --- a/cinelerra-5.1/cinelerra/track.C +++ b/cinelerra-5.1/cinelerra/track.C @@ -1793,10 +1793,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 +1830,7 @@ int Track::is_armed() { return gang_master()->armed; } + int Track::is_ganged() { return gang_master()->ganged;