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;
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);
plugin_set.values[i]->clear(start, end, edit_keyframes);
}
}
- if( edit_edits )
- edits->clear(start, end);
return 0;
}
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()
{
return gang_master()->armed;
}
+
int Track::is_ganged()
{
return gang_master()->ganged;