X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Flib%2Fdcp_subtitle_decoder.cc;h=fa92193a5a7f384022740a9dbb5fc7ee8e1c1861;hb=7c020de6dc47b75a3b589420b30b6768eb5c0106;hp=83faa1e93f19fbed0d3094b378ff1b97942e9cbd;hpb=5a820bb8fae34591be5ac6d19a73461b9dab532a;p=dcpomatic.git diff --git a/src/lib/dcp_subtitle_decoder.cc b/src/lib/dcp_subtitle_decoder.cc index 83faa1e93..fa92193a5 100644 --- a/src/lib/dcp_subtitle_decoder.cc +++ b/src/lib/dcp_subtitle_decoder.cc @@ -23,6 +23,7 @@ #include "dcp_subtitle_decoder.h" #include "font.h" #include "text_content.h" +#include "util.h" #include #include @@ -41,16 +42,15 @@ DCPSubtitleDecoder::DCPSubtitleDecoder (shared_ptr film, shared_ptr< : Decoder (film) { /* Load the XML or MXF file */ - auto const c = load (content->path(0)); - c->fix_empty_font_ids (); - _subtitles = c->subtitles (); + auto const asset = load (content->path(0)); + asset->fix_empty_font_ids (); + _subtitles = asset->subtitles (); _next = _subtitles.begin (); - ContentTime first; - if (_next != _subtitles.end()) { - first = content_time_period(*_next).from; - } - text.push_back (make_shared(this, content->only_text(), first)); + _subtitle_standard = asset->subtitle_standard(); + + text.push_back (make_shared(this, content->only_text())); + update_position(); } @@ -64,6 +64,8 @@ DCPSubtitleDecoder::seek (ContentTime time, bool accurate) while (i != _subtitles.end() && ContentTime::from_seconds ((*_next)->in().as_seconds()) < time) { ++i; } + + update_position(); } @@ -103,7 +105,10 @@ DCPSubtitleDecoder::pass () } } - only_text()->emit_plain (p, s); + only_text()->emit_plain(p, s, _subtitle_standard); + + update_position(); + return false; } @@ -129,3 +134,14 @@ DCPSubtitleDecoder::first () const return ContentTime::from_seconds(_subtitles[0]->in().as_seconds()); } + +void +DCPSubtitleDecoder::update_position() +{ + if (_next != _subtitles.end()) { + only_text()->maybe_set_position( + ContentTime::from_seconds((*_next)->in().as_seconds()) + ); + } +} +