projects
/
goodguy
/
history.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
4 bt fixes, xft unrefd font fix, add: find in resources, add: user title, filebox...
[goodguy/history.git]
/
cinelerra-5.1
/
cinelerra
/
track.C
diff --git
a/cinelerra-5.1/cinelerra/track.C
b/cinelerra-5.1/cinelerra/track.C
index 10460c0cff35d959a5bfff45a763faf8d45cacd5..b13e9e9d1acbc1a0859b4bf188df9ffa4b80f33d 100644
(file)
--- a/
cinelerra-5.1/cinelerra/track.C
+++ b/
cinelerra-5.1/cinelerra/track.C
@@
-66,6
+66,7
@@
Track::Track(EDL *edl, Tracks *tracks) : ListItem<Track>()
track_w = edl->session->output_w;
track_h = edl->session->output_h;
id = EDL::next_id();
track_w = edl->session->output_w;
track_h = edl->session->output_h;
id = EDL::next_id();
+ mixer_id = -1;
}
Track::~Track()
}
Track::~Track()
@@
-87,6
+88,7
@@
int Track::copy_settings(Track *track)
this->gang = track->gang;
this->record = track->record;
this->nudge = track->nudge;
this->gang = track->gang;
this->record = track->record;
this->nudge = track->nudge;
+ this->mixer_id = track->mixer_id;
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;
@@
-321,6
+323,7
@@
int Track::load(FileXML *file, int track_offset, uint32_t load_flags)
gang = file->tag.get_property("GANG", gang);
draw = file->tag.get_property("DRAW", draw);
nudge = file->tag.get_property("NUDGE", nudge);
gang = file->tag.get_property("GANG", gang);
draw = file->tag.get_property("DRAW", draw);
nudge = file->tag.get_property("NUDGE", nudge);
+ mixer_id = file->tag.get_property("MIXER_ID", mixer_id);
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);
@@
-352,6
+355,8
@@
int Track::load(FileXML *file, int track_offset, uint32_t load_flags)
{
if(load_flags & LOAD_EDITS)
edits->load(file, track_offset);
{
if(load_flags & LOAD_EDITS)
edits->load(file, track_offset);
+ else
+ result = file->skip_tag();
}
else
if(file->tag.title_is("PLUGINSET"))
}
else
if(file->tag.title_is("PLUGINSET"))
@@
-372,6
+377,8
@@
int Track::load(FileXML *file, int track_offset, uint32_t load_flags)
current_plugin++;
}
}
current_plugin++;
}
}
+ else
+ result = file->skip_tag();
}
else
load_derived(file, load_flags);
}
else
load_derived(file, load_flags);
@@
-1064,6
+1071,7
@@
int Track::copy(double start,
file->tag.set_title("TRACK");
file->tag.set_property("RECORD", record);
file->tag.set_property("NUDGE", nudge);
file->tag.set_title("TRACK");
file->tag.set_property("RECORD", record);
file->tag.set_property("NUDGE", nudge);
+ file->tag.set_property("MIXER_ID", mixer_id);
file->tag.set_property("PLAY", play);
file->tag.set_property("GANG", gang);
file->tag.set_property("DRAW", draw);
file->tag.set_property("PLAY", play);
file->tag.set_property("GANG", gang);
file->tag.set_property("DRAW", draw);
@@
-1145,18
+1153,19
@@
int Track::copy_assets(double start,
return 0;
}
return 0;
}
+int Track::blade(double position)
+{
+ int64_t start = to_units(position, 0);
+ Edit *edit = edits->split_edit(start);
+ if( !edit ) return 1;
+ edit->hard_left = 1;
+ if( edit->previous ) edit->previous->hard_right = 1;
+ return 0;
+}
-
-
-
-int Track::clear(double start,
- double end,
- int edit_edits,
- int edit_labels,
- int edit_plugins,
- int edit_autos,
- int convert_units,
- Edits *trim_edits)
+int Track::clear(double start, double end,
+ int edit_edits, int edit_labels, int edit_plugins,
+ int edit_autos, int convert_units, Edits *trim_edits)
{
// Edits::move_auto calls this routine after the units are converted to the track
// format.
{
// Edits::move_auto calls this routine after the units are converted to the track
// format.
@@
-1541,7
+1550,10
@@
void Track::shuffle_edits(double start, double end, int first_track)
int index = rand() % new_edits.size();
Edit *edit = new_edits.get(index);
new_edits.remove_number(index);
int index = rand() % new_edits.size();
Edit *edit = new_edits.get(index);
new_edits.remove_number(index);
- edits->insert_after(start_edit, edit);
+ if( !start_edit )
+ edits->insert_before(edits->first, edit);
+ else
+ edits->insert_after(start_edit, edit);
start_edit = edit;
// Recalculate start position
start_edit = edit;
// Recalculate start position
@@
-1564,20
+1576,18
@@
void Track::shuffle_edits(double start, double end, int first_track)
if(first_track && edl->session->labels_follow_edits)
{
double start_seconds1 = from_units(startproject1);
if(first_track && edl->session->labels_follow_edits)
{
double start_seconds1 = from_units(startproject1);
+ double end_seconds1 = from_units(startproject1 + edit->length);
double start_seconds2 = from_units(startproject2);
double start_seconds2 = from_units(startproject2);
- //double end_seconds1 = from_units(edit->startproject +
- // edit->length);
for(int i = new_labels.size() - 1; i >= 0; i--)
{
Label *label = new_labels.get(i);
// Was in old edit position
if(label->position >= start_seconds1 &&
for(int i = new_labels.size() - 1; i >= 0; i--)
{
Label *label = new_labels.get(i);
// Was in old edit position
if(label->position >= start_seconds1 &&
- label->position <
start_seconds2
)
+ label->position <
end_seconds1
)
{
// Move to new edit position
double position = label->position -
{
// Move to new edit position
double position = label->position -
- start_seconds1 +
- start_seconds2;
+ start_seconds1 + start_seconds2;
edl->labels->insert_label(position);
new_labels.remove_object_number(i);
}
edl->labels->insert_label(position);
new_labels.remove_object_number(i);
}
@@
-1657,7
+1667,10
@@
void Track::reverse_edits(double start, double end, int first_track)
int index = new_edits.size() - 1;
Edit *edit = new_edits.get(index);
new_edits.remove_number(index);
int index = new_edits.size() - 1;
Edit *edit = new_edits.get(index);
new_edits.remove_number(index);
- edits->insert_after(start_edit, edit);
+ if( !start_edit )
+ edits->insert_before(edits->first, edit);
+ else
+ edits->insert_after(start_edit, edit);
start_edit = edit;
// Recalculate start position
start_edit = edit;
// Recalculate start position
@@
-1680,19
+1693,18
@@
void Track::reverse_edits(double start, double end, int first_track)
if(first_track && edl->session->labels_follow_edits)
{
double start_seconds1 = from_units(startproject1);
if(first_track && edl->session->labels_follow_edits)
{
double start_seconds1 = from_units(startproject1);
+ double end_seconds1 = from_units(startproject1 + edit->length);
double start_seconds2 = from_units(startproject2);
double start_seconds2 = from_units(startproject2);
- //double end_seconds1 = from_units(edit->startproject + edit->length);
for(int i = new_labels.size() - 1; i >= 0; i--)
{
Label *label = new_labels.get(i);
// Was in old edit position
if(label->position >= start_seconds1 &&
for(int i = new_labels.size() - 1; i >= 0; i--)
{
Label *label = new_labels.get(i);
// Was in old edit position
if(label->position >= start_seconds1 &&
- label->position <
start_seconds2
)
+ label->position <
end_seconds1
)
{
// Move to new edit position
double position = label->position -
{
// Move to new edit position
double position = label->position -
- start_seconds1 +
- start_seconds2;
+ start_seconds1 + start_seconds2;
edl->labels->insert_label(position);
new_labels.remove_object_number(i);
}
edl->labels->insert_label(position);
new_labels.remove_object_number(i);
}
@@
-1844,6
+1856,13
@@
double Track::from_units(int64_t position)
return (double)position;
}
return (double)position;
}
+int64_t Track::frame_align(int64_t position, int round)
+{
+ if( data_type != TRACK_VIDEO && edl->session->cursor_on_frames )
+ position = to_units(edl->align_to_frame(from_units(position), round), round);
+ return position;
+}
+
int Track::plugin_exists(Plugin *plugin)
{
for(int number = 0; number < plugin_set.size(); number++)
int Track::plugin_exists(Plugin *plugin)
{
for(int number = 0; number < plugin_set.size(); number++)
@@
-1867,3
+1886,14
@@
int Track::plugin_exists(Plugin *plugin)
return 0;
}
return 0;
}
+int Track::get_mixer_id()
+{
+ if( mixer_id < 0 ) {
+ int v = 0;
+ for( Track *track=tracks->first; track!=0; track=track->next )
+ if( track->mixer_id > v ) v = track->mixer_id;
+ mixer_id = v + 1;
+ }
+ return mixer_id;
+}
+