Don't read video/audio from DCPs if it is being ignored (#2456).
[dcpomatic.git] / src / lib / dcp_decoder.cc
index ad7d3e11277910fb62eb27611f0472a6ed97a94c..0f4e1afa1fadb2ff535294e3ca014d672466fbd3 100644 (file)
@@ -303,12 +303,15 @@ DCPDecoder::pass_texts (
                                                        ContentTime::from_frames(_offset - entry_point, vfr) + ContentTime::from_seconds(b.in().as_seconds()),
                                                        ContentTime::from_frames(_offset - entry_point, vfr) + ContentTime::from_seconds(b.out().as_seconds())
                                                        ),
-                                               strings
+                                               strings,
+                                               _dcp_content->standard()
                                                );
                                        strings.clear ();
                                }
 
-                               strings.push_back (*is);
+                               dcp::SubtitleString is_copy = *is;
+                               is_copy.set_font(id_for_font_in_reel(is_copy.font().get_value_or(""), _reel - _reels.begin()));
+                               strings.push_back(is_copy);
                        }
 
                        /* XXX: perhaps these image subs should also be collected together like the string ones are;
@@ -336,7 +339,8 @@ DCPDecoder::pass_texts (
                                        ContentTime::from_frames(_offset - entry_point, vfr) + ContentTime::from_seconds(b.in().as_seconds()),
                                        ContentTime::from_frames(_offset - entry_point, vfr) + ContentTime::from_seconds(b.out().as_seconds())
                                        ),
-                               strings
+                               strings,
+                               _dcp_content->standard()
                                );
                        strings.clear ();
                }
@@ -364,7 +368,7 @@ DCPDecoder::get_readers ()
                return;
        }
 
-       if ((*_reel)->main_picture()) {
+       if (!video->ignore() && (*_reel)->main_picture()) {
                auto asset = (*_reel)->main_picture()->asset ();
                auto mono = dynamic_pointer_cast<dcp::MonoPictureAsset> (asset);
                auto stereo = dynamic_pointer_cast<dcp::StereoPictureAsset> (asset);
@@ -383,7 +387,7 @@ DCPDecoder::get_readers ()
                _stereo_reader.reset ();
        }
 
-       if ((*_reel)->main_sound()) {
+       if (!audio->ignore() && (*_reel)->main_sound()) {
                _sound_reader = (*_reel)->main_sound()->asset()->start_read ();
                _sound_reader->set_check_hmac (false);
        } else {