std::shared_ptr
[dcpomatic.git] / src / wx / film_viewer.cc
index ee0322d6f0450a6a11dc97ddd30614fe0901219b..cc25ccdd5fbbd152f74d9ff6fecf087bcbb2a08f 100644 (file)
@@ -65,9 +65,9 @@ using std::list;
 using std::bad_alloc;
 using std::make_pair;
 using std::exception;
-using boost::shared_ptr;
-using boost::dynamic_pointer_cast;
-using boost::weak_ptr;
+using std::shared_ptr;
+using std::dynamic_pointer_cast;
+using std::weak_ptr;
 using boost::optional;
 #if BOOST_VERSION >= 106100
 using namespace boost::placeholders;
@@ -137,11 +137,11 @@ FilmViewer::idle_handler ()
                return;
        }
 
-       if (_video_view->display_next_frame(true)) {
-               _idle_get = false;
-       } else {
+       if (_video_view->display_next_frame(true) == VideoView::AGAIN) {
                /* get() could not complete quickly so we'll try again later */
                signal_manager->when_idle (boost::bind(&FilmViewer::idle_handler, this));
+       } else {
+               _idle_get = false;
        }
 }
 
@@ -212,6 +212,7 @@ FilmViewer::recreate_butler ()
 
        _butler.reset(
                new Butler(
+                       _film,
                        _player,
                        Config::instance()->audio_mapping(_audio_channels),
                        _audio_channels,
@@ -345,8 +346,11 @@ FilmViewer::start ()
        }
 
        _playing = true;
-       _video_view->start ();
+       /* Calling start() below may directly result in Stopped being emitted, and if that
+        * happens we want it to come after the Started signal, so do that first.
+        */
        Started (position());
+       _video_view->start ();
 }
 
 bool
@@ -441,7 +445,7 @@ FilmViewer::quick_refresh ()
        if (!_video_view || !_film || !_player) {
                return true;
        }
-       return _video_view->refresh_metadata (_film, _player->video_container_size(), _film->frame_size());
+       return _video_view->reset_metadata (_film, _player->video_container_size());
 }
 
 void
@@ -495,7 +499,7 @@ FilmViewer::seek (DCPTime t, bool accurate)
                /* We're going to start playing again straight away
                   so wait for the seek to finish.
                */
-               while (!_video_view->display_next_frame(false)) {}
+               while (_video_view->display_next_frame(false) == VideoView::AGAIN) {}
        }
 
        resume ();