using boost::weak_ptr;
using boost::shared_ptr;
using boost::optional;
-
-void
-ActiveText::add (DCPTimePeriod period, list<PlayerText>& pc, list<Period> p) const
-{
- BOOST_FOREACH (Period i, p) {
- DCPTimePeriod test (i.from, i.to.get_value_or(DCPTime::max()));
- optional<DCPTimePeriod> overlap = period.overlap (test);
- if (overlap && overlap->duration() > DCPTime(period.duration().get() / 2)) {
- pc.push_back (i.subs);
- }
- }
-}
-
-list<PlayerText>
-ActiveText::get (DCPTimePeriod period) const
-{
- list<PlayerText> ps;
-
- for (Map::const_iterator i = _data.begin(); i != _data.end(); ++i) {
-
- shared_ptr<const TextContent> caption = i->first.lock ();
- if (!caption || !caption->use()) {
- continue;
- }
-
- add (period, ps, i->second);
- }
-
- return ps;
-}
+using namespace dcpomatic;
/** Get the open captions that should be burnt into a given period.
* @param period Period of interest.
list<PlayerText>
ActiveText::get_burnt (DCPTimePeriod period, bool always_burn_captions) const
{
+ boost::mutex::scoped_lock lm (_mutex);
+
list<PlayerText> ps;
for (Map::const_iterator i = _data.begin(); i != _data.end(); ++i) {
continue;
}
- add (period, ps, i->second);
+ BOOST_FOREACH (Period j, i->second) {
+ DCPTimePeriod test (j.from, j.to.get_value_or(DCPTime::max()));
+ optional<DCPTimePeriod> overlap = period.overlap (test);
+ if (overlap && overlap->duration() > DCPTime(period.duration().get() / 2)) {
+ ps.push_back (j.subs);
+ }
+ }
}
return ps;
void
ActiveText::clear_before (DCPTime time)
{
+ boost::mutex::scoped_lock lm (_mutex);
+
Map updated;
for (Map::const_iterator i = _data.begin(); i != _data.end(); ++i) {
list<Period> as;
void
ActiveText::add_from (weak_ptr<const TextContent> content, PlayerText ps, DCPTime from)
{
+ boost::mutex::scoped_lock lm (_mutex);
+
if (_data.find(content) == _data.end()) {
_data[content] = list<Period>();
}
pair<PlayerText, DCPTime>
ActiveText::add_to (weak_ptr<const TextContent> content, DCPTime to)
{
+ boost::mutex::scoped_lock lm (_mutex);
+
DCPOMATIC_ASSERT (_data.find(content) != _data.end());
_data[content].back().to = to;
- BOOST_FOREACH (StringText& i, _data[content].back().subs.text) {
+ BOOST_FOREACH (StringText& i, _data[content].back().subs.string) {
i.set_out (dcp::Time(to.seconds(), 1000));
}
bool
ActiveText::have (weak_ptr<const TextContent> content) const
{
+ boost::mutex::scoped_lock lm (_mutex);
+
Map::const_iterator i = _data.find(content);
if (i == _data.end()) {
return false;
void
ActiveText::clear ()
{
+ boost::mutex::scoped_lock lm (_mutex);
_data.clear ();
}