/*
- Copyright (C) 2012-2018 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2019 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
#include "font.h"
#include "util.h"
#include "reel_writer.h"
+#include "text_content.h"
#include <dcp/cpl.h>
#include <dcp/locale_convert.h>
#include <boost/foreach.hpp>
using boost::dynamic_pointer_cast;
using boost::optional;
using dcp::Data;
+using namespace dcpomatic;
Writer::Writer (shared_ptr<const Film> film, weak_ptr<Job> j)
: _film (film)
size_t const reel = video_reel (frame);
Frame const reel_frame = frame - _reels[reel].start ();
- FILE* file = fopen_boost (_film->info_file(_reels[reel].period()), "rb");
- if (!file) {
- throw ReadFileError (_film->info_file(_reels[reel].period()));
- }
- dcp::FrameInfo info = _reels[reel].read_frame_info (file, reel_frame, eyes);
- fclose (file);
-
QueueItem qi;
qi.type = QueueItem::FAKE;
- qi.size = info.size;
+
+ {
+ shared_ptr<InfoFileHandle> info_file = _film->info_file_handle(_reels[reel].period(), true);
+ qi.size = _reels[reel].read_frame_info(info_file, reel_frame, eyes).size;
+ }
+
qi.reel = reel;
qi.frame = reel_frame;
if (_film->three_d() && eyes == EYES_BOTH) {
/* Easy case: we can write all the audio to this reel */
_audio_reel->write (audio);
t = end;
+ } else if (_audio_reel->period().to <= t) {
+ /* This reel is entirely before the start of our audio; just skip the reel */
+ ++_audio_reel;
} else {
- /* Split the audio into two and write the first part */
+ /* This audio is over a reel boundary; split the audio into two and write the first part */
DCPTime part_lengths[2] = {
_audio_reel->period().to - t,
end - _audio_reel->period().to
meta.set_issue_date_now ();
cpl->set_metadata (meta);
+ cpl->set_ratings (vector_to_list(_film->ratings()));
shared_ptr<const dcp::CertificateChain> signer;
if (_film->is_signed ()) {
boost::filesystem::path const cover = _film->file ("COVER_SHEET.txt");
FILE* f = fopen_boost (cover, "w");
if (!f) {
- throw OpenFileError (cover, errno, false);
+ throw OpenFileError (cover, errno, OpenFileError::WRITE);
}
string text = Config::instance()->cover_sheet ();
boost::algorithm::replace_all (text, "$TYPE", _film->dcp_content_type()->pretty_name());
boost::algorithm::replace_all (text, "$CONTAINER", _film->container()->container_nickname());
boost::algorithm::replace_all (text, "$AUDIO_LANGUAGE", _film->isdcf_metadata().audio_language);
- boost::algorithm::replace_all (text, "$SUBTITLE_LANGUAGE", _film->isdcf_metadata().subtitle_language);
+
+ optional<string> subtitle_language;
+ BOOST_FOREACH (shared_ptr<Content> i, _film->content()) {
+ BOOST_FOREACH (shared_ptr<TextContent> j, i->text) {
+ if (j->type() == TEXT_OPEN_SUBTITLE && j->use()) {
+ subtitle_language = j->language ();
+ }
+ }
+ }
+ boost::algorithm::replace_all (text, "$SUBTITLE_LANGUAGE", subtitle_language.get_value_or("None"));
boost::uintmax_t size = 0;
for (