projects
/
goodguy
/
cinelerra.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
version update
[goodguy/cinelerra.git]
/
cinelerra-5.1
/
cinelerra
/
track.C
diff --git
a/cinelerra-5.1/cinelerra/track.C
b/cinelerra-5.1/cinelerra/track.C
index 3c092b73f7188ec8ea2080cdceb15a7e88f7de6f..d5363317c5877b8e7badd91fe36537e5d62be09f 100644
(file)
--- a/
cinelerra-5.1/cinelerra/track.C
+++ b/
cinelerra-5.1/cinelerra/track.C
@@
-33,6
+33,7
@@
#include "keyframe.h"
#include "labels.h"
#include "localsession.h"
#include "keyframe.h"
#include "labels.h"
#include "localsession.h"
+#include "maskauto.h"
#include "module.h"
#include "patch.h"
#include "patchbay.h"
#include "module.h"
#include "patch.h"
#include "patchbay.h"
@@
-67,6
+68,7
@@
Track::Track(EDL *edl, Tracks *tracks) : ListItem<Track>()
track_h = edl->session->output_h;
id = EDL::next_id();
mixer_id = -1;
track_h = edl->session->output_h;
id = EDL::next_id();
mixer_id = -1;
+ masks = (1<<SUBMASKS)-1;
}
Track::~Track()
}
Track::~Track()
@@
-92,6
+94,7
@@
int Track::copy_settings(Track *track)
this->play = track->play;
this->track_w = track->track_w;
this->track_h = track->track_h;
this->play = track->play;
this->track_w = track->track_w;
this->track_h = track->track_h;
+ this->masks = track->masks;
strcpy(this->title, track->title);
return 0;
}
strcpy(this->title, track->title);
return 0;
}
@@
-194,12
+197,9
@@
void Track::copy_from(Track *track)
{
copy_settings(track);
edits->copy_from(track->edits);
{
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();
this->plugin_set.remove_all_objects();
- for(int i = 0; i < track->plugin_set.total; i++)
- {
+ for( int i=0; i<track->plugin_set.total; ++i ) {
PluginSet *new_plugin_set = plugin_set.append(new PluginSet(edl, this));
new_plugin_set->copy_from(track->plugin_set.values[i]);
}
PluginSet *new_plugin_set = plugin_set.append(new PluginSet(edl, this));
new_plugin_set->copy_from(track->plugin_set.values[i]);
}
@@
-337,6
+337,7
@@
int Track::load(FileXML *file, int track_offset, uint32_t load_flags)
expand_view = file->tag.get_property("EXPAND", expand_view);
track_w = file->tag.get_property("TRACK_W", track_w);
track_h = file->tag.get_property("TRACK_H", track_h);
expand_view = file->tag.get_property("EXPAND", expand_view);
track_w = file->tag.get_property("TRACK_W", track_w);
track_h = file->tag.get_property("TRACK_H", track_h);
+ masks = file->tag.get_property("MASKS", masks);
load_header(file, load_flags);
load_header(file, load_flags);
@@
-853,46
+854,22
@@
void Track::synchronize_params(Track *track)
}
}
-
-
-
int Track::dump(FILE *fp)
{
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, masks 0x%04x\n",
+ data_type, draw, gang, play, record, nudge, masks);
fprintf(fp," Title %s\n", title);
fprintf(fp," Edits:\n");
for(Edit* current = edits->first; current; current = NEXT)
fprintf(fp," Title %s\n", title);
fprintf(fp," Edits:\n");
for(Edit* current = edits->first; current; current = NEXT)
- {
current->dump(fp);
current->dump(fp);
- }
automation->dump(fp);
fprintf(fp," Plugin Sets: %d\n", plugin_set.total);
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; i<plugin_set.total; ++i )
+ plugin_set[i]->dump(fp);
return 0;
}
return 0;
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Track::Track() : ListItem<Track>()
{
Track::Track() : ListItem<Track>()
{
@@
-1062,10
+1039,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.
{
// Use a copy of the selection in converted units
// So copy_automation doesn't reconvert.
@@
-1085,6
+1060,7
@@
int Track::copy(double start,
file->tag.set_property("EXPAND", expand_view);
file->tag.set_property("TRACK_W", track_w);
file->tag.set_property("TRACK_H", track_h);
file->tag.set_property("EXPAND", expand_view);
file->tag.set_property("TRACK_W", track_w);
file->tag.set_property("TRACK_H", track_h);
+ file->tag.set_property("MASKS", masks);
save_header(file);
file->append_tag();
file->append_newline();
save_header(file);
file->append_tag();
file->append_newline();
@@
-1105,16
+1081,18
@@
int Track::copy(double start,
// file->append_tag();
// file->append_newline();
// 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; i<plugin_set.total; ++i )
+
plugin_set.values[i]->copy(start_unit, end_unit, file);
}
copy_derived(start_unit, end_unit, file);
}
copy_derived(start_unit, end_unit, file);
@@
-1164,7
+1142,7
@@
int Track::blade(double position)
{
int64_t start = to_units(position, 0);
Edit *edit = edits->split_edit(start);
{
int64_t start = to_units(position, 0);
Edit *edit = edits->split_edit(start);
- if( !edit ) return 1;
+ if( !edit
|| edit->silence()
) return 1;
edit->hard_left = 1;
if( edit->previous ) edit->previous->hard_right = 1;
return 0;
edit->hard_left = 1;
if( edit->previous ) edit->previous->hard_right = 1;
return 0;
@@
-1186,9
+1164,10
@@
int Track::clear(int64_t start, int64_t end,
if( edit_autos )
automation->clear(start, end, 0, 1);
if( edit_plugins ) {
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])
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_
auto
s);
+ plugin_set.values[i]->clear(start, end, edit_
keyframe
s);
}
}
if( edit_edits )
}
}
if( edit_edits )