Reinstate subtitle speed-up patch 526fd6de4c80a7ac9614a1cb0209efff7b171cd5 but only...
[dcpomatic.git] / src / lib / dcp_decoder.cc
index 2bdf6a8e98547840c268a6ff748fdb81ae3e24c8..04fffb9816f9642eb22a2bea1e09fb2adfbdfbb1 100644 (file)
@@ -35,6 +35,7 @@
 #include <dcp/stereo_picture_frame.h>
 #include <dcp/sound_frame.h>
 #include <boost/foreach.hpp>
+#include <iostream>
 
 using std::list;
 using std::cout;
@@ -58,7 +59,7 @@ DCPDecoder::DCPDecoder (shared_ptr<const DCPContent> c, bool fast)
 }
 
 bool
-DCPDecoder::pass ()
+DCPDecoder::pass (PassReason reason, bool)
 {
        if (_reel == _reels.end () || !_dcp_content->can_be_played ()) {
                return true;
@@ -67,7 +68,7 @@ DCPDecoder::pass ()
        double const vfr = _dcp_content->video_frame_rate ();
        int64_t const frame = _next.frames_round (vfr);
 
-       if ((*_reel)->main_picture ()) {
+       if ((*_reel)->main_picture () && reason != PASS_REASON_SUBTITLE) {
                shared_ptr<dcp::PictureAsset> asset = (*_reel)->main_picture()->asset ();
                shared_ptr<dcp::MonoPictureAsset> mono = dynamic_pointer_cast<dcp::MonoPictureAsset> (asset);
                shared_ptr<dcp::StereoPictureAsset> stereo = dynamic_pointer_cast<dcp::StereoPictureAsset> (asset);
@@ -87,7 +88,7 @@ DCPDecoder::pass ()
                }
        }
 
-       if ((*_reel)->main_sound ()) {
+       if ((*_reel)->main_sound () && reason != PASS_REASON_SUBTITLE) {
                int64_t const entry_point = (*_reel)->main_sound()->entry_point ();
                shared_ptr<const dcp::SoundFrame> sf = (*_reel)->main_sound()->asset()->get_frame (entry_point + frame);
                uint8_t const * from = sf->data ();
@@ -175,8 +176,8 @@ DCPDecoder::text_subtitles_during (ContentTimePeriod period, bool starting) cons
                int64_t const entry_point = r->main_subtitle()->entry_point ();
 
                list<dcp::SubtitleString> subs = r->main_subtitle()->subtitle_asset()->subtitles_during (
-                       dcp::Time (period.from.seconds ()) - dcp::Time (entry_point, vfr, vfr),
-                       dcp::Time (period.to.seconds ()) - dcp::Time (entry_point, vfr, vfr),
+                       dcp::Time (period.from.seconds(), 1000) - dcp::Time (entry_point, vfr, vfr),
+                       dcp::Time (period.to.seconds(), 1000) - dcp::Time (entry_point, vfr, vfr),
                        starting
                        );