X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fempty.cc;h=c145c231bc02c1cef932282602aa7f8e0b27ce5b;hb=8f8730cadb3dae36e8aa7b7c732a7c162eac0fb6;hp=2233b43426e7d859875fae85792c693d5d04f832;hpb=baf84885a777378b9ff5c05ef24d6361560822a6;p=dcpomatic.git diff --git a/src/lib/empty.cc b/src/lib/empty.cc index 2233b4342..c145c231b 100644 --- a/src/lib/empty.cc +++ b/src/lib/empty.cc @@ -19,11 +19,13 @@ */ #include "empty.h" +#include "film.h" #include "playlist.h" #include "content.h" #include "content_part.h" #include "dcp_content.h" #include "dcpomatic_time_coalesce.h" +#include "piece.h" #include #include @@ -32,17 +34,22 @@ using std::list; using boost::shared_ptr; using boost::dynamic_pointer_cast; using boost::function; +using namespace dcpomatic; -Empty::Empty (shared_ptr playlist, function (Content *)> part) +Empty::Empty (shared_ptr film, shared_ptr playlist, function)> part, DCPTime length) { list full; BOOST_FOREACH (shared_ptr i, playlist->content()) { - if (part (i.get())) { - full.push_back (DCPTimePeriod (i->position(), i->end())); + if (part(i)) { + full.push_back (DCPTimePeriod (i->position(), i->end(film))); } } - _periods = subtract (DCPTimePeriod(DCPTime(), playlist->length()), coalesce(full)); + _periods = subtract (DCPTimePeriod(DCPTime(), length), coalesce(full)); + + if (!_periods.empty ()) { + _position = _periods.front().from; + } } void @@ -79,11 +86,10 @@ Empty::period_at_position () const bool Empty::done () const { + DCPTime latest; BOOST_FOREACH (DCPTimePeriod i, _periods) { - if (i.contains(_position)) { - return false; - } + latest = max (latest, i.to); } - return true; + return _position >= latest; }