summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2019-10-31 21:45:41 +0100
committerCarl Hetherington <cth@carlh.net>2019-10-31 22:39:50 +0100
commit122bea7f0e08e07dcdaccd51751a9c83504f4c04 (patch)
tree76fda35f6ffd5bcfad032bf32d07c498b084b734 /src
parentb950f49fa893e71545eaf9c0abe8a453d42a4340 (diff)
Make separate reels for parts of the timeline with no video when
we are in REEL_TYPE_BY_VIDEO_CONTENT mode. This fixes VF creation with gaps. Also the implementation of Film::reels() is cleaner now.
Diffstat (limited to 'src')
-rw-r--r--src/lib/film.cc32
-rw-r--r--src/lib/reel_writer.cc4
2 files changed, 18 insertions, 18 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc
index d19dcc73c..39dfaf5c0 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -1606,29 +1606,29 @@ Film::reels () const
break;
case REELTYPE_BY_VIDEO_CONTENT:
{
- DCPTime last_split;
- shared_ptr<Content> last_video;
- BOOST_FOREACH (shared_ptr<Content> c, content ()) {
+ /* Collect all reel boundaries */
+ list<DCPTime> split_points;
+ split_points.push_back (DCPTime());
+ split_points.push_back (len);
+ BOOST_FOREACH (shared_ptr<Content> c, content()) {
if (c->video) {
BOOST_FOREACH (DCPTime t, c->reel_split_points(shared_from_this())) {
- if (last_split != t) {
- p.push_back (DCPTimePeriod(last_split, t));
- last_split = t;
- }
+ split_points.push_back (t);
}
- last_video = c;
+ split_points.push_back (c->end(shared_from_this()));
}
}
- DCPTime video_end = last_video ? last_video->end(shared_from_this()) : DCPTime(0);
- if (last_split != video_end) {
- /* Definitely go from the last split to the end of the video content */
- p.push_back (DCPTimePeriod(last_split, video_end));
- }
+ split_points.sort ();
+ split_points.unique ();
- if (video_end < len) {
- /* And maybe go after that as well if there is any non-video hanging over the end */
- p.push_back (DCPTimePeriod (video_end, len));
+ /* Make them into periods */
+ optional<DCPTime> last;
+ BOOST_FOREACH (DCPTime t, split_points) {
+ if (last) {
+ p.push_back (DCPTimePeriod(*last, t));
+ }
+ last = t;
}
break;
}
diff --git a/src/lib/reel_writer.cc b/src/lib/reel_writer.cc
index 116761dab..a4172337e 100644
--- a/src/lib/reel_writer.cc
+++ b/src/lib/reel_writer.cc
@@ -462,6 +462,8 @@ maybe_add_text (
shared_ptr<dcp::Reel>
ReelWriter::create_reel (list<ReferencedReelAsset> const & refs, list<shared_ptr<Font> > const & fonts)
{
+ LOG_GENERAL ("create_reel for %1-%2; %3 of %4", _period.from.get(), _period.to.get(), _reel_index, _reel_count);
+
shared_ptr<dcp::Reel> reel (new dcp::Reel ());
shared_ptr<dcp::ReelPictureAsset> reel_picture_asset;
@@ -491,8 +493,6 @@ ReelWriter::create_reel (list<ReferencedReelAsset> const & refs, list<shared_ptr
}
}
- LOG_GENERAL ("create_reel for %1-%2; %3 of %4", _period.from.get(), _period.to.get(), _reel_index, _reel_count);
-
Frame const period_duration = _period.duration().frames_round(_film->video_frame_rate());
DCPOMATIC_ASSERT (reel_picture_asset);