X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Fwx%2Ffilm_viewer.cc;h=cb9c85b3d2acf38b6738394c320403e54ba446d3;hp=f3250dbfa8f62c5901f036e995204922a5cb1ed2;hb=386e25f3b9d3fa59cbdeed458d9b3e0d21e338b8;hpb=046d84f45621f7e128cb30160a315f98881c6f4b diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc index f3250dbfa..cb9c85b3d 100644 --- a/src/wx/film_viewer.cc +++ b/src/wx/film_viewer.cc @@ -86,7 +86,6 @@ FilmViewer::FilmViewer (wxWindow* p) , _playing (false) , _suspended (0) , _latency_history_count (0) - , _dropped (0) , _closed_captions_dialog (new ClosedCaptionsDialog(p, this)) , _outline_content (false) , _eyes (EYES_LEFT) @@ -157,7 +156,6 @@ FilmViewer::set_film (shared_ptr film) _film = film; - _video_view->set_film (_film); _video_view->clear (); _closed_captions_dialog->clear (); @@ -184,6 +182,7 @@ FilmViewer::set_film (shared_ptr film) _player->set_play_referenced (); _film->Change.connect (boost::bind (&FilmViewer::film_change, this, _1, _2)); + _film->LengthChange.connect (boost::bind(&FilmViewer::film_length_change, this)); _player->Change.connect (boost::bind (&FilmViewer::player_change, this, _1, _2, _3)); /* Keep about 1 second's worth of history samples */ @@ -326,7 +325,6 @@ FilmViewer::start () _audio.startStream (); } - _dropped = 0; _playing = true; _video_view->start (); Started (position()); @@ -384,11 +382,23 @@ FilmViewer::player_change (ChangeType type, int property, bool frequent) void FilmViewer::film_change (ChangeType type, Film::Property p) { - if (type == CHANGE_TYPE_DONE && p == Film::AUDIO_CHANNELS) { + if (type != CHANGE_TYPE_DONE) { + return; + } + + if (p == Film::AUDIO_CHANNELS) { recreate_butler (); + } else if (p == Film::VIDEO_FRAME_RATE) { + _video_view->set_video_frame_rate (_film->video_frame_rate()); } } +void +FilmViewer::film_length_change () +{ + _video_view->set_length (_film->length()); +} + /** Re-get the current frame slowly by seeking */ void FilmViewer::slow_refresh () @@ -555,12 +565,7 @@ FilmViewer::audio_time () const DCPTime FilmViewer::time () const { - if (_audio.isStreamRunning ()) { - return DCPTime::from_seconds (const_cast(&_audio)->getStreamTime ()) - - DCPTime::from_frames (average_latency(), _film->audio_frame_rate()); - } - - return _video_view->position(); + return audio_time().get_value_or(_video_view->position()); } int @@ -649,3 +654,9 @@ FilmViewer::emit_finished () emit (boost::bind(boost::ref(Finished))); } +int +FilmViewer::dropped () const +{ + return _video_view->dropped (); +} +