Add playlist APIs to find audible regions
This traverses the layered region stack at a given time, taking both mute and transparency into account.
This commit is contained in:
parent
9781c1baca
commit
e62f1093ea
@ -225,6 +225,7 @@ public:
|
||||
boost::shared_ptr<RegionList> regions_touched (timepos_t const & start, timepos_t const & end);
|
||||
boost::shared_ptr<RegionList> regions_with_start_within (Temporal::TimeRange);
|
||||
boost::shared_ptr<RegionList> regions_with_end_within (Temporal::TimeRange);
|
||||
boost::shared_ptr<RegionList> audible_regions_at (timepos_t const &);
|
||||
uint32_t region_use_count (boost::shared_ptr<Region>) const;
|
||||
boost::shared_ptr<Region> find_region (const PBD::ID&) const;
|
||||
boost::shared_ptr<Region> top_region_at (timepos_t const &);
|
||||
@ -233,6 +234,7 @@ public:
|
||||
timepos_t find_next_region_boundary (timepos_t const &, int dir);
|
||||
bool region_is_shuffle_constrained (boost::shared_ptr<Region>);
|
||||
bool has_region_at (timepos_t const &) const;
|
||||
bool region_is_audible_at (boost::shared_ptr<Region>, timepos_t const&);
|
||||
|
||||
timepos_t find_prev_region_start (timepos_t const & sample);
|
||||
|
||||
|
@ -1838,6 +1838,66 @@ Playlist::top_unmuted_region_at (timepos_t const & pos)
|
||||
return region;
|
||||
}
|
||||
|
||||
boost::shared_ptr<RegionList>
|
||||
Playlist::audible_regions_at (timepos_t const& pos)
|
||||
{
|
||||
boost::shared_ptr<RegionList> rv (new RegionList);
|
||||
boost::shared_ptr<RegionList> rlist;
|
||||
{
|
||||
RegionReadLock rlock (this);
|
||||
rlist = find_regions_at (pos);
|
||||
}
|
||||
|
||||
if (!rlist->size ()) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
RegionSortByLayer cmp;
|
||||
rlist->sort (cmp);
|
||||
|
||||
for (auto i = rlist->rbegin (); i != rlist->rend (); ++i) {
|
||||
if ((*i)->muted ()) {
|
||||
continue;
|
||||
}
|
||||
rv->push_back (*i);
|
||||
if ((*i)->opaque ()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
bool
|
||||
Playlist::region_is_audible_at (boost::shared_ptr<Region> r, timepos_t const& pos)
|
||||
{
|
||||
boost::shared_ptr<RegionList> rlist;
|
||||
{
|
||||
RegionReadLock rlock (this);
|
||||
rlist = find_regions_at (pos);
|
||||
}
|
||||
|
||||
if (!rlist->size ()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
RegionSortByLayer cmp;
|
||||
rlist->sort (cmp);
|
||||
|
||||
for (auto i = rlist->rbegin (); i != rlist->rend (); ++i) {
|
||||
if ((*i)->muted ()) {
|
||||
continue;
|
||||
}
|
||||
if (r == *i) {
|
||||
return true;
|
||||
}
|
||||
if ((*i)->opaque ()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
boost::shared_ptr<RegionList>
|
||||
Playlist::find_regions_at (timepos_t const & pos)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user