/*
- Copyright (C) 2017 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2017-2018 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
using std::make_pair;
using boost::weak_ptr;
using boost::shared_ptr;
+using boost::optional;
+/** Get the subtitles that should be burnt into a given period.
+ * @param period Period of interest.
+ * @param always_burn_subtitles Always burn subtitles even if their content is not set to burn.
+ */
list<PlayerSubtitles>
-ActiveSubtitles::get (DCPTime time, bool always_burn_subtitles) const
+ActiveSubtitles::get_burnt (DCPTimePeriod period, bool always_burn_subtitles) const
{
list<PlayerSubtitles> ps;
}
if (!piece->content->subtitle->use() || (!always_burn_subtitles && !piece->content->subtitle->burn())) {
+ /* Not burning this piece */
continue;
}
BOOST_FOREACH (Period j, i->second) {
- if (j.from <= time && (!j.to || j.to.get() > time)) {
+ 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;
}
+/** Remove subtitles that finish before a given time from our list.
+ * @param time Time to remove before.
+ */
void
ActiveSubtitles::clear_before (DCPTime time)
{
_data = updated;
}
+/** Add a new subtitle with a from time.
+ * @param piece Piece that the subtitle is from.
+ * @param ps Subtitles.
+ * @param from From time for these subtitles.
+ */
void
ActiveSubtitles::add_from (weak_ptr<Piece> piece, PlayerSubtitles ps, DCPTime from)
{
_data[piece].push_back (Period (ps, from));
}
+/** Add the to time for the last subtitle added from a piece.
+ * @param piece Piece that the subtitle is from.
+ * @param to To time for the last subtitle submitted to add_from for this piece.
+ * @return Return the corresponding subtitles and their from time.
+ */
pair<PlayerSubtitles, DCPTime>
ActiveSubtitles::add_to (weak_ptr<Piece> piece, DCPTime to)
{
return make_pair (_data[piece].back().subs, _data[piece].back().from);
}
+/** @param piece A piece.
+ * @return true if we have any active subtitles from this piece.
+ */
bool
ActiveSubtitles::have (weak_ptr<Piece> piece) const
{