Accept EmptyAssetPathError if it does not lead to anything worse.
[dcpomatic.git] / src / lib / player.cc
index 1a88505af71b76471c1befef2c046ae3a08cc78a..c88be58266251da86ecb85a91ea3d2e96b4426f7 100644 (file)
@@ -146,17 +146,13 @@ Player::setup_pieces_unlocked ()
        _shuffler = new Shuffler();
        _shuffler->Video.connect(bind(&Player::video, this, _1, _2));
 
-       cout << "SPU " << _playlist->content().size() << ".\n";
-
        BOOST_FOREACH (shared_ptr<Content> i, _playlist->content ()) {
 
                if (!i->paths_valid ()) {
-                       cout << "not valid.\n";
                        continue;
                }
 
                if (_ignore_video && _ignore_audio && i->text.empty()) {
-                       cout << "text only.\n";
                        /* We're only interested in text and this content has none */
                        continue;
                }
@@ -169,7 +165,6 @@ Player::setup_pieces_unlocked ()
                        }
                }
 
-               cout << " DF " << _tolerant << "\n";
                shared_ptr<Decoder> decoder = decoder_factory (_film, i, _fast, _tolerant, old_decoder);
                FrameRateChange frc (_film, i);
 
@@ -619,12 +614,12 @@ Player::pass ()
                which = CONTENT;
        }
 
-       if (!_black.done() && (!earliest_time || _black.position() < *earliest_time)) {
+       if (!_black.done() && !_ignore_video && (!earliest_time || _black.position() < *earliest_time)) {
                earliest_time = _black.position ();
                which = BLACK;
        }
 
-       if (!_silent.done() && (!earliest_time || _silent.position() < *earliest_time)) {
+       if (!_silent.done() && !_ignore_audio && (!earliest_time || _silent.position() < *earliest_time)) {
                earliest_time = _silent.position ();
                which = SILENT;
        }
@@ -653,8 +648,15 @@ Player::pass ()
                if (_last_audio_time) {
                        /* Sometimes the thing that happened last finishes fractionally before
                           or after this silence.  Bodge the start time of the silence to fix it.
+                          I think this is nothing to worry about since we will just add or
+                          remove a little silence at the end of some content.
                        */
-                       DCPOMATIC_ASSERT (labs(period.from.get() - _last_audio_time->get()) < 2);
+                       int64_t const error = labs(period.from.get() - _last_audio_time->get());
+                       int64_t const too_much_error = 4;
+                       if (error >= too_much_error) {
+                               _film->log()->log(String::compose("Silence starting before or after last audio by %1", error), LogEntry::TYPE_ERROR);
+                       }
+                       DCPOMATIC_ASSERT (error < too_much_error);
                        period.from = *_last_audio_time;
                }
                if (period.duration() > one_video_frame()) {