- if (reel_subtitle_asset) {
- if (reel_subtitle_asset->duration() != period_duration) {
- throw ProgrammingError (
- __FILE__, __LINE__,
- String::compose ("%1 vs %2", reel_subtitle_asset->duration(), period_duration)
- );
- }
- reel->add (reel_subtitle_asset);
+
+/** @param ensure_subtitles true to make sure the reel has a subtitle asset.
+ * @param ensure_closed_captions make sure the reel has these closed caption tracks.
+ */
+shared_ptr<dcp::Reel>
+ReelWriter::create_reel (
+ list<ReferencedReelAsset> const & refs,
+ vector<FontData> const & fonts,
+ boost::filesystem::path output_dcp,
+ bool ensure_subtitles,
+ set<DCPTextTrack> ensure_closed_captions
+ )
+{
+ LOG_GENERAL ("create_reel for %1-%2; %3 of %4", _period.from.get(), _period.to.get(), _reel_index, _reel_count);
+
+ auto reel = make_shared<dcp::Reel>();
+
+ /* This is a bit of a hack; in the strange `_text_only' mode we have no picture, so we don't know
+ * how long the subtitle / CCAP assets should be. However, since we're only writing them to see
+ * how big they are, we don't care about that.
+ */
+ int64_t duration = 0;
+ if (!_text_only) {
+ auto reel_picture_asset = create_reel_picture (reel, refs);
+ duration = reel_picture_asset->actual_duration ();
+ create_reel_sound (reel, refs);
+ create_reel_markers (reel);
+ }
+
+ create_reel_text (reel, refs, fonts, duration, output_dcp, ensure_subtitles, ensure_closed_captions);
+
+ if (_atmos_asset) {
+ reel->add (make_shared<dcp::ReelAtmosAsset>(_atmos_asset, 0));