diff options
| author | Carl Hetherington <cth@carlh.net> | 2021-03-30 01:25:31 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2021-03-31 22:51:05 +0200 |
| commit | 2791e094c143e0704ce8935fe5a19508429cf062 (patch) | |
| tree | c6249be8d28e8eb27be04820f93f585807436aaf /src/lib | |
| parent | e0a70cd5cfb11fc2de167f3146acdd437a6faa82 (diff) | |
Add burnt subtitle language to video content.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/film.cc | 3 | ||||
| -rw-r--r-- | src/lib/video_content.cc | 27 | ||||
| -rw-r--r-- | src/lib/video_content.h | 22 |
3 files changed, 49 insertions, 3 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc index 763af8f8a..945559a49 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -766,6 +766,9 @@ Film::subtitle_languages () const } } } + if (i->video && i->video->burnt_subtitle_language()) { + result.first = i->video->burnt_subtitle_language(); + } } std::sort (result.second.begin(), result.second.end()); diff --git a/src/lib/video_content.cc b/src/lib/video_content.cc index fed28b5e4..5686a0a6f 100644 --- a/src/lib/video_content.cc +++ b/src/lib/video_content.cc @@ -50,6 +50,7 @@ int const VideoContentProperty::FADE_OUT = 7; int const VideoContentProperty::RANGE = 8; int const VideoContentProperty::CUSTOM_RATIO = 9; int const VideoContentProperty::CUSTOM_SIZE = 10; +int const VideoContentProperty::BURNT_SUBTITLE_LANGUAGE = 11; using std::string; using std::setprecision; @@ -183,8 +184,15 @@ VideoContent::VideoContent (Content* parent, cxml::ConstNodePtr node, int versio if (node->optional_string_child("Range").get_value_or("full") == "video") { _range = VideoRange::VIDEO; } + + auto burnt = node->optional_string_child("BurntSubtitleLanguage"); + if (burnt) { + _burnt_subtitle_language = dcp::LanguageTag (*burnt); + } + } + VideoContent::VideoContent (Content* parent, vector<shared_ptr<Content> > c) : ContentPart (parent) , _length (0) @@ -227,6 +235,10 @@ VideoContent::VideoContent (Content* parent, vector<shared_ptr<Content> > c) throw JoinError (_("Content to be joined must have the same fades.")); } + if (c[i]->video->burnt_subtitle_language() != ref->burnt_subtitle_language()) { + throw JoinError (_("Content to be joined must have the same burnt subtitle language.")); + } + _length += c[i]->video->length (); if (c[i]->video->yuv ()) { @@ -243,8 +255,10 @@ VideoContent::VideoContent (Content* parent, vector<shared_ptr<Content> > c) _fade_in = ref->fade_in (); _fade_out = ref->fade_out (); _range = ref->range (); + _burnt_subtitle_language = ref->burnt_subtitle_language (); } + void VideoContent::as_xml (xmlpp::Node* node) const { @@ -272,6 +286,9 @@ VideoContent::as_xml (xmlpp::Node* node) const node->add_child("FadeIn")->add_child_text (raw_convert<string> (_fade_in)); node->add_child("FadeOut")->add_child_text (raw_convert<string> (_fade_out)); node->add_child("Range")->add_child_text(_range == VideoRange::FULL ? "full" : "video"); + if (_burnt_subtitle_language) { + node->add_child("BurntSubtitleLanguage")->add_child_text(_burnt_subtitle_language->to_string()); + } } void @@ -556,6 +573,14 @@ VideoContent::set_use (bool u) maybe_set (_use, u, VideoContentProperty::USE); } + +void +VideoContent::set_burnt_subtitle_language (boost::optional<dcp::LanguageTag> language) +{ + maybe_set (_burnt_subtitle_language, language, VideoContentProperty::BURNT_SUBTITLE_LANGUAGE); +} + + void VideoContent::take_settings_from (shared_ptr<const VideoContent> c) { @@ -574,8 +599,10 @@ VideoContent::take_settings_from (shared_ptr<const VideoContent> c) set_custom_size (c->_custom_size); set_fade_in (c->_fade_in); set_fade_out (c->_fade_out); + set_burnt_subtitle_language (c->_burnt_subtitle_language); } + void VideoContent::modify_position (shared_ptr<const Film> film, DCPTime& pos) const { diff --git a/src/lib/video_content.h b/src/lib/video_content.h index 22a6090e7..4e9e5815f 100644 --- a/src/lib/video_content.h +++ b/src/lib/video_content.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2013-2020 Carl Hetherington <cth@carlh.net> + Copyright (C) 2013-2021 Carl Hetherington <cth@carlh.net> This file is part of DCP-o-matic. @@ -18,21 +18,26 @@ */ + #ifndef DCPOMATIC_VIDEO_CONTENT_H #define DCPOMATIC_VIDEO_CONTENT_H + #include "colour_conversion.h" +#include "content_part.h" #include "dcpomatic_time.h" -#include "user_property.h" #include "types.h" -#include "content_part.h" +#include "user_property.h" +#include <dcp/language_tag.h> #include <boost/thread/mutex.hpp> + class VideoExaminer; class Ratio; class Film; class Content; + class VideoContentProperty { public: @@ -47,8 +52,10 @@ public: static int const RANGE; static int const CUSTOM_RATIO; static int const CUSTOM_SIZE; + static int const BURNT_SUBTITLE_LANGUAGE; }; + class VideoContent : public ContentPart, public std::enable_shared_from_this<VideoContent> { public: @@ -99,6 +106,8 @@ public: void set_range (VideoRange); void set_use (bool); + void set_burnt_subtitle_language (boost::optional<dcp::LanguageTag> language); + VideoFrameType frame_type () const { boost::mutex::scoped_lock lm (_mutex); return _frame_type; @@ -177,6 +186,12 @@ public: return _use; } + boost::optional<dcp::LanguageTag> burnt_subtitle_language () const { + boost::mutex::scoped_lock lm (_mutex); + return _burnt_subtitle_language; + } + + /* XXX: names for these? */ dcp::Size size_after_3d_split () const; dcp::Size size_after_crop () const; @@ -231,6 +246,7 @@ private: /** fade out time in content frames */ Frame _fade_out; VideoRange _range; + boost::optional<dcp::LanguageTag> _burnt_subtitle_language; }; #endif |
