summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2020-09-23 17:05:01 +0200
committerCarl Hetherington <cth@carlh.net>2020-09-23 17:05:01 +0200
commit4f4a86fb43b00d251e44a7f4463fcb390c605212 (patch)
tree274f1b4fea5a5c0f3b4fab9f825f350ec45c8b2a /src/lib
parent6b9f804bf49ceee0ebb9f06be123dccfee2a45ab (diff)
Add audio language configuration and pass it to libdcp.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/film.cc14
-rw-r--r--src/lib/film.h7
-rw-r--r--src/lib/reel_writer.cc9
3 files changed, 29 insertions, 1 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc
index 79ee20cfb..ea0a2bdd7 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -166,6 +166,7 @@ Film::Film (optional<boost::filesystem::path> dir)
, _user_explicit_container (false)
, _user_explicit_resolution (false)
, _name_language (dcp::LanguageTag("en-US"))
+ , _audio_language (dcp::LanguageTag("en-US"))
, _release_territory (dcp::LanguageTag::RegionSubtag("US"))
, _version_number (1)
, _status (dcp::FINAL)
@@ -473,6 +474,7 @@ Film::metadata (bool with_content_paths) const
root->add_child("ContentVersion")->add_child_text(i);
}
root->add_child("NameLanguage")->add_child_text(_name_language.to_string());
+ root->add_child("AudioLanguage")->add_child_text(_audio_language.to_string());
root->add_child("ReleaseTerritory")->add_child_text(_release_territory.subtag());
root->add_child("VersionNumber")->add_child_text(raw_convert<string>(_version_number));
root->add_child("Status")->add_child_text(dcp::status_to_string(_status));
@@ -636,6 +638,10 @@ Film::read_metadata (optional<boost::filesystem::path> path)
if (name_language) {
_name_language = dcp::LanguageTag (*name_language);
}
+ optional<string> audio_language = f.optional_string_child("AudioLanguage");
+ if (audio_language) {
+ _audio_language = dcp::LanguageTag (*audio_language);
+ }
optional<string> release_territory = f.optional_string_child("ReleaseTerritory");
if (release_territory) {
_release_territory = dcp::LanguageTag::RegionSubtag (*release_territory);
@@ -1945,6 +1951,14 @@ Film::set_name_language (dcp::LanguageTag lang)
void
+Film::set_audio_language (dcp::LanguageTag lang)
+{
+ ChangeSignaller<Film> ch (this, AUDIO_LANGUAGE);
+ _audio_language = lang;
+}
+
+
+void
Film::set_release_territory (dcp::LanguageTag::RegionSubtag region)
{
ChangeSignaller<Film> ch (this, RELEASE_TERRITORY);
diff --git a/src/lib/film.h b/src/lib/film.h
index 174805713..66bcce806 100644
--- a/src/lib/film.h
+++ b/src/lib/film.h
@@ -233,6 +233,7 @@ public:
RATINGS,
CONTENT_VERSIONS,
NAME_LANGUAGE,
+ AUDIO_LANGUAGE,
RELEASE_TERRITORY,
VERSION_NUMBER,
STATUS,
@@ -343,6 +344,10 @@ public:
return _name_language;
}
+ dcp::LanguageTag audio_language () const {
+ return _audio_language;
+ }
+
dcp::LanguageTag::RegionSubtag release_territory () const {
return _release_territory;
}
@@ -404,6 +409,7 @@ public:
void set_ratings (std::vector<dcp::Rating> r);
void set_content_versions (std::vector<std::string> v);
void set_name_language (dcp::LanguageTag lang);
+ void set_audio_language (dcp::LanguageTag lang);
void set_release_territory (dcp::LanguageTag::RegionSubtag region);
void set_version_number (int v);
void set_status (dcp::Status s);
@@ -506,6 +512,7 @@ private:
std::vector<dcp::Rating> _ratings;
std::vector<std::string> _content_versions;
dcp::LanguageTag _name_language;
+ dcp::LanguageTag _audio_language;
dcp::LanguageTag::RegionSubtag _release_territory;
int _version_number;
dcp::Status _status;
diff --git a/src/lib/reel_writer.cc b/src/lib/reel_writer.cc
index f5f21f2ea..9272bfa30 100644
--- a/src/lib/reel_writer.cc
+++ b/src/lib/reel_writer.cc
@@ -60,6 +60,7 @@ using std::string;
using std::cout;
using std::exception;
using std::map;
+using std::vector;
using boost::shared_ptr;
using boost::optional;
using boost::dynamic_pointer_cast;
@@ -155,7 +156,7 @@ ReelWriter::ReelWriter (
if (_film->audio_channels ()) {
_sound_asset.reset (
- new dcp::SoundAsset (dcp::Fraction (_film->video_frame_rate(), 1), _film->audio_frame_rate (), _film->audio_channels (), standard)
+ new dcp::SoundAsset (dcp::Fraction(_film->video_frame_rate(), 1), _film->audio_frame_rate(), _film->audio_channels(), _film->audio_language(), standard)
);
_sound_asset->set_metadata (mxf_metadata());
@@ -166,11 +167,17 @@ ReelWriter::ReelWriter (
DCPOMATIC_ASSERT (_film->directory());
+ vector<dcp::Channel> active;
+ BOOST_FOREACH (int i, _film->mapped_audio_channels()) {
+ active.push_back (static_cast<dcp::Channel>(i));
+ }
+
/* Write the sound asset into the film directory so that we leave the creation
of the DCP directory until the last minute.
*/
_sound_asset_writer = _sound_asset->start_write (
_film->directory().get() / audio_asset_filename (_sound_asset, _reel_index, _reel_count, _content_summary),
+ active,
_film->contains_atmos_content()
);
}