X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fsubrip_decoder.cc;h=32d50d86b14e62ad44b0f28015799fea1ce1514b;hb=6708d52b5c2ff9ccb6ee99f3b793d791bb95f26b;hp=0ef747cf17a44c94d3ddff92e1017af66c0b2612;hpb=a5095486e606adfe36de635a48710cf98872c1c6;p=dcpomatic.git diff --git a/src/lib/subrip_decoder.cc b/src/lib/subrip_decoder.cc index 0ef747cf1..32d50d86b 100644 --- a/src/lib/subrip_decoder.cc +++ b/src/lib/subrip_decoder.cc @@ -20,10 +20,12 @@ #include #include "subrip_decoder.h" #include "subrip_content.h" +#include using std::list; using std::vector; using std::string; +using std::cout; using boost::shared_ptr; using boost::optional; @@ -39,9 +41,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; } } @@ -54,7 +56,7 @@ 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) { @@ -62,41 +64,46 @@ SubRipDecoder::pass () dcp::SubtitleString ( SubRipContent::font_id, j->italic, - dcp::Colour (255, 255, 255), + dcp::Colour (j->colour.r * 255, j->colour.g * 255, j->colour.b * 255), j->font_size.points (72 * 11), - dcp::Time (rint (_subtitles[_next].from.metric().get().all_as_milliseconds() / 4)), - dcp::Time (rint (_subtitles[_next].to.metric().get().all_as_milliseconds() / 4)), + 1.0, + dcp::Time (_subtitles[_next].from.all_as_seconds(), 1000), + dcp::Time (_subtitles[_next].to.all_as_seconds(), 1000), + 0, + dcp::HALIGN_CENTER, i->vertical_position.line.get() * (1.5 / 22) + 0.8, - dcp::TOP, + dcp::VALIGN_TOP, j->text, dcp::NONE, dcp::Colour (255, 255, 255), - 0, - 0 + dcp::Time (0, 1000), + dcp::Time (0, 1000) ) ); } } - text_subtitle (out); + text_subtitle (content_time_period (_subtitles[_next]), out); + ++_next; return false; } 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 */ list d; 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()) - ); - + ContentTimePeriod t = content_time_period (*i); if ((starting && p.contains (t.from)) || (!starting && p.overlaps (t))) { d.push_back (t); } @@ -104,3 +111,12 @@ SubRipDecoder::subtitles_during (ContentTimePeriod p, bool starting) const return d; } + +ContentTimePeriod +SubRipDecoder::content_time_period (sub::Subtitle s) const +{ + return ContentTimePeriod ( + ContentTime::from_seconds (s.from.all_as_seconds()), + ContentTime::from_seconds (s.to.all_as_seconds()) + ); +}