From: Carl Hetherington Date: Thu, 21 Nov 2019 23:10:35 +0000 (+0100) Subject: More tidying up. X-Git-Tag: v2.15.40^2~12 X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=166f44ff1b500f684417d660bb349d35383996ee More tidying up. --- diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc index df66a8ade..c7b32ff26 100644 --- a/src/wx/film_viewer.cc +++ b/src/wx/film_viewer.cc @@ -406,16 +406,7 @@ 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; - } - - _video_view->display_player_video (); - return true; + return _video_view->refresh_metadata (_film, _player->video_container_size(), _film->frame_size()); } void diff --git a/src/wx/gl_video_view.cc b/src/wx/gl_video_view.cc index 869d555cb..2da16f1df 100644 --- a/src/wx/gl_video_view.cc +++ b/src/wx/gl_video_view.cc @@ -325,7 +325,6 @@ try } get_next_frame (false); - //-- set_image (player_video().first->image(bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), false, true)); inter_position = player_video().first->inter_position(); inter_size = player_video().first->inter_size(); diff --git a/src/wx/simple_video_view.cc b/src/wx/simple_video_view.cc index 22e4db887..6eabbc0b0 100644 --- a/src/wx/simple_video_view.cc +++ b/src/wx/simple_video_view.cc @@ -134,9 +134,9 @@ SimpleVideoView::paint () } void -SimpleVideoView::update () +SimpleVideoView::refresh_panel () { - _state_timer.set ("update-view"); + _state_timer.set ("refresh-panel"); _panel->Refresh (); _panel->Update (); _state_timer.unset (); @@ -193,7 +193,7 @@ SimpleVideoView::display_next_frame (bool non_blocking) } } - display_player_video (); + update (); try { _viewer->butler()->rethrow (); @@ -205,11 +205,11 @@ SimpleVideoView::display_next_frame (bool non_blocking) } void -SimpleVideoView::display_player_video () +SimpleVideoView::update () { if (!player_video().first) { set_image (shared_ptr()); - update (); + refresh_panel (); return; } @@ -252,5 +252,5 @@ SimpleVideoView::display_player_video () _inter_position = player_video().first->inter_position (); _inter_size = player_video().first->inter_size (); - update (); + refresh_panel (); } diff --git a/src/wx/simple_video_view.h b/src/wx/simple_video_view.h index 86451fa66..a6a5cf47f 100644 --- a/src/wx/simple_video_view.h +++ b/src/wx/simple_video_view.h @@ -43,9 +43,9 @@ public: bool display_next_frame (bool non_blocking); private: + void refresh_panel (); void paint (); void timer (); - void display_player_video (); wxPanel* _panel; boost::shared_ptr _image; diff --git a/src/wx/video_view.cc b/src/wx/video_view.cc index ee14f4a33..7e9e1a947 100644 --- a/src/wx/video_view.cc +++ b/src/wx/video_view.cc @@ -110,3 +110,20 @@ VideoView::start () boost::mutex::scoped_lock lm (_mutex); _dropped = 0; } + +bool +VideoView::refresh_metadata (shared_ptr film, dcp::Size video_container_size, dcp::Size film_frame_size) +{ + boost::mutex::scoped_lock lm (_mutex); + if (!_player_video.first) { + return false; + } + + if (!_player_video.first->reset_metadata (film, video_container_size, film_frame_size)) { + return false; + } + + update (); + return true; +} + diff --git a/src/wx/video_view.h b/src/wx/video_view.h index 5d5d33163..ad492bd43 100644 --- a/src/wx/video_view.h +++ b/src/wx/video_view.h @@ -41,25 +41,25 @@ public: VideoView (FilmViewer* viewer); virtual ~VideoView () {} - virtual void set_image (boost::shared_ptr image) = 0; + /** @return the thing displaying the image */ virtual wxWindow* get () const = 0; - /** Redraw the view after something has changed like content outlining, - * the film being removed, etc. - */ + /** Re-make and display the image from the current _player_video */ virtual void update () = 0; - + /** Called when playback starts */ virtual void start (); - /* XXX_b: make pure */ + /** Called when playback stops */ virtual void stop () {} + /** Get the next frame and display it; used after seek */ + virtual bool display_next_frame (bool) = 0; void clear (); + bool refresh_metadata (boost::shared_ptr film, dcp::Size video_container_size, dcp::Size film_frame_size); + /** Emitted from the GUI thread when our display changes in size */ boost::signals2::signal Sized; - virtual bool display_next_frame (bool) = 0; - /* XXX_b: to remove */ - virtual void display_player_video () {} + /* Accessors for FilmViewer */ int dropped () const { boost::mutex::scoped_lock lm (_mutex); @@ -80,6 +80,11 @@ public: return _player_video.second; } + + /* Setters for FilmViewer so it can tell us our state and + * we can then use (thread) safely. + */ + void set_video_frame_rate (int r) { boost::mutex::scoped_lock lm (_mutex); _video_frame_rate = r; @@ -101,9 +106,6 @@ public: } protected: - /* XXX_b: to remove */ - friend class FilmViewer; - bool get_next_frame (bool non_blocking); int time_until_next_frame () const; dcpomatic::DCPTime one_video_frame () const; @@ -144,7 +146,7 @@ protected: StateTimer _state_timer; private: - /** Mutex protecting all the state in VideoView */ + /** Mutex protecting all the state in this class */ mutable boost::mutex _mutex; std::pair, dcpomatic::DCPTime> _player_video;