Fix ignore/referencing logic.
authorCarl Hetherington <cth@carlh.net>
Wed, 7 Feb 2018 20:14:19 +0000 (20:14 +0000)
committerCarl Hetherington <cth@carlh.net>
Wed, 7 Feb 2018 20:14:19 +0000 (20:14 +0000)
src/lib/dcp_decoder.cc
src/lib/dcp_decoder.h
src/lib/decoder_part.h
src/lib/player.cc
src/wx/subtitle_view.cc

index 3379f8e90e427bf469cacb939608332cf7fc148c..14b791aa2a48a9ef60579c09d8ed02e4461c59ef 100644 (file)
@@ -77,14 +77,7 @@ DCPDecoder::DCPDecoder (shared_ptr<const DCPContent> c, shared_ptr<Log> log, boo
                cpl = cpls().front ();
        }
 
-       if (!_decode_referenced) {
-               if (c->reference_video()) {
-                       video->set_ignore();
-               }
-               if (c->reference_audio()) {
-                       audio->set_ignore();
-               }
-       }
+       set_decode_referenced (false);
 
        _reels = cpl->reels ();
 
@@ -93,6 +86,7 @@ DCPDecoder::DCPDecoder (shared_ptr<const DCPContent> c, shared_ptr<Log> log, boo
        get_readers ();
 }
 
+
 bool
 DCPDecoder::pass ()
 {
@@ -299,9 +293,12 @@ DCPDecoder::seek (ContentTime t, bool accurate)
 }
 
 void
-DCPDecoder::set_decode_referenced ()
+DCPDecoder::set_decode_referenced (bool r)
 {
-       _decode_referenced = true;
+       _decode_referenced = r;
+
+       video->set_ignore (_dcp_content->reference_video() && !_decode_referenced);
+       audio->set_ignore (_dcp_content->reference_audio() && !_decode_referenced);
 }
 
 void
index 7238f3bb200224af81da71dba1a3dbead5998212..483c057acf76121a849e2506ec2279a49da77142 100644 (file)
@@ -45,7 +45,7 @@ public:
                return _reels;
        }
 
-       void set_decode_referenced ();
+       void set_decode_referenced (bool r);
        void set_forced_reduction (boost::optional<int> reduction);
 
        bool pass ();
index a9568be8a6586a84b8d596c3f46795f2e89b0de5..1d0473fa5c87eeb538768432f6675a6cbc87a73b 100644 (file)
@@ -35,8 +35,8 @@ public:
 
        virtual ContentTime position () const = 0;
 
-       void set_ignore () {
-               _ignore = true;
+       void set_ignore (bool i) {
+               _ignore = i;
        }
 
        bool ignore () const {
index b011fffdc351702c6b6c0dbe14ec2bf0bdca29ba..0f20dc7ecbd81cf44aa056239de999caca719c83 100644 (file)
@@ -129,19 +129,19 @@ Player::setup_pieces ()
                }
 
                if (decoder->video && _ignore_video) {
-                       decoder->video->set_ignore ();
+                       decoder->video->set_ignore (true);
                }
 
                if (decoder->subtitle && _ignore_subtitle) {
-                       decoder->subtitle->set_ignore ();
+                       decoder->subtitle->set_ignore (true);
                }
 
                shared_ptr<DCPDecoder> dcp = dynamic_pointer_cast<DCPDecoder> (decoder);
-               if (dcp && _play_referenced) {
+               if (dcp) {
+                       dcp->set_decode_referenced (_play_referenced);
                        if (_play_referenced) {
-                               dcp->set_decode_referenced ();
+                               dcp->set_forced_reduction (_dcp_decode_reduction);
                        }
-                       dcp->set_forced_reduction (_dcp_decode_reduction);
                }
 
                shared_ptr<Piece> piece (new Piece (i, decoder, frc));
index bb336d16b19f79b8f83b5faf7ecc6a533e52b780..bf839137112bf14ff4ade339906ea56f6bba8a9d 100644 (file)
@@ -70,10 +70,10 @@ SubtitleView::SubtitleView (wxWindow* parent, shared_ptr<Film> film, shared_ptr<
        }
 
        if (decoder->video) {
-               decoder->video->set_ignore ();
+               decoder->video->set_ignore (true);
        }
        if (decoder->audio) {
-               decoder->audio->set_ignore ();
+               decoder->audio->set_ignore (true);
        }
 
        _subs = 0;