From: Carl Hetherington Date: Sun, 20 Oct 2019 20:54:45 +0000 (+0200) Subject: Move display_player_video into SimpleVideoView. X-Git-Tag: v2.15.40^2~41 X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=444e1d4e0062677220d32b78b97a4b730156b514 Move display_player_video into SimpleVideoView. --- diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc index 0b6fcd7b3..178311ac9 100644 --- a/src/wx/film_viewer.cc +++ b/src/wx/film_viewer.cc @@ -236,61 +236,6 @@ FilmViewer::refresh_view () _state_timer.unset (); } -void -FilmViewer::display_player_video () -{ - if (!_player_video.first) { - _video_view->set_image (shared_ptr()); - refresh_view (); - return; - } - - if (_playing && !_suspended && (time() - _player_video.second) > one_video_frame()) { - /* Too late; just drop this frame before we try to get its image (which will be the time-consuming - part if this frame is J2K). - */ - _video_position = _player_video.second; - ++_dropped; - return; - } - - /* In an ideal world, what we would do here is: - * - * 1. convert to XYZ exactly as we do in the DCP creation path. - * 2. convert back to RGB for the preview display, compensating - * for the monitor etc. etc. - * - * but this is inefficient if the source is RGB. Since we don't - * (currently) care too much about the precise accuracy of the preview's - * colour mapping (and we care more about its speed) we try to short- - * circuit this "ideal" situation in some cases. - * - * The content's specified colour conversion indicates the colourspace - * which the content is in (according to the user). - * - * PlayerVideo::image (bound to PlayerVideo::force) will take the source - * image and convert it (from whatever the user has said it is) to RGB. - */ - - _state_timer.set ("get image"); - - _video_view->set_image ( - _player_video.first->image(bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), false, true) - ); - - _state_timer.set ("ImageChanged"); - ImageChanged (_player_video.first); - _state_timer.unset (); - - _video_position = _player_video.second; - _inter_position = _player_video.first->inter_position (); - _inter_size = _player_video.first->inter_size (); - - refresh_view (); - - _closed_captions_dialog->update (time()); -} - void FilmViewer::set_outline_content (bool o) { @@ -469,7 +414,7 @@ FilmViewer::quick_refresh () return false; } - display_player_video (); + _video_view->display_player_video (); return true; } diff --git a/src/wx/film_viewer.h b/src/wx/film_viewer.h index 077d8a6a5..916491d30 100644 --- a/src/wx/film_viewer.h +++ b/src/wx/film_viewer.h @@ -155,7 +155,6 @@ private: void player_change (ChangeType type, int, bool); void idle_handler (); void request_idle_get (); - void display_player_video (); void film_change (ChangeType, Film::Property); void recreate_butler (); void config_changed (Config::Property); diff --git a/src/wx/simple_video_view.cc b/src/wx/simple_video_view.cc index 7d2080003..456d8cd30 100644 --- a/src/wx/simple_video_view.cc +++ b/src/wx/simple_video_view.cc @@ -21,6 +21,7 @@ #include "simple_video_view.h" #include "film_viewer.h" #include "wx_util.h" +#include "closed_captions_dialog.h" #include "lib/image.h" #include "lib/dcpomatic_log.h" #include "lib/butler.h" @@ -31,6 +32,7 @@ using std::max; using std::string; using boost::optional; +using boost::shared_ptr; using namespace dcpomatic; SimpleVideoView::SimpleVideoView (FilmViewer* viewer, wxWindow* parent) @@ -207,8 +209,63 @@ SimpleVideoView::get (bool lazy) error_dialog (get(), e.what()); } - _viewer->display_player_video (); + display_player_video (); _viewer->PositionChanged (); return true; } + +void +SimpleVideoView::display_player_video () +{ + if (!_viewer->_player_video.first) { + set_image (shared_ptr()); + _viewer->refresh_view (); + return; + } + + if (_viewer->playing() && (_viewer->time() - _viewer->_player_video.second) > _viewer->one_video_frame()) { + /* Too late; just drop this frame before we try to get its image (which will be the time-consuming + part if this frame is J2K). + */ + _viewer->_video_position = _viewer->_player_video.second; + ++_viewer->_dropped; + return; + } + + /* In an ideal world, what we would do here is: + * + * 1. convert to XYZ exactly as we do in the DCP creation path. + * 2. convert back to RGB for the preview display, compensating + * for the monitor etc. etc. + * + * but this is inefficient if the source is RGB. Since we don't + * (currently) care too much about the precise accuracy of the preview's + * colour mapping (and we care more about its speed) we try to short- + * circuit this "ideal" situation in some cases. + * + * The content's specified colour conversion indicates the colourspace + * which the content is in (according to the user). + * + * PlayerVideo::image (bound to PlayerVideo::force) will take the source + * image and convert it (from whatever the user has said it is) to RGB. + */ + + _viewer->_state_timer.set ("get image"); + + set_image ( + _viewer->_player_video.first->image(bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), false, true) + ); + + _viewer->_state_timer.set ("ImageChanged"); + _viewer->ImageChanged (_viewer->_player_video.first); + _viewer->_state_timer.unset (); + + _viewer->_video_position = _viewer->_player_video.second; + _viewer->_inter_position = _viewer->_player_video.first->inter_position (); + _viewer->_inter_size = _viewer->_player_video.first->inter_size (); + + _viewer->refresh_view (); + + _viewer->_closed_captions_dialog->update (_viewer->time()); +} diff --git a/src/wx/simple_video_view.h b/src/wx/simple_video_view.h index d27141652..8527cdbe7 100644 --- a/src/wx/simple_video_view.h +++ b/src/wx/simple_video_view.h @@ -44,6 +44,7 @@ private: void paint (); void timer (); bool get (bool lazy); + void display_player_video (); wxPanel* _panel; boost::shared_ptr _image; diff --git a/src/wx/video_view.h b/src/wx/video_view.h index 80d6a50fc..873df162b 100644 --- a/src/wx/video_view.h +++ b/src/wx/video_view.h @@ -53,6 +53,8 @@ public: virtual bool get (bool) { return true; } + /* XXX_b: to remove */ + virtual void display_player_video () {} protected: FilmViewer* _viewer;