diff options
| author | Carl Hetherington <cth@carlh.net> | 2019-11-22 00:10:35 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2020-01-08 21:56:47 +0100 |
| commit | 166f44ff1b500f684417d660bb349d35383996ee (patch) | |
| tree | 230b6aa0f1be00f2f1570a96721e4b97262c3c69 | |
| parent | f77529bdfa01ae13f889442900988fc401b63c62 (diff) | |
More tidying up.
| -rw-r--r-- | src/wx/film_viewer.cc | 11 | ||||
| -rw-r--r-- | src/wx/gl_video_view.cc | 1 | ||||
| -rw-r--r-- | src/wx/simple_video_view.cc | 12 | ||||
| -rw-r--r-- | src/wx/simple_video_view.h | 2 | ||||
| -rw-r--r-- | src/wx/video_view.cc | 17 | ||||
| -rw-r--r-- | src/wx/video_view.h | 28 |
6 files changed, 40 insertions, 31 deletions
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<Image>()); - 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<const Image> _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<const Film> 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<const Image> 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<const Film> 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<void()> 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<boost::shared_ptr<PlayerVideo>, dcpomatic::DCPTime> _player_video; |
