summaryrefslogtreecommitdiff
path: root/src/wx/video_view.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2019-11-21 23:43:23 +0100
committerCarl Hetherington <cth@carlh.net>2020-01-08 21:56:47 +0100
commitf77529bdfa01ae13f889442900988fc401b63c62 (patch)
treefacabf65f292fdfcf5fbffb6964d3d84f11120af /src/wx/video_view.cc
parentb3b371294ed5e6cc18ef64ba1b06ca76726b903a (diff)
Various cleanups and thread-safety.
Diffstat (limited to 'src/wx/video_view.cc')
-rw-r--r--src/wx/video_view.cc15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/wx/video_view.cc b/src/wx/video_view.cc
index 5dd857fab..ee14f4a33 100644
--- a/src/wx/video_view.cc
+++ b/src/wx/video_view.cc
@@ -23,6 +23,8 @@
#include "film_viewer.h"
#include "lib/butler.h"
+using boost::shared_ptr;
+
VideoView::VideoView (FilmViewer* viewer)
: _viewer (viewer)
#ifdef DCPOMATIC_VARIANT_SWAROOP
@@ -31,6 +33,7 @@ VideoView::VideoView (FilmViewer* viewer)
, _state_timer ("viewer")
, _video_frame_rate (0)
, _eyes (EYES_LEFT)
+ , _three_d (false)
, _dropped (0)
, _gets (0)
{
@@ -45,30 +48,32 @@ VideoView::clear ()
_player_video.second = dcpomatic::DCPTime ();
}
-/** @param non_blocking true to return false quickly if no video is available quickly.
+/** Could be called from any thread.
+ * @param non_blocking true to return false quickly if no video is available quickly.
* @return false if we gave up because it would take too long, otherwise true.
*/
bool
VideoView::get_next_frame (bool non_blocking)
{
- if (_length == dcpomatic::DCPTime()) {
+ if (length() == dcpomatic::DCPTime()) {
return true;
}
- DCPOMATIC_ASSERT (_viewer->butler());
+ shared_ptr<Butler> butler = _viewer->butler ();
+ DCPOMATIC_ASSERT (butler);
add_get ();
boost::mutex::scoped_lock lm (_mutex);
do {
Butler::Error e;
- _player_video = _viewer->butler()->get_video (!non_blocking, &e);
+ _player_video = butler->get_video (!non_blocking, &e);
if (!_player_video.first && e == Butler::AGAIN) {
return false;
}
} while (
_player_video.first &&
- _viewer->film()->three_d() &&
+ _three_d &&
_eyes != _player_video.first->eyes() &&
_player_video.first->eyes() != EYES_BOTH
);