Add assert.
[dcpomatic.git] / src / wx / film_viewer.cc
index c1d04be03f05e5d9f4a88d6de7f85a13409e773f..17573b4388053fe1ea09539510d8632a7770cffa 100644 (file)
@@ -86,16 +86,12 @@ 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)
        , _pad_black (false)
 #ifdef DCPOMATIC_VARIANT_SWAROOP
        , _background_image (false)
 #endif
-       , _state_timer ("viewer")
-       , _gets (0)
        , _idle_get (false)
 {
        switch (Config::instance()->video_view_type()) {
@@ -163,7 +159,7 @@ FilmViewer::set_film (shared_ptr<Film> film)
        if (!_film) {
                _player.reset ();
                recreate_butler ();
-               refresh_view ();
+               _video_view->update ();
                return;
        }
 
@@ -226,25 +222,17 @@ FilmViewer::recreate_butler ()
        resume ();
 }
 
-void
-FilmViewer::refresh_view ()
-{
-       _state_timer.set ("update-view");
-       _video_view->update ();
-       _state_timer.unset ();
-}
-
 void
 FilmViewer::set_outline_content (bool o)
 {
        _outline_content = o;
-       refresh_view ();
+       _video_view->update ();
 }
 
 void
 FilmViewer::set_eyes (Eyes e)
 {
-       _eyes = e;
+       _video_view->set_eyes (e);
        slow_refresh ();
 }
 
@@ -298,6 +286,7 @@ FilmViewer::suspend ()
 void
 FilmViewer::resume ()
 {
+       DCPOMATIC_ASSERT (_suspended > 0);
        --_suspended;
        if (_playing && !_suspended) {
                if (_audio.isStreamOpen()) {
@@ -326,7 +315,6 @@ FilmViewer::start ()
                _audio.startStream ();
        }
 
-       _dropped = 0;
        _playing = true;
        _video_view->start ();
        Started (position());
@@ -347,6 +335,8 @@ FilmViewer::stop ()
        _playing = false;
        _video_view->stop ();
        Stopped (position());
+
+       _video_view->rethrow ();
        return true;
 }
 
@@ -392,6 +382,8 @@ FilmViewer::film_change (ChangeType type, Film::Property p)
                recreate_butler ();
        } else if (p == Film::VIDEO_FRAME_RATE) {
                _video_view->set_video_frame_rate (_film->video_frame_rate());
+       } else if (p == Film::THREE_D) {
+               _video_view->set_three_d (_film->three_d());
        }
 }
 
@@ -415,16 +407,10 @@ FilmViewer::slow_refresh ()
 bool
 FilmViewer::quick_refresh ()
 {
-       if (!_video_view->_player_video.first) {
-               return false;
-       }
-
-       if (!_video_view->_player_video.first->reset_metadata (_film, _player->video_container_size(), _film->frame_size())) {
-               return false;
+       if (!_video_view || !_film) {
+               return true;
        }
-
-       _video_view->display_player_video ();
-       return true;
+       return _video_view->refresh_metadata (_film, _player->video_container_size(), _film->frame_size());
 }
 
 void
@@ -483,7 +469,7 @@ FilmViewer::config_changed (Config::Property p)
 {
 #ifdef DCPOMATIC_VARIANT_SWAROOP
        if (p == Config::PLAYER_BACKGROUND_IMAGE) {
-               refresh_view ();
+               _video_view->update ();
                return;
        }
 #endif
@@ -649,10 +635,33 @@ FilmViewer::set_pad_black (bool p)
        _pad_black = p;
 }
 
-/* May be called from a non-UI thread */
+/** Called when a player has finished the current film.
+ *  May be called from a non-UI thread.
+ */
+void
+FilmViewer::finished ()
+{
+       emit (boost::bind(&FilmViewer::ui_finished, this));
+}
+
+/** Called by finished() in the UI thread */
 void
-FilmViewer::emit_finished ()
+FilmViewer::ui_finished ()
+{
+       stop ();
+       Finished ();
+}
+
+int
+FilmViewer::dropped () const
 {
-       emit (boost::bind(boost::ref(Finished)));
+       return _video_view->dropped ();
 }
 
+int
+FilmViewer::gets () const
+{
+       return _video_view->gets ();
+}
+
+