X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fdcp_subtitle_decoder.cc;h=1c6b973d683913722e4b6cecb2570bed205b0f21;hb=1858190cff2f960f3d1f0a5cc02c69da86088f5b;hp=bb2537fc4181368e4ca53390513f18941a9f58e0;hpb=318a778b1b5c98b79b202dc953ff2ac131371a1b;p=dcpomatic.git diff --git a/src/lib/dcp_subtitle_decoder.cc b/src/lib/dcp_subtitle_decoder.cc index bb2537fc4..1c6b973d6 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; @@ -52,10 +53,22 @@ DCPSubtitleDecoder::pass () 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; }