X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Ffilm_viewer.cc;h=d954e1818a59a7b89cb5b20b1c133267661595c3;hb=2a0ad7979b208f84916b13f7a37998aa3701e371;hp=0e0fc4315ad7a58ff339d32c8cf4df4590718952;hpb=1fe6bd7f8ba059322b8357b2210f0fd590567ce2;p=dcpomatic.git diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc index 0e0fc4315..d954e1818 100644 --- a/src/wx/film_viewer.cc +++ b/src/wx/film_viewer.cc @@ -224,8 +224,8 @@ FilmViewer::set_film (shared_ptr film) _player->set_always_burn_open_subtitles (); _player->set_play_referenced (); - _film->Changed.connect (boost::bind (&FilmViewer::film_changed, this, _1)); - _player->Changed.connect (boost::bind (&FilmViewer::player_changed, this, _1, _2)); + _film->Change.connect (boost::bind (&FilmViewer::film_change, this, _1, _2)); + _player->Change.connect (boost::bind (&FilmViewer::player_change, this, _1, _2, _3)); /* Keep about 1 second's worth of history samples */ _latency_history_count = _film->audio_frame_rate() / _audio_block_size; @@ -294,8 +294,14 @@ FilmViewer::get () DCPOMATIC_ASSERT (_butler); do { - _player_video = _butler->get_video (); + Butler::Error e; + _player_video = _butler->get_video (&e); + if (!_player_video.first && e == Butler::AGAIN) { + signal_manager->when_idle (boost::bind(&FilmViewer::get, this)); + return; + } } while ( + _player_video.first && _film->three_d() && ((_eye->GetSelection() == 0 && _player_video.first->eyes() == EYES_RIGHT) || (_eye->GetSelection() == 1 && _player_video.first->eyes() == EYES_LEFT)) ); @@ -665,9 +671,9 @@ FilmViewer::forward_clicked (wxKeyboardState& ev) } void -FilmViewer::player_changed (int property, bool frequent) +FilmViewer::player_change (ChangeType type, int property, bool frequent) { - if (frequent) { + if (type != CHANGE_TYPE_DONE || frequent) { return; } @@ -720,8 +726,12 @@ FilmViewer::setup_sensitivity () } void -FilmViewer::film_changed (Film::Property p) +FilmViewer::film_change (ChangeType type, Film::Property p) { + if (type != CHANGE_TYPE_DONE) { + return; + } + if (p == Film::CONTENT || p == Film::THREE_D) { setup_sensitivity (); } else if (p == Film::AUDIO_CHANNELS) { @@ -780,7 +790,7 @@ FilmViewer::set_coalesce_player_changes (bool c) if (!c) { BOOST_FOREACH (int i, _pending_player_changes) { - player_changed (i, false); + player_change (CHANGE_TYPE_DONE, i, false); } _pending_player_changes.clear (); }