mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-07 23:35:03 +01:00
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
2 changed files with 14 additions and 12 deletions
|
|
@ -623,19 +623,19 @@ Editor::session_gui_extents (bool use_extra) const
|
||||||
boost::shared_ptr<RouteList> rl = _session->get_routes();
|
boost::shared_ptr<RouteList> rl = _session->get_routes();
|
||||||
for (RouteList::iterator r = rl->begin(); r != rl->end(); ++r) {
|
for (RouteList::iterator r = rl->begin(); r != rl->end(); ++r) {
|
||||||
boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*r);
|
boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*r);
|
||||||
if (tr) {
|
if (!tr) {
|
||||||
boost::shared_ptr<Playlist> pl = tr->playlist();
|
continue;
|
||||||
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->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 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 ARDOUR::Location* find_location_from_marker (ArdourMarker*, bool&) const = 0;
|
||||||
virtual ArdourMarker* find_marker_from_location_id (PBD::ID const&, bool) const = 0;
|
virtual ArdourMarker* find_marker_from_location_id (PBD::ID const&, bool) const = 0;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue