X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Ftrack.C;h=ee16058bd1db7054d97c5a3f9eb9979288402c77;hp=482cbb1e024f7f9556624083c021380ee67be557;hb=59e74f262d7b6be235f2bbfaac35ef4274f52dc9;hpb=ab209efd7893132268c7dc159cd78a4574276946 diff --git a/cinelerra-5.1/cinelerra/track.C b/cinelerra-5.1/cinelerra/track.C index 482cbb1e..ee16058b 100644 --- a/cinelerra-5.1/cinelerra/track.C +++ b/cinelerra-5.1/cinelerra/track.C @@ -80,9 +80,10 @@ void Track::create_objects() { } - -int Track::copy_settings(Track *track) +int Track::copy_settings(Track *track, int do_title) { + if( do_title ) + strcpy(this->title, track->title); this->expand_view = track->expand_view; this->draw = track->draw; this->gang = track->gang; @@ -92,7 +93,6 @@ int Track::copy_settings(Track *track) this->play = track->play; this->track_w = track->track_w; this->track_h = track->track_h; - strcpy(this->title, track->title); return 0; } @@ -194,12 +194,9 @@ void Track::copy_from(Track *track) { copy_settings(track); edits->copy_from(track->edits); - for(int i = 0; i < this->plugin_set.total; i++) - delete this->plugin_set.values[i]; this->plugin_set.remove_all_objects(); - for(int i = 0; i < track->plugin_set.total; i++) - { + for( int i=0; iplugin_set.total; ++i ) { PluginSet *new_plugin_set = plugin_set.append(new PluginSet(edl, this)); new_plugin_set->copy_from(track->plugin_set.values[i]); } @@ -444,7 +441,8 @@ void Track::insert_track(Track *track, //printf("Track::insert_track %d %s %jd\n", __LINE__, title, min_length); // Decide whether to copy settings based on load_mode - if(replace_default) copy_settings(track); + if( replace_default ) + copy_settings(track, 0); edits->insert_edits(track->edits, to_units(position, 0), @@ -474,23 +472,17 @@ void Track::insert_plugin_set(Track *track, int edit_autos) { // Extend plugins if no incoming plugins - if(!track->plugin_set.total) - { - shift_effects(position, - min_length, - edit_autos); - } - else - for(int i = 0; i < track->plugin_set.total; i++) - { - if(i >= plugin_set.total) - plugin_set.append(new PluginSet(edl, this)); + if( track->plugin_set.total ) { + for(int i = 0; i < track->plugin_set.total; i++) { + if(i >= plugin_set.total) + plugin_set.append(new PluginSet(edl, this)); - plugin_set.values[i]->insert_edits(track->plugin_set.values[i], - position, - min_length, - edit_autos); + plugin_set.values[i]->insert_edits(track->plugin_set.values[i], + position, min_length, edit_autos); + } } + else + shift_effects(position, min_length, edit_autos, 0); } @@ -670,11 +662,11 @@ void Track::shift_keyframes(int64_t position, int64_t length) // Effect keyframes are shifted in shift_effects } -void Track::shift_effects(int64_t position, int64_t length, int edit_autos) +void Track::shift_effects(int64_t position, int64_t length, int edit_autos, Edits *trim_edits) { - for(int i = 0; i < plugin_set.total; i++) - { - plugin_set.values[i]->shift_effects(position, length, edit_autos); + for( int i=0; ishift_effects(position, length, edit_autos); } } @@ -859,46 +851,22 @@ void Track::synchronize_params(Track *track) } - - - int Track::dump(FILE *fp) { - fprintf(fp," Data type %d\n", data_type); + fprintf(fp," Data type %d, draw %d, gang %d, play %d, record %d, nudge %jd\n", + data_type, draw, gang, play, record, nudge); fprintf(fp," Title %s\n", title); fprintf(fp," Edits:\n"); for(Edit* current = edits->first; current; current = NEXT) - { current->dump(fp); - } automation->dump(fp); fprintf(fp," Plugin Sets: %d\n", plugin_set.total); - for(int i = 0; i < plugin_set.total; i++) - plugin_set.values[i]->dump(fp); -//printf("Track::dump 2\n"); + for( int i=0; idump(fp); return 0; } - - - - - - - - - - - - - - - - - - - Track::Track() : ListItem() { @@ -1068,10 +1036,8 @@ void Track::set_automation_mode(double selectionstart, -int Track::copy(double start, - double end, - FileXML *file, - const char *output_path) +int Track::copy(int copy_flags, double start, double end, + FileXML *file, const char *output_path) { // Use a copy of the selection in converted units // So copy_automation doesn't reconvert. @@ -1111,16 +1077,18 @@ int Track::copy(double start, // file->append_tag(); // file->append_newline(); - edits->copy(start_unit, end_unit, file, output_path); - - AutoConf auto_conf; - auto_conf.set_all(1); - automation->copy(start_unit, end_unit, file, 0, 0); + if( (copy_flags & COPY_EDITS) ) + edits->copy(start_unit, end_unit, file, output_path); + if( (copy_flags & COPY_AUTOS) ) { + AutoConf auto_conf; + auto_conf.set_all(1); + automation->copy(start_unit, end_unit, file, 0, 0); + } - for(int i = 0; i < plugin_set.total; i++) - { - plugin_set.values[i]->copy(start_unit, end_unit, file); + if( (copy_flags & COPY_PLUGINS) ) { + for( int i=0; icopy(start_unit, end_unit, file); } copy_derived(start_unit, end_unit, file); @@ -1192,9 +1160,10 @@ int Track::clear(int64_t start, int64_t end, if( edit_autos ) automation->clear(start, end, 0, 1); if( edit_plugins ) { + int edit_keyframes = edit_plugins < 0 ? 1 : edit_autos; for(int i = 0; i < plugin_set.total; i++) { if(!trim_edits || trim_edits == (Edits*)plugin_set.values[i]) - plugin_set.values[i]->clear(start, end, edit_autos); + plugin_set.values[i]->clear(start, end, edit_keyframes); } } if( edit_edits ) @@ -1243,8 +1212,7 @@ int Track::modify_pluginhandles(double oldposition, if(!trim_edits || trim_edits == (Edits*)plugin_set.values[i]) plugin_set.values[i]->modify_handles(oldposition, newposition, // Don't allow plugin tweeks to affect edits. - currentend, handle_mode, 0, - edit_labels, 1, edit_autos, trim_edits, 0); + currentend, handle_mode, 0, 0, 0, 0, 0, 0); } return 0; } @@ -1262,7 +1230,7 @@ int Track::paste_silence(int64_t start, int64_t end, int edit_plugins, int edit_ if( edit_autos ) shift_keyframes(start, end - start); if( edit_plugins ) - shift_effects(start, end - start, edit_autos); + shift_effects(start, end - start, edit_autos, 0); edits->optimize(); return 0; }