+ old_edit = old_edit->next;
+ new_edit = new_edit->next;
+ }
+ if( first_track && old_track->is_armed() ) {
+ if( labels_follow_edits ) {
+ Labels *old_labels = old_edl->labels;
+ Labels *new_labels = new_edl->labels;
+ Label *old_label = old_labels ? old_labels->first : 0;
+ Label *new_label = new_labels ? new_labels->first : 0;
+ while( old_label && new_label ) {
+ int64_t label_pos = old_track->to_units(old_label->position, 1);
+ if( old_speed || new_speed ) {
+ double orig_pos = old_speeds->automation_integral(0, label_pos, PLAY_FORWARD);
+ label_pos = new_track->frame_align(new_speeds->speed_position(orig_pos), 1);
+ result = 1;
+ }
+ new_label->position = new_track->from_units(label_pos);
+ old_label = old_label->next;
+ new_label = new_label->next;
+ }
+ }
+ first_track = 0;
+ }
+ if( autos_follow_edits ) {
+ for( int i=0; i<AUTOMATION_TOTAL; ++i ) {
+ Autos *old_autos = old_track->automation->autos[i];
+ Autos *new_autos = new_track->automation->autos[i];
+ Auto *old_auto = old_autos ? old_autos->first : 0;
+ Auto *new_auto = new_autos ? new_autos->first : 0;
+ while( old_auto && new_auto ) {
+ int64_t auto_pos = old_auto->position;
+ if( old_speed || new_speed ) {
+ double orig_pos = old_speeds->automation_integral(0, auto_pos, PLAY_FORWARD);
+ auto_pos = new_track->frame_align(new_speeds->speed_position(orig_pos), 1);
+ result = 1;
+ }
+ new_auto->position = auto_pos;
+ old_auto = old_auto->next;
+ new_auto = new_auto->next;
+ }
+ }
+ }
+ if( !plugins_follow_edits ) continue;
+ int old_size = old_track->plugin_set.size();
+ int new_size = new_track->plugin_set.size();
+ int n = bmin(old_size, new_size);
+ for( int i=0; i<n; ++i ) {
+ PluginSet *old_plugin_set = old_track->plugin_set[i];
+ Plugin *old_plugin = (Plugin *)(old_plugin_set ? old_plugin_set->first : 0);
+ PluginSet *new_plugin_set = new_track->plugin_set[i];
+ Plugin *new_plugin = (Plugin *)(new_plugin_set ? new_plugin_set->first : 0);
+ while( old_plugin && new_plugin ) {
+ int64_t plugin_start = old_plugin->startproject;
+ int64_t plugin_end = plugin_start + old_plugin->length;
+ if( old_speed || new_speed ) {
+ double orig_start = old_speeds->automation_integral(0, plugin_start, PLAY_FORWARD);
+ double orig_end = old_speeds->automation_integral(0, plugin_end, PLAY_FORWARD);
+ plugin_start = new_track->frame_align(new_speeds->speed_position(orig_start), 1);
+ plugin_end = new_track->frame_align(new_speeds->speed_position(orig_end), 1);
+ result = 1;
+ }
+ new_plugin->startproject = plugin_start;
+ new_plugin->length = plugin_end - plugin_start;
+ if( autos_follow_edits ) {
+ KeyFrames *old_keyframes = old_plugin->keyframes;
+ Auto *old_auto = old_keyframes ? old_keyframes->first : 0;
+ KeyFrames *new_keyframes = new_plugin->keyframes;
+ Auto *new_auto = new_keyframes ? new_keyframes->first : 0;
+ while( old_auto && new_auto ) {
+ int64_t auto_pos = old_auto->position;
+ if( old_speed || new_speed ) {
+ double orig_pos = old_speeds->automation_integral(0, auto_pos, PLAY_FORWARD);
+ auto_pos = new_track->frame_align(new_speeds->speed_position(orig_pos), 1);
+ result = 1;
+ }
+ new_auto->position = auto_pos;
+ old_auto = old_auto->next;
+ new_auto = new_auto->next;
+ }
+ }
+ old_plugin = (Plugin *)old_plugin->next;
+ new_plugin = (Plugin *)new_plugin->next;
+ }