summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2025-03-20 23:43:34 +0100
committerCarl Hetherington <cth@carlh.net>2025-03-24 16:59:24 +0100
commit816a7b7a9d9c3cae7565cec139bf28068853f94d (patch)
tree718644b178b68fd03e2b1ea18c7bec96da5de4e4 /src/lib
parente93b66f4236ec25dbd0603bbe74c904b53180e91 (diff)
Basic support for variable-Z 3D subtitles.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/config.cc4
-rw-r--r--src/lib/dcp_text_track.cc4
-rw-r--r--src/lib/film.cc8
-rw-r--r--src/lib/reel_writer.cc11
-rw-r--r--src/lib/subtitle_film_encoder.cc2
-rw-r--r--src/lib/text_content.cc2
-rw-r--r--src/lib/text_decoder.cc1
-rw-r--r--src/lib/util.cc4
-rw-r--r--src/lib/video_content.cc2
9 files changed, 20 insertions, 18 deletions
diff --git a/src/lib/config.cc b/src/lib/config.cc
index 49c64e5b6..86bc343da 100644
--- a/src/lib/config.cc
+++ b/src/lib/config.cc
@@ -807,7 +807,7 @@ Config::write_config() const
cxml::add_text_child(root, "DefaultAudioDelay", fmt::to_string(_default_audio_delay));
if (_default_audio_language) {
/* [XML] DefaultAudioLanguage Default audio language to use for new films */
- cxml::add_text_child(root, "DefaultAudioLanguage", _default_audio_language->to_string());
+ cxml::add_text_child(root, "DefaultAudioLanguage", _default_audio_language->as_string());
}
if (_default_kdm_directory) {
/* [XML:opt] DefaultKDMDirectory Default directory to write KDMs to. */
@@ -1111,7 +1111,7 @@ Config::write_config() const
_audio_mapping->as_xml(cxml::add_child(root, "AudioMapping"));
}
for (auto const& i: _custom_languages) {
- cxml::add_text_child(root, "CustomLanguage", i.to_string());
+ cxml::add_text_child(root, "CustomLanguage", i.as_string());
}
for (auto const& initial: _initial_paths) {
if (initial.second) {
diff --git a/src/lib/dcp_text_track.cc b/src/lib/dcp_text_track.cc
index 292932396..ec1d6828b 100644
--- a/src/lib/dcp_text_track.cc
+++ b/src/lib/dcp_text_track.cc
@@ -50,7 +50,7 @@ DCPTextTrack::DCPTextTrack (string name_, optional<dcp::LanguageTag> language_)
string
DCPTextTrack::summary () const
{
- return String::compose("%1 (%2)", name, language ? language->to_string() : _("Unknown"));
+ return String::compose("%1 (%2)", name, language ? language->as_string() : _("Unknown"));
}
void
@@ -58,7 +58,7 @@ DCPTextTrack::as_xml (xmlpp::Element* parent) const
{
cxml::add_text_child(parent, "Name", name);
if (language) {
- cxml::add_text_child(parent, "Language", language->to_string());
+ cxml::add_text_child(parent, "Language", language->as_string());
}
}
diff --git a/src/lib/film.cc b/src/lib/film.cc
index 6adc7dff4..5c3b6cee9 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -442,13 +442,13 @@ Film::metadata(bool with_content_paths) const
for (auto i: _content_versions) {
cxml::add_text_child(root, "ContentVersion", i);
}
- cxml::add_text_child(root, "NameLanguage", _name_language.to_string());
+ cxml::add_text_child(root, "NameLanguage", _name_language.as_string());
cxml::add_text_child(root, "TerritoryType", territory_type_to_string(_territory_type));
if (_release_territory) {
cxml::add_text_child(root, "ReleaseTerritory", _release_territory->subtag());
}
if (_sign_language_video_language) {
- cxml::add_text_child(root, "SignLanguageVideoLanguage", _sign_language_video_language->to_string());
+ cxml::add_text_child(root, "SignLanguageVideoLanguage", _sign_language_video_language->as_string());
}
cxml::add_text_child(root, "VersionNumber", fmt::to_string(_version_number));
cxml::add_text_child(root, "Status", dcp::status_to_string(_status));
@@ -475,7 +475,7 @@ Film::metadata(bool with_content_paths) const
cxml::add_text_child(root, "UserExplicitContainer", _user_explicit_container ? "1" : "0");
cxml::add_text_child(root, "UserExplicitResolution", _user_explicit_resolution ? "1" : "0");
if (_audio_language) {
- cxml::add_text_child(root, "AudioLanguage", _audio_language->to_string());
+ cxml::add_text_child(root, "AudioLanguage", _audio_language->as_string());
}
_playlist->as_xml(
cxml::add_child(root, "Playlist"),
@@ -1004,7 +1004,7 @@ Film::isdcf_name(bool if_created_now) const
auto entry_for_language = [](dcp::LanguageTag const& tag) {
/* Look up what we should be using for this tag in the DCNC name */
for (auto const& dcnc: dcp::dcnc_tags()) {
- if (tag.to_string() == dcnc.first) {
+ if (tag.as_string() == dcnc.first) {
return dcnc.second;
}
}
diff --git a/src/lib/reel_writer.cc b/src/lib/reel_writer.cc
index 9037c9ef9..90cd9f26b 100644
--- a/src/lib/reel_writer.cc
+++ b/src/lib/reel_writer.cc
@@ -801,9 +801,9 @@ ReelWriter::empty_text_asset (TextType type, optional<DCPTextTrack> track, bool
auto s = make_shared<dcp::InteropTextAsset>();
s->set_movie_title (film()->name());
if (is_open(type)) {
- s->set_language (lang.first ? lang.first->to_string() : "Unknown");
+ s->set_language(lang.first ? lang.first->as_string() : "Unknown");
} else if (track->language) {
- s->set_language (track->language->to_string());
+ s->set_language(track->language->as_string());
}
s->set_reel_number(fmt::to_string(_reel_index + 1));
asset = s;
@@ -814,7 +814,7 @@ ReelWriter::empty_text_asset (TextType type, optional<DCPTextTrack> track, bool
if (is_open(type) && lang.first) {
s->set_language (*lang.first);
} else if (track && track->language) {
- s->set_language (dcp::LanguageTag(track->language->to_string()));
+ s->set_language(dcp::LanguageTag(track->language->as_string()));
}
s->set_edit_rate (dcp::Fraction (film()->video_frame_rate(), 1));
s->set_reel_number (_reel_index + 1);
@@ -843,6 +843,7 @@ ReelWriter::empty_text_asset (TextType type, optional<DCPTextTrack> track, bool
0.5,
dcp::VAlign::CENTER,
0,
+ vector<dcp::Text::VariableZPosition>(),
dcp::Direction::LTR,
" ",
dcp::Effect::NONE,
@@ -958,11 +959,11 @@ ReelWriter::write(PlayerText subs, TextType type, optional<DCPTextTrack> track,
for (auto i: subs.bitmap) {
asset->add (
- make_shared<dcp::TextImage>(
+ std::make_shared<dcp::TextImage>(
image_as_png(i.image),
dcp::Time(period.from.seconds() - _period.from.seconds(), tcr),
dcp::Time(period.to.seconds() - _period.from.seconds(), tcr),
- i.rectangle.x, dcp::HAlign::LEFT, i.rectangle.y, dcp::VAlign::TOP, 0,
+ i.rectangle.x, dcp::HAlign::LEFT, i.rectangle.y, dcp::VAlign::TOP, 0, vector<dcp::Text::VariableZPosition>(),
dcp::Time(), dcp::Time()
)
);
diff --git a/src/lib/subtitle_film_encoder.cc b/src/lib/subtitle_film_encoder.cc
index a127ba73f..2de74bc67 100644
--- a/src/lib/subtitle_film_encoder.cc
+++ b/src/lib/subtitle_film_encoder.cc
@@ -145,7 +145,7 @@ SubtitleFilmEncoder::text(PlayerText subs, TextType type, optional<DCPTextTrack>
auto s = make_shared<dcp::InteropTextAsset>();
s->set_movie_title (_film->name());
if (lang.first) {
- s->set_language (lang.first->to_string());
+ s->set_language(lang.first->as_string());
}
s->set_reel_number(fmt::to_string(_reel_index + 1));
_assets[_reel_index].first = s;
diff --git a/src/lib/text_content.cc b/src/lib/text_content.cc
index 4a333bb76..93dad2639 100644
--- a/src/lib/text_content.cc
+++ b/src/lib/text_content.cc
@@ -411,7 +411,7 @@ TextContent::as_xml(xmlpp::Element* root) const
}
if (_language) {
auto lang = cxml::add_child(text, "Language");
- lang->add_child_text (_language->to_string());
+ lang->add_child_text(_language->as_string());
lang->set_attribute("additional", _language_is_additional ? "1" : "0");
}
}
diff --git a/src/lib/text_decoder.cc b/src/lib/text_decoder.cc
index ab82177f7..52d6c58d3 100644
--- a/src/lib/text_decoder.cc
+++ b/src/lib/text_decoder.cc
@@ -284,6 +284,7 @@ TextDecoder::emit_plain_start(ContentTime from, sub::Subtitle const & sub_subtit
v_position,
v_align,
0,
+ vector<dcp::Text::VariableZPosition>(),
dcp::Direction::LTR,
remove_invalid_characters_for_xml(block.text),
dcp::Effect::NONE,
diff --git a/src/lib/util.cc b/src/lib/util.cc
index 1e2f7d61f..81ae4c494 100644
--- a/src/lib/util.cc
+++ b/src/lib/util.cc
@@ -479,8 +479,8 @@ LIBDCP_ENABLE_WARNINGS
/* Render something to fontconfig to create its cache */
vector<StringText> subs;
dcp::TextString ss(
- optional<string>(), false, false, false, dcp::Colour(), 42, 1, dcp::Time(), dcp::Time(), 0, dcp::HAlign::CENTER, 0, dcp::VAlign::CENTER, 0, dcp::Direction::LTR,
- "Hello dolly", dcp::Effect::NONE, dcp::Colour(), dcp::Time(), dcp::Time(), 0, std::vector<dcp::Ruby>()
+ optional<string>(), false, false, false, dcp::Colour(), 42, 1, dcp::Time(), dcp::Time(), 0, dcp::HAlign::CENTER, 0, dcp::VAlign::CENTER, 0,
+ vector<dcp::Text::VariableZPosition>(), dcp::Direction::LTR, "Hello dolly", dcp::Effect::NONE, dcp::Colour(), dcp::Time(), dcp::Time(), 0, std::vector<dcp::Ruby>()
);
subs.push_back(StringText(ss, 0, make_shared<dcpomatic::Font>("foo"), dcp::SubtitleStandard::SMPTE_2014));
render_text(subs, dcp::Size(640, 480), DCPTime(), 24);
diff --git a/src/lib/video_content.cc b/src/lib/video_content.cc
index 56262cd14..ae13e1eca 100644
--- a/src/lib/video_content.cc
+++ b/src/lib/video_content.cc
@@ -304,7 +304,7 @@ VideoContent::as_xml(xmlpp::Element* element) const
cxml::add_text_child(element, "Range", _range == VideoRange::FULL ? "full" : "video");
_pixel_quanta.as_xml(cxml::add_child(element, "PixelQuanta"));
if (_burnt_subtitle_language) {
- cxml::add_text_child(element, "BurntSubtitleLanguage", _burnt_subtitle_language->to_string());
+ cxml::add_text_child(element, "BurntSubtitleLanguage", _burnt_subtitle_language->as_string());
}
}