From 9dae320b12ddbfcf9aefb24e4c5f8e2a7c98d10b Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 24 May 2012 22:03:19 +0000 Subject: [PATCH] always create short xfades when adding a region based on capture git-svn-id: svn://localhost/ardour2/branches/3.0@12443 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/playlist.h | 3 +++ libs/ardour/audio_diskstream.cc | 2 ++ libs/ardour/audio_playlist.cc | 34 +++++++++++++++++++++------------ libs/ardour/playlist.cc | 13 ++++++++++--- 4 files changed, 37 insertions(+), 15 deletions(-) diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h index d78dab00bb..ee57ca1cf0 100644 --- a/libs/ardour/ardour/playlist.h +++ b/libs/ardour/ardour/playlist.h @@ -222,6 +222,8 @@ public: uint32_t combine_ops() const { return _combine_ops; } void set_layer (boost::shared_ptr, double); + + void set_capture_insertion_in_progress (bool yn); protected: friend class Session; @@ -286,6 +288,7 @@ public: bool in_flush; bool in_partition; bool _frozen; + bool _capture_insertion_underway; uint32_t subcnt; PBD::ID _orig_track_id; uint32_t _combine_ops; diff --git a/libs/ardour/audio_diskstream.cc b/libs/ardour/audio_diskstream.cc index 8c5b606388..8e6b5c27f1 100644 --- a/libs/ardour/audio_diskstream.cc +++ b/libs/ardour/audio_diskstream.cc @@ -1476,6 +1476,7 @@ AudioDiskstream::transport_stopped_wallclock (struct tm& when, time_t twhen, boo // cerr << _name << ": there are " << capture_info.size() << " capture_info records\n"; _playlist->clear_changes (); + _playlist->set_capture_insertion_in_progress (true); _playlist->freeze (); for (buffer_position = c->front()->write_source->last_capture_start_frame(), ci = capture_info.begin(); ci != capture_info.end(); ++ci) { @@ -1514,6 +1515,7 @@ AudioDiskstream::transport_stopped_wallclock (struct tm& when, time_t twhen, boo } _playlist->thaw (); + _playlist->set_capture_insertion_in_progress (false); _session.add_command (new StatefulDiffCommand (_playlist)); } diff --git a/libs/ardour/audio_playlist.cc b/libs/ardour/audio_playlist.cc index 25fad6122f..76cab14699 100644 --- a/libs/ardour/audio_playlist.cc +++ b/libs/ardour/audio_playlist.cc @@ -314,13 +314,18 @@ AudioPlaylist::check_crossfades (Evoral::Range range) /* Top's fade-in will cause an implicit fade-out of bottom */ framecnt_t len = 0; - switch (_session.config.get_xfade_model()) { - case FullCrossfade: - len = bottom->last_frame () - top->first_frame (); - break; - case ShortCrossfade: + + if (_capture_insertion_underway) { len = _session.config.get_short_xfade_seconds() * _session.frame_rate(); - break; + } else { + switch (_session.config.get_xfade_model()) { + case FullCrossfade: + len = bottom->last_frame () - top->first_frame (); + break; + case ShortCrossfade: + len = _session.config.get_short_xfade_seconds() * _session.frame_rate(); + break; + } } top->set_fade_in_active (true); @@ -357,13 +362,18 @@ AudioPlaylist::check_crossfades (Evoral::Range range) /* Top's fade-out will cause an implicit fade-in of bottom */ framecnt_t len = 0; - switch (_session.config.get_xfade_model()) { - case FullCrossfade: - len = top->last_frame () - bottom->first_frame (); - break; - case ShortCrossfade: + + if (_capture_insertion_underway) { len = _session.config.get_short_xfade_seconds() * _session.frame_rate(); - break; + } else { + switch (_session.config.get_xfade_model()) { + case FullCrossfade: + len = top->last_frame () - bottom->first_frame (); + break; + case ShortCrossfade: + len = _session.config.get_short_xfade_seconds() * _session.frame_rate(); + break; + } } top->set_fade_out_active (true); diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc index 390f9fdaad..3b0528ed3b 100644 --- a/libs/ardour/playlist.cc +++ b/libs/ardour/playlist.cc @@ -47,9 +47,9 @@ using namespace ARDOUR; using namespace PBD; namespace ARDOUR { -namespace Properties { -PBD::PropertyDescriptor regions; -} + namespace Properties { + PBD::PropertyDescriptor regions; + } } struct ShowMeTheList { @@ -311,6 +311,7 @@ Playlist::init (bool hide) in_partition = false; subcnt = 0; _frozen = false; + _capture_insertion_underway = false; _combine_ops = 0; _session.history().BeginUndoRedo.connect_same_thread (*this, boost::bind (&Playlist::begin_undo, this)); @@ -3108,3 +3109,9 @@ restart: check_crossfades (*i); } } + +void +Playlist::set_capture_insertion_in_progress (bool yn) +{ + _capture_insertion_underway = yn; +}