Copy region properties (1/2)

RegionFactory::create(Region&,..) copies all region properties.

There are however various operations that use a new Source
as intermediate to create a new Region from another Region.
Those operations should also inherit various region properties
(such as mute, opaque, locked, ..)
This commit is contained in:
Robin Gareus 2022-09-19 20:07:32 +02:00
parent b5fd753886
commit 8b0ab38675
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
5 changed files with 10 additions and 36 deletions

View File

@ -1388,12 +1388,9 @@ AudioRegion::separate_by_channel (vector<boost::shared_ptr<Region> >& v) const
"whole file" even if it covers the entire source file(s).
*/
PropertyList plist;
PropertyList plist (properties ());
plist.add (Properties::start, _start.val());
plist.add (Properties::length, _length.val());
plist.add (Properties::name, new_name);
plist.add (Properties::layer, layer ());
plist.add (Properties::whole_file, true);
v.push_back(RegionFactory::create (srcs, plist));

View File

@ -133,26 +133,13 @@ Filter::finish (boost::shared_ptr<Region> region, SourceList& nsrcs, string regi
}
results.clear ();
PropertyList plist;
PropertyList plist (region->properties ());
plist.add (Properties::start, std::numeric_limits<timecnt_t>::min());
plist.add (Properties::length, region->length());
plist.add (Properties::name, region_name);
plist.add (Properties::whole_file, true);
boost::shared_ptr<Region> r = RegionFactory::create (nsrcs, plist);
boost::shared_ptr<AudioRegion> audio_region = boost::dynamic_pointer_cast<AudioRegion> (region);
boost::shared_ptr<AudioRegion> audio_r = boost::dynamic_pointer_cast<AudioRegion> (r);
if (audio_region && audio_r) {
audio_r->set_position (region->position());
audio_r->set_scale_amplitude (audio_region->scale_amplitude());
audio_r->set_fade_in_active (audio_region->fade_in_active ());
audio_r->set_fade_in (audio_region->fade_in ());
audio_r->set_fade_out_active (audio_region->fade_out_active ());
audio_r->set_fade_out (audio_region->fade_out ());
*(audio_r->envelope()) = *(audio_region->envelope ());
}
results.push_back (r);
return 0;

View File

@ -521,7 +521,7 @@ remove_file_source (boost::shared_ptr<Source> source)
}
void
Session::deinterlace_midi_region ( boost::shared_ptr<MidiRegion> mr )
Session::deinterlace_midi_region (boost::shared_ptr<MidiRegion> mr)
{
typedef vector<boost::shared_ptr<Source> > Sources;
Sources newfiles;
@ -580,12 +580,10 @@ Session::deinterlace_midi_region ( boost::shared_ptr<MidiRegion> mr )
add_source(*x);
/* create a whole-file region for this new source, so it shows up in the Source List...*/
PropertyList plist;
PropertyList plist (mr->properties ());
plist.add (Properties::whole_file, true);
plist.add (Properties::start, mr->start());
plist.add (Properties::length, mr->length());
plist.add (Properties::name, (*x)->name());
plist.add (Properties::tags, "(split-chans)");
plist.add (Properties::tags, string_compose ("%1%2%3", _("split-chans)"), mr->tags ().empty() ? "" : " ", mr->tags ()));
boost::shared_ptr<Region> whole = RegionFactory::create (*x, plist);
/* ... and insert a discrete copy into the playlist*/

View File

@ -1226,7 +1226,7 @@ LuaAPI::Rubberband::finalize ()
/* create a new region */
std::string region_name = RegionFactory::new_region_name (_region->name ());
PropertyList plist;
PropertyList plist (_region->properties ());
plist.add (Properties::start, 0);
plist.add (Properties::length, _region->length_samples ());
plist.add (Properties::name, region_name);
@ -1235,16 +1235,7 @@ LuaAPI::Rubberband::finalize ()
boost::shared_ptr<Region> r = RegionFactory::create (sl, plist);
boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion> (r);
ar->set_scale_amplitude (_region->scale_amplitude ());
ar->set_fade_in_active (_region->fade_in_active ());
ar->set_fade_in (_region->fade_in ());
ar->set_fade_out_active (_region->fade_out_active ());
ar->set_fade_out (_region->fade_out ());
*(ar->envelope ()) = *(_region->envelope ());
ar->set_ancestral_data (timepos_t (_read_start), timecnt_t (_read_len), _stretch_ratio, _pitch_ratio);
ar->set_master_sources (_region->master_sources ());
ar->set_position (timepos_t (_region->position_sample ()));
ar->set_length (ar->length ().scale (_stretch_ratio)); // XXX
if (_stretch_ratio != 1.0) {
// TODO: apply mapping

View File

@ -161,12 +161,13 @@ MidiRegion::clone (boost::shared_ptr<MidiSource> newsrc, ThawList* tl) const
}
}
PropertyList plist;
PropertyList plist (properties ());
plist.add (Properties::name, PBD::basename_nosuffix (newsrc->name()));
plist.add (Properties::whole_file, true);
plist.add (Properties::start, _start);
plist.add (Properties::length, _length);
plist.add (Properties::automatic, false);
plist.add (Properties::external, false);
plist.add (Properties::import, false);
plist.add (Properties::layer, 0);
boost::shared_ptr<MidiRegion> ret (boost::dynamic_pointer_cast<MidiRegion> (RegionFactory::create (newsrc, plist, true, tl)));