Fix handling of incorrectly-recognised JPEG2000 files.
[dcpomatic.git] / src / lib / player.cc
index f22a6480f224f678dc803b08fdd9844e647e9b1a..0360858cb2b19a2030b7c4d514a718c14cf3ebf8 100644 (file)
@@ -123,7 +123,7 @@ Player::setup_pieces ()
                        continue;
                }
 
-               shared_ptr<Decoder> decoder = decoder_factory (i, _film->log(), _fast);
+               shared_ptr<Decoder> decoder = decoder_factory (i, _film->log());
                FrameRateChange frc (i->active_video_frame_rate(), _film->video_frame_rate());
 
                if (!decoder) {
@@ -139,6 +139,15 @@ Player::setup_pieces ()
                        decoder->audio->set_ignore ();
                }
 
+               if (decoder->audio && _fast) {
+                       decoder->audio->set_fast ();
+               }
+
+               shared_ptr<DCPDecoder> dcp = dynamic_pointer_cast<DCPDecoder> (decoder);
+               if (dcp && _play_referenced) {
+                       dcp->set_decode_referenced ();
+               }
+
                _pieces.push_back (shared_ptr<Piece> (new Piece (i, decoder, frc)));
        }
 
@@ -164,7 +173,8 @@ Player::playlist_content_changed (weak_ptr<Content> w, int property, bool freque
                property == SubtitleContentProperty::COLOUR ||
                property == SubtitleContentProperty::OUTLINE ||
                property == SubtitleContentProperty::OUTLINE_COLOUR ||
-               property == FFmpegContentProperty::SUBTITLE_STREAM
+               property == FFmpegContentProperty::SUBTITLE_STREAM ||
+               property == VideoContentProperty::COLOUR_CONVERSION
                ) {
 
                _have_valid_pieces = false;
@@ -181,8 +191,7 @@ Player::playlist_content_changed (weak_ptr<Content> w, int property, bool freque
                property == VideoContentProperty::CROP ||
                property == VideoContentProperty::SCALE ||
                property == VideoContentProperty::FADE_IN ||
-               property == VideoContentProperty::FADE_OUT ||
-               property == VideoContentProperty::COLOUR_CONVERSION
+               property == VideoContentProperty::FADE_OUT
                ) {
 
                Changed (frequent);
@@ -374,12 +383,12 @@ Player::get_video (DCPTime time, bool accurate)
                                                        shared_ptr<PlayerVideo> (
                                                                new PlayerVideo (
                                                                        i->image,
-                                                                       content_video_to_dcp (piece, i->frame),
+                                                                       time,
                                                                        piece->content->video->crop (),
-                                                                       piece->content->video->fade (i->frame),
+                                                                       piece->content->video->fade (i->frame.index()),
                                                                        image_size,
                                                                        _video_container_size,
-                                                                       i->eyes,
+                                                                       i->frame.eyes(),
                                                                        i->part,
                                                                        piece->content->video->colour_conversion ()
                                                                        )
@@ -706,7 +715,7 @@ Player::get_reel_assets ()
 
                scoped_ptr<DCPDecoder> decoder;
                try {
-                       decoder.reset (new DCPDecoder (j, _film->log(), false));
+                       decoder.reset (new DCPDecoder (j, _film->log()));
                } catch (...) {
                        return a;
                }