Use enum class for VideoRange.
[dcpomatic.git] / src / wx / film_viewer.cc
index 5f609856fbf6afcca3a02545f172c514f12a8382..e8c3b8c71363292bccd5cbd8c1dea57bf26f0990 100644 (file)
@@ -65,10 +65,13 @@ 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;
+#endif
 using dcp::Size;
 using namespace dcpomatic;
 
@@ -90,9 +93,6 @@ FilmViewer::FilmViewer (wxWindow* p)
        , _closed_captions_dialog (new ClosedCaptionsDialog(p, this))
        , _outline_content (false)
        , _pad_black (false)
-#ifdef DCPOMATIC_VARIANT_SWAROOP
-       , _background_image (false)
-#endif
        , _idle_get (false)
 {
        switch (Config::instance()->video_view_type()) {
@@ -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,10 +212,12 @@ FilmViewer::recreate_butler ()
 
        _butler.reset(
                new Butler(
+                       _film,
                        _player,
                        Config::instance()->audio_mapping(_audio_channels),
                        _audio_channels,
                        bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24),
+                       VideoRange::FULL,
                        false,
                        true
                        )
@@ -344,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
@@ -440,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
@@ -458,7 +463,7 @@ FilmViewer::set_coalesce_player_changes (bool c)
        _coalesce_player_changes = c;
 
        if (!c) {
-               BOOST_FOREACH (int i, _pending_player_changes) {
+               for (auto i: _pending_player_changes) {
                        player_change (CHANGE_TYPE_DONE, i, false);
                }
                _pending_player_changes.clear ();
@@ -494,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 ();
@@ -503,13 +508,6 @@ FilmViewer::seek (DCPTime t, bool accurate)
 void
 FilmViewer::config_changed (Config::Property p)
 {
-#ifdef DCPOMATIC_VARIANT_SWAROOP
-       if (p == Config::PLAYER_BACKGROUND_IMAGE) {
-               _video_view->update ();
-               return;
-       }
-#endif
-
        if (p == Config::AUDIO_MAPPING) {
                recreate_butler ();
                return;
@@ -550,11 +548,7 @@ FilmViewer::config_changed (Config::Property p)
                        sp.nChannels = _audio_channels;
                        sp.firstChannel = 0;
                        _audio.openStream (&sp, 0, RTAUDIO_FLOAT32, 48000, &_audio_block_size, &rtaudio_callback, this);
-#ifdef DCPOMATIC_USE_RTERROR
-               } catch (RtError& e) {
-#else
                } catch (RtAudioError& e) {
-#endif
                        _audio_channels = 0;
                        error_dialog (
                                _video_view->get(),
@@ -628,7 +622,7 @@ FilmViewer::average_latency () const
         }
 
         Frame total = 0;
-        BOOST_FOREACH (Frame i, _latency_history) {
+        for (auto i: _latency_history) {
                 total += i;
         }
 
@@ -725,3 +719,10 @@ FilmViewer::content_change (ChangeType type, int property)
        }
 }
 
+
+void
+FilmViewer::image_changed (shared_ptr<PlayerVideo> pv)
+{
+       emit (boost::bind(boost::ref(ImageChanged), pv));
+}
+