From 7c33cdd95a23ff784c0e0731a9d1444ce9bb8f09 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sun, 20 Oct 2019 22:49:07 +0200 Subject: [PATCH] Move FilmViewer::get() into SimpleVideoView. --- src/wx/film_viewer.cc | 45 +------------------------------------ src/wx/film_viewer.h | 1 - src/wx/simple_video_view.cc | 45 ++++++++++++++++++++++++++++++++++++- src/wx/simple_video_view.h | 1 + src/wx/video_view.h | 5 +++++ 5 files changed, 51 insertions(+), 46 deletions(-) diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc index be555ad91..0b6fcd7b3 100644 --- a/src/wx/film_viewer.cc +++ b/src/wx/film_viewer.cc @@ -140,7 +140,7 @@ FilmViewer::idle_handler () return; } - if (get(true)) { + if (_video_view->get(true)) { _idle_get = false; } else { /* get() could not complete quickly so we'll try again later */ @@ -236,49 +236,6 @@ FilmViewer::refresh_view () _state_timer.unset (); } -/** Try to get a frame from the butler and display it. - * @param lazy true to return false quickly if no video is available quickly (i.e. we are waiting for the butler). - * false to ask the butler to block until it has video (unless it is suspended). - * @return true on success, false if we did nothing because it would have taken too long. - */ -bool -FilmViewer::get (bool lazy) -{ - DCPOMATIC_ASSERT (_butler); - ++_gets; - - do { - Butler::Error e; - _player_video = _butler->get_video (!lazy, &e); - if (!_player_video.first && e == Butler::AGAIN) { - if (lazy) { - /* No video available; return saying we failed */ - return false; - } else { - /* Player was suspended; come back later */ - signal_manager->when_idle (boost::bind(&FilmViewer::get, this, false)); - return false; - } - } - } while ( - _player_video.first && - _film->three_d() && - _eyes != _player_video.first->eyes() && - _player_video.first->eyes() != EYES_BOTH - ); - - try { - _butler->rethrow (); - } catch (DecodeError& e) { - error_dialog (_video_view->get(), e.what()); - } - - display_player_video (); - PositionChanged (); - - return true; -} - void FilmViewer::display_player_video () { diff --git a/src/wx/film_viewer.h b/src/wx/film_viewer.h index d0041bd95..077d8a6a5 100644 --- a/src/wx/film_viewer.h +++ b/src/wx/film_viewer.h @@ -153,7 +153,6 @@ private: void video_view_sized (); void calculate_sizes (); void player_change (ChangeType type, int, bool); - bool get (bool lazy); void idle_handler (); void request_idle_get (); void display_player_video (); diff --git a/src/wx/simple_video_view.cc b/src/wx/simple_video_view.cc index 37daecda2..7d2080003 100644 --- a/src/wx/simple_video_view.cc +++ b/src/wx/simple_video_view.cc @@ -147,7 +147,7 @@ SimpleVideoView::timer () return; } - _viewer->get (false); + get (false); DCPTime const next = _viewer->position() + _viewer->one_video_frame(); if (next >= _viewer->film()->length()) { @@ -169,3 +169,46 @@ SimpleVideoView::start () { timer (); } + +/** Try to get a frame from the butler and display it. + * @param lazy true to return false quickly if no video is available quickly (i.e. we are waiting for the butler). + * false to ask the butler to block until it has video (unless it is suspended). + * @return true on success, false if we did nothing because it would have taken too long. + */ +bool +SimpleVideoView::get (bool lazy) +{ + DCPOMATIC_ASSERT (_viewer->_butler); + _viewer->_gets++; + + do { + Butler::Error e; + _viewer->_player_video = _viewer->_butler->get_video (!lazy, &e); + if (!_viewer->_player_video.first && e == Butler::AGAIN) { + if (lazy) { + /* No video available; return saying we failed */ + return false; + } else { + /* Player was suspended; come back later */ + signal_manager->when_idle (boost::bind(&SimpleVideoView::get, this, false)); + return false; + } + } + } while ( + _viewer->_player_video.first && + _viewer->film()->three_d() && + _viewer->_eyes != _viewer->_player_video.first->eyes() && + _viewer->_player_video.first->eyes() != EYES_BOTH + ); + + try { + _viewer->_butler->rethrow (); + } catch (DecodeError& e) { + error_dialog (get(), e.what()); + } + + _viewer->display_player_video (); + _viewer->PositionChanged (); + + return true; +} diff --git a/src/wx/simple_video_view.h b/src/wx/simple_video_view.h index 798356cee..d27141652 100644 --- a/src/wx/simple_video_view.h +++ b/src/wx/simple_video_view.h @@ -43,6 +43,7 @@ public: private: void paint (); void timer (); + bool get (bool lazy); wxPanel* _panel; boost::shared_ptr _image; diff --git a/src/wx/video_view.h b/src/wx/video_view.h index dda18058d..80d6a50fc 100644 --- a/src/wx/video_view.h +++ b/src/wx/video_view.h @@ -49,6 +49,11 @@ public: boost::signals2::signal Sized; + /* XXX_b: to remove */ + virtual bool get (bool) { + return true; + } + protected: FilmViewer* _viewer; -- 2.30.2