X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fdcp_subtitle_decoder.cc;h=1bcc7fcf17844926eb217095ecc559b7cfab4fbe;hb=512c92e2600a30ebf0ed0f7bcdce77f53d2e72ac;hp=bb2537fc4181368e4ca53390513f18941a9f58e0;hpb=c8ff422a42eac30517a7acde57ab84e55449f4e4;p=dcpomatic.git diff --git a/src/lib/dcp_subtitle_decoder.cc b/src/lib/dcp_subtitle_decoder.cc index bb2537fc4..1bcc7fcf1 100644 --- a/src/lib/dcp_subtitle_decoder.cc +++ b/src/lib/dcp_subtitle_decoder.cc @@ -20,6 +20,7 @@ #include "dcp_subtitle_decoder.h" #include "dcp_subtitle_content.h" #include +#include using std::list; using std::cout; @@ -46,16 +47,28 @@ DCPSubtitleDecoder::seek (ContentTime time, bool accurate) } bool -DCPSubtitleDecoder::pass () +DCPSubtitleDecoder::pass (PassReason, bool) { if (_next == _subtitles.end ()) { return true; } + /* Gather all subtitles with the same time period that are next + on the list. We must emit all subtitles for the same time + period with the same text_subtitle() call otherwise the + SubtitleDecoder will assume there is nothing else at the + time of emit the first. + */ + list s; - s.push_back (*_next); - text_subtitle (content_time_period (*_next), s); - ++_next; + ContentTimePeriod const p = content_time_period (*_next); + + while (_next != _subtitles.end () && content_time_period (*_next) == p) { + s.push_back (*_next); + ++_next; + } + + text_subtitle (p, s); return false; }