summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2020-11-20 00:53:20 +0100
committerCarl Hetherington <cth@carlh.net>2020-11-20 23:47:03 +0100
commit4347d97b703cfddcd322051092ccfcd5b5a6b941 (patch)
tree30ee949b1cbf6cf6300c736c4e6663ffbe832616 /src/lib
parentbea1b9f9c77c721afd15bab392a86343f8d6b83a (diff)
Subtitle language handling tweaks; write multiple subtitle languages
to SMPTE extended metadata.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/reel_writer.cc10
-rw-r--r--src/lib/subtitle_encoder.cc4
-rw-r--r--src/lib/writer.cc5
3 files changed, 14 insertions, 5 deletions
diff --git a/src/lib/reel_writer.cc b/src/lib/reel_writer.cc
index c4df58fe7..345bcdeb3 100644
--- a/src/lib/reel_writer.cc
+++ b/src/lib/reel_writer.cc
@@ -597,7 +597,11 @@ ReelWriter::create_reel (list<ReferencedReelAsset> const & refs, list<shared_ptr
}
reel->add (reel_sound_asset);
- maybe_add_text<dcp::ReelSubtitleAsset> (_subtitle_asset, reel_picture_asset->actual_duration(), reel, refs, fonts, _film, _period);
+ shared_ptr<dcp::ReelSubtitleAsset> subtitle = maybe_add_text<dcp::ReelSubtitleAsset> (_subtitle_asset, reel_picture_asset->actual_duration(), reel, refs, fonts, _film, _period);
+ if (subtitle && !_film->subtitle_languages().empty()) {
+ subtitle->set_language (_film->subtitle_languages().front());
+ }
+
for (map<DCPTextTrack, shared_ptr<dcp::SubtitleAsset> >::const_iterator i = _closed_caption_assets.begin(); i != _closed_caption_assets.end(); ++i) {
shared_ptr<dcp::ReelClosedCaptionAsset> a = maybe_add_text<dcp::ReelClosedCaptionAsset> (
i->second, reel_picture_asset->actual_duration(), reel, refs, fonts, _film, _period
@@ -703,9 +707,9 @@ ReelWriter::write (PlayerText subs, TextType type, optional<DCPTextTrack> track,
s->set_content_title_text (_film->name ());
s->set_metadata (mxf_metadata());
if (type == TEXT_OPEN_SUBTITLE && !lang.empty()) {
- s->set_language (lang.front().to_string());
+ s->set_language (lang.front());
} else {
- s->set_language (track->language);
+ s->set_language (dcp::LanguageTag(track->language));
}
s->set_edit_rate (dcp::Fraction (_film->video_frame_rate (), 1));
s->set_reel_number (_reel_index + 1);
diff --git a/src/lib/subtitle_encoder.cc b/src/lib/subtitle_encoder.cc
index 5e76f5e73..61c4dc3ae 100644
--- a/src/lib/subtitle_encoder.cc
+++ b/src/lib/subtitle_encoder.cc
@@ -141,9 +141,9 @@ SubtitleEncoder::text (PlayerText subs, TextType type, optional<DCPTextTrack> tr
shared_ptr<dcp::SMPTESubtitleAsset> s (new dcp::SMPTESubtitleAsset());
s->set_content_title_text (_film->name());
if (!lang.empty()) {
- s->set_language (lang.front().to_string());
+ s->set_language (lang.front());
} else {
- s->set_language (track->language);
+ s->set_language (dcp::LanguageTag(track->language));
}
s->set_edit_rate (dcp::Fraction (_film->video_frame_rate(), 1));
s->set_reel_number (_reel_index + 1);
diff --git a/src/lib/writer.cc b/src/lib/writer.cc
index 79e5ad73b..a9700f4f5 100644
--- a/src/lib/writer.cc
+++ b/src/lib/writer.cc
@@ -620,6 +620,11 @@ Writer::finish ()
cpl->set_main_picture_stored_area (_film->frame_size());
cpl->set_main_picture_active_area (_film->active_area());
+ vector<dcp::LanguageTag> sl = _film->subtitle_languages();
+ if (sl.size() > 1) {
+ cpl->set_additional_subtitle_languages(std::vector<dcp::LanguageTag>(sl.begin() + 1, sl.end()));
+ }
+
shared_ptr<const dcp::CertificateChain> signer;
signer = Config::instance()->signer_chain ();
/* We did check earlier, but check again here to be on the safe side */