Update session extents calculation
* Expose API via Public Editor * Skip hidden tracks in calculation * Use a single call to query playlist extents. This way the playlist read-lock is needed at most once per track which speeds up calculation.
This commit is contained in:
parent
548db7a9a4
commit
aecd84e7fd
@ -623,19 +623,19 @@ Editor::session_gui_extents (bool use_extra) const
|
||||
boost::shared_ptr<RouteList> rl = _session->get_routes();
|
||||
for (RouteList::iterator r = rl->begin(); r != rl->end(); ++r) {
|
||||
boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*r);
|
||||
if (tr) {
|
||||
boost::shared_ptr<Playlist> pl = tr->playlist();
|
||||
if (pl && !pl->all_regions_empty()) {
|
||||
pair<samplepos_t, samplepos_t> e;
|
||||
e = pl->get_extent();
|
||||
if (e.first < session_extent_start) {
|
||||
session_extent_start = e.first;
|
||||
}
|
||||
if (e.second > session_extent_end) {
|
||||
session_extent_end = e.second;
|
||||
}
|
||||
}
|
||||
if (!tr) {
|
||||
continue;
|
||||
}
|
||||
if (tr->presentation_info ().hidden ()) {
|
||||
continue;
|
||||
}
|
||||
pair<samplepos_t, samplepos_t> e = tr->playlist()->get_extent ();
|
||||
if (e.first == e.second) {
|
||||
/* no regions present */
|
||||
continue;
|
||||
}
|
||||
session_extent_start = std::min (session_extent_start, e.first);
|
||||
session_extent_end = std::max (session_extent_end, e.second);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -480,6 +480,8 @@ public:
|
||||
|
||||
virtual void get_pointer_position (double &, double &) const = 0;
|
||||
|
||||
virtual std::pair <samplepos_t, samplepos_t> session_gui_extents (bool use_extra = true) const = 0;
|
||||
|
||||
virtual ARDOUR::Location* find_location_from_marker (ArdourMarker*, bool&) const = 0;
|
||||
virtual ArdourMarker* find_marker_from_location_id (PBD::ID const&, bool) const = 0;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user