summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2019-10-20 22:49:07 +0200
committerCarl Hetherington <cth@carlh.net>2020-01-08 21:56:47 +0100
commit7c33cdd95a23ff784c0e0731a9d1444ce9bb8f09 (patch)
tree8d68307a5480a152627952dfef4d73ce4bb0af1f /src
parentff64d7f42884bb21e61c5f5b242c41415a5934b1 (diff)
Move FilmViewer::get() into SimpleVideoView.
Diffstat (limited to 'src')
-rw-r--r--src/wx/film_viewer.cc45
-rw-r--r--src/wx/film_viewer.h1
-rw-r--r--src/wx/simple_video_view.cc45
-rw-r--r--src/wx/simple_video_view.h1
-rw-r--r--src/wx/video_view.h5
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<const Image> _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<void()> Sized;
+ /* XXX_b: to remove */
+ virtual bool get (bool) {
+ return true;
+ }
+
protected:
FilmViewer* _viewer;