X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fsubrip_decoder.cc;h=c2bd4f3e0bd7dc8fa35167bc726447bca72958d2;hb=e60bb3e51bd1508b149e6b8f6608f09b5196ae26;hp=411e7542d26be7bddfd036f5a42c8144cef07e17;hpb=630a56ad9e7ecfb42b1d761098820f9e492f9c4e;p=dcpomatic.git diff --git a/src/lib/subrip_decoder.cc b/src/lib/subrip_decoder.cc index 411e7542d..c2bd4f3e0 100644 --- a/src/lib/subrip_decoder.cc +++ b/src/lib/subrip_decoder.cc @@ -23,7 +23,10 @@ using std::list; using std::vector; +using std::string; +using std::cout; using boost::shared_ptr; +using boost::optional; SubRipDecoder::SubRipDecoder (shared_ptr content) : SubtitleDecoder (content) @@ -37,9 +40,9 @@ void SubRipDecoder::seek (ContentTime time, bool accurate) { SubtitleDecoder::seek (time, accurate); - + _next = 0; - while (_next < _subtitles.size() && ContentTime::from_seconds (_subtitles[_next].from.metric().get().all_as_seconds ()) < time) { + while (_next < _subtitles.size() && ContentTime::from_seconds (_subtitles[_next].from.all_as_seconds ()) < time) { ++_next; } } @@ -52,24 +55,26 @@ SubRipDecoder::pass () } /* XXX: we are ignoring positioning specified in the file */ - + list out; for (list::const_iterator i = _subtitles[_next].lines.begin(); i != _subtitles[_next].lines.end(); ++i) { for (list::const_iterator j = i->blocks.begin(); j != i->blocks.end(); ++j) { out.push_back ( dcp::SubtitleString ( - "Arial", + SubRipContent::font_id, j->italic, - dcp::Color (255, 255, 255), - /* .srt files don't specify size, so this is an arbitrary value */ - 48, - dcp::Time (rint (_subtitles[_next].from.metric().get().all_as_milliseconds() / 4)), - dcp::Time (rint (_subtitles[_next].to.metric().get().all_as_milliseconds() / 4)), + dcp::Colour (255, 255, 255), + j->font_size.points (72 * 11), + 1.0, + dcp::Time (_subtitles[_next].from.all_as_seconds()), + dcp::Time (_subtitles[_next].to.all_as_seconds()), + 0, + dcp::HALIGN_CENTER, i->vertical_position.line.get() * (1.5 / 22) + 0.8, - dcp::TOP, + dcp::VALIGN_TOP, j->text, dcp::NONE, - dcp::Color (255, 255, 255), + dcp::Colour (255, 255, 255), 0, 0 ) @@ -83,7 +88,13 @@ SubRipDecoder::pass () } list -SubRipDecoder::subtitles_during (ContentTimePeriod p, bool starting) const +SubRipDecoder::image_subtitles_during (ContentTimePeriod, bool) const +{ + return list (); +} + +list +SubRipDecoder::text_subtitles_during (ContentTimePeriod p, bool starting) const { /* XXX: inefficient */ @@ -92,10 +103,10 @@ SubRipDecoder::subtitles_during (ContentTimePeriod p, bool starting) const for (vector::const_iterator i = _subtitles.begin(); i != _subtitles.end(); ++i) { ContentTimePeriod t ( - ContentTime::from_seconds (i->from.metric().get().all_as_seconds()), - ContentTime::from_seconds (i->to.metric().get().all_as_seconds()) + ContentTime::from_seconds (i->from.all_as_seconds()), + ContentTime::from_seconds (i->to.all_as_seconds()) ); - + if ((starting && p.contains (t.from)) || (!starting && p.overlaps (t))) { d.push_back (t); }