X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fdcp_subtitle_decoder.cc;h=cbfe6fdbe29866302a1ee7218e55c4f4d1ed253b;hb=7b4d4a6c2bc3f5a0f9216fdb8d96bbe952aa49ee;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..cbfe6fdbe 100644 --- a/src/lib/dcp_subtitle_decoder.cc +++ b/src/lib/dcp_subtitle_decoder.cc @@ -41,16 +41,19 @@ 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; + if (dynamic_pointer_cast(asset)) { + _standard = dcp::Standard::INTEROP; + } else { + _standard = dcp::Standard::SMPTE; } - text.push_back (make_shared(this, content->only_text(), first)); + + text.push_back (make_shared(this, content->only_text())); + update_position(); } @@ -64,6 +67,8 @@ DCPSubtitleDecoder::seek (ContentTime time, bool accurate) while (i != _subtitles.end() && ContentTime::from_seconds ((*_next)->in().as_seconds()) < time) { ++i; } + + update_position(); } @@ -103,7 +108,10 @@ DCPSubtitleDecoder::pass () } } - only_text()->emit_plain (p, s); + only_text()->emit_plain(p, s, _standard); + + update_position(); + return false; } @@ -129,3 +137,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()) + ); + } +} +