From: Carl Hetherington Date: Wed, 4 Aug 2021 20:47:49 +0000 (+0200) Subject: Allow specifying and writing sign language video language metadata (#2062). X-Git-Tag: v2.15.157 X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=6d716e405a0781c3d6cdc37d3718a8858faf3dd9 Allow specifying and writing sign language video language metadata (#2062). --- diff --git a/cscript b/cscript index 997ef90d8..a1684858a 100644 --- a/cscript +++ b/cscript @@ -388,8 +388,8 @@ def dependencies(target, options): # Use distro-provided FFmpeg on Arch deps = [] - deps.append(('libdcp', 'cc4445c')) - deps.append(('libsub', '0515e41')) + deps.append(('libdcp', '9bc5ced')) + deps.append(('libsub', '749c204')) deps.append(('leqm-nrt', '93ae9e6')) deps.append(('rtaudio', 'f619b76')) # We get our OpenSSL libraries from the environment, but we diff --git a/src/lib/film.cc b/src/lib/film.cc index 44c49220b..acfea9991 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -481,6 +481,9 @@ Film::metadata (bool with_content_paths) const if (_release_territory) { root->add_child("ReleaseTerritory")->add_child_text(_release_territory->subtag()); } + if (_sign_language_video_language) { + root->add_child("SignLanguageVideoLanguage")->add_child_text(_sign_language_video_language->to_string()); + } root->add_child("VersionNumber")->add_child_text(raw_convert(_version_number)); root->add_child("Status")->add_child_text(dcp::status_to_string(_status)); if (_chain) { @@ -662,6 +665,11 @@ Film::read_metadata (optional path) _release_territory = dcp::LanguageTag::RegionSubtag (*release_territory); } + auto sign_language_video_language = f.optional_string_child("SignLanguageVideoLanguage"); + if (sign_language_video_language) { + _sign_language_video_language = dcp::LanguageTag(*sign_language_video_language); + } + _version_number = f.optional_number_child("VersionNumber").get_value_or(0); auto status = f.optional_string_child("Status"); @@ -2145,3 +2153,18 @@ Film::set_audio_language (optional language) _audio_language = language; } + +bool +Film::has_sign_language_video_channel () const +{ + return _audio_channels >= static_cast(dcp::Channel::SIGN_LANGUAGE); +} + + +void +Film::set_sign_language_video_language (optional lang) +{ + FilmChangeSignaller ch (this, Property::SIGN_LANGUAGE_VIDEO_LANGUAGE); + _sign_language_video_language = lang; +} + diff --git a/src/lib/film.h b/src/lib/film.h index a2e0c8b60..85d06f64d 100644 --- a/src/lib/film.h +++ b/src/lib/film.h @@ -153,6 +153,8 @@ public: uint64_t required_disk_space () const; bool should_be_enough_disk_space (double& required, double& available, bool& can_hard_link) const; + bool has_sign_language_video_channel () const; + /* Proxies for some Playlist methods */ ContentList content () const; @@ -240,6 +242,7 @@ public: NAME_LANGUAGE, AUDIO_LANGUAGE, RELEASE_TERRITORY, + SIGN_LANGUAGE_VIDEO_LANGUAGE, VERSION_NUMBER, STATUS, CHAIN, @@ -356,6 +359,10 @@ public: return _release_territory; } + boost::optional sign_language_video_language () const { + return _sign_language_video_language; + } + int version_number () const { return _version_number; } @@ -434,6 +441,7 @@ public: void set_content_versions (std::vector v); void set_name_language (dcp::LanguageTag lang); void set_release_territory (boost::optional region = boost::none); + void set_sign_language_video_language (boost::optional tag); void set_version_number (int v); void set_status (dcp::Status s); void set_chain (boost::optional c = boost::none); @@ -542,6 +550,7 @@ private: std::vector _content_versions; dcp::LanguageTag _name_language; boost::optional _release_territory; + boost::optional _sign_language_video_language; int _version_number; dcp::Status _status; boost::optional _chain; diff --git a/src/lib/writer.cc b/src/lib/writer.cc index 6b8076875..66239c537 100644 --- a/src/lib/writer.cc +++ b/src/lib/writer.cc @@ -654,6 +654,9 @@ Writer::finish (boost::filesystem::path output_dcp) if (film()->luminance()) { cpl->set_luminance (*film()->luminance()); } + if (film()->sign_language_video_language()) { + cpl->set_sign_language_video_language (*film()->sign_language_video_language()); + } auto ac = film()->mapped_audio_channels(); dcp::MCASoundField field = ( diff --git a/src/wx/metadata_dialog.cc b/src/wx/metadata_dialog.cc index 6054e3abc..899118902 100644 --- a/src/wx/metadata_dialog.cc +++ b/src/wx/metadata_dialog.cc @@ -21,6 +21,7 @@ #include "dcpomatic_button.h" #include "full_language_tag_dialog.h" +#include "language_tag_widget.h" #include "metadata_dialog.h" #include "wx_util.h" #include "lib/film.h" @@ -73,6 +74,7 @@ MetadataDialog::setup () overall_sizer->Layout (); overall_sizer->SetSizeHints (this); + _sign_language_video_language->Changed.connect (boost::bind(&MetadataDialog::sign_language_video_language_changed, this)); _edit_release_territory->Bind (wxEVT_BUTTON, boost::bind(&MetadataDialog::edit_release_territory, this)); _enable_release_territory->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::enable_release_territory_changed, this)); _enable_facility->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::enable_facility_changed, this)); @@ -92,6 +94,7 @@ MetadataDialog::setup () _film_changed_connection = film()->Change.connect(boost::bind(&MetadataDialog::film_changed, this, _1, _2)); film_changed (ChangeType::DONE, Film::Property::RELEASE_TERRITORY); + film_changed (ChangeType::DONE, Film::Property::SIGN_LANGUAGE_VIDEO_LANGUAGE); film_changed (ChangeType::DONE, Film::Property::FACILITY); film_changed (ChangeType::DONE, Film::Property::STUDIO); film_changed (ChangeType::DONE, Film::Property::TEMP_VERSION); @@ -112,7 +115,9 @@ MetadataDialog::film_changed (ChangeType type, Film::Property property) return; } - if (property == Film::Property::RELEASE_TERRITORY) { + if (property == Film::Property::SIGN_LANGUAGE_VIDEO_LANGUAGE) { + _sign_language_video_language->set (film()->sign_language_video_language()); + } else if (property == Film::Property::RELEASE_TERRITORY) { auto rt = film()->release_territory(); checked_set (_enable_release_territory, static_cast(rt)); if (rt) { @@ -196,6 +201,7 @@ MetadataDialog::edit_release_territory () void MetadataDialog::setup_sensitivity () { + _sign_language_video_language->enable (film()->has_sign_language_video_channel()); auto const enabled = _enable_release_territory->GetValue(); _release_territory_text->Enable (enabled); _edit_release_territory->Enable (enabled); @@ -222,6 +228,10 @@ MetadataDialog::enable_release_territory_changed () void MetadataDialog::setup_advanced (wxPanel* panel, wxSizer* sizer) { + add_label_to_sizer (sizer, panel, _("Sign language video language"), true, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT); + _sign_language_video_language = new LanguageTagWidget (panel, _("Language used for any sign language video track"), {}, {}); + sizer->Add (_sign_language_video_language->sizer(), 1, wxEXPAND); + _enable_facility = new wxCheckBox (panel, wxID_ANY, _("Facility")); sizer->Add (_enable_facility, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL); _facility = new wxTextCtrl (panel, wxID_ANY); @@ -387,3 +397,10 @@ MetadataDialog::luminance_changed () film()->set_luminance (dcp::Luminance(_luminance_value->GetValue(), unit)); } + +void +MetadataDialog::sign_language_video_language_changed () +{ + film()->set_sign_language_video_language(_sign_language_video_language->get()); +} + diff --git a/src/wx/metadata_dialog.h b/src/wx/metadata_dialog.h index 7c4471e59..a6f5cefda 100644 --- a/src/wx/metadata_dialog.h +++ b/src/wx/metadata_dialog.h @@ -34,6 +34,7 @@ DCPOMATIC_ENABLE_WARNINGS class Button; class wxSpinCtrlDouble; +class LanguageTagWidget; class MetadataDialog : public wxDialog, public WeakFilm @@ -50,6 +51,7 @@ protected: virtual void setup_sensitivity (); private: + void sign_language_video_language_changed (); void edit_release_territory (); void enable_release_territory_changed (); void facility_changed (); @@ -73,6 +75,7 @@ private: boost::optional _release_territory; wxStaticText* _release_territory_text; Button* _edit_release_territory; + LanguageTagWidget* _sign_language_video_language = nullptr; wxCheckBox* _enable_facility; wxTextCtrl* _facility; wxCheckBox* _enable_chain;