diff options
| author | Carl Hetherington <cth@carlh.net> | 2021-04-03 23:17:56 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2021-04-03 23:17:56 +0200 |
| commit | a7a8cd74f2f32de8b708c78cc8bc9c0cf17d60f5 (patch) | |
| tree | cb582fa9ed35e1c7383675761b5955922aef3617 /src/wx/video_view.cc | |
| parent | 996d8defbb783e5c82ef31a71fb6a06a6a5ab873 (diff) | |
Show an explanatory message if the player is not performing very well (#1932).
Diffstat (limited to 'src/wx/video_view.cc')
| -rw-r--r-- | src/wx/video_view.cc | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/wx/video_view.cc b/src/wx/video_view.cc index 5f44c37d6..387d4052f 100644 --- a/src/wx/video_view.cc +++ b/src/wx/video_view.cc @@ -25,12 +25,18 @@ #include "lib/butler.h" #include "lib/dcpomatic_log.h" #include <boost/optional.hpp> +#include <sys/time.h> + using std::pair; using std::shared_ptr; using boost::optional; +static constexpr int TOO_MANY_DROPPED_FRAMES = 20; +static constexpr int TOO_MANY_DROPPED_PERIOD = 5.0; + + VideoView::VideoView (FilmViewer* viewer) : _viewer (viewer) , _state_timer ("viewer") @@ -124,6 +130,7 @@ VideoView::start () boost::mutex::scoped_lock lm (_mutex); _dropped = 0; _errored = 0; + gettimeofday(&_dropped_check_period_start, nullptr); } @@ -143,3 +150,26 @@ VideoView::reset_metadata (shared_ptr<const Film> film, dcp::Size player_video_c return true; } + +void +VideoView::add_dropped () +{ + bool too_many = false; + + { + boost::mutex::scoped_lock lm (_mutex); + ++_dropped; + if (_dropped > TOO_MANY_DROPPED_FRAMES) { + struct timeval now; + gettimeofday (&now, nullptr); + double const elapsed = seconds(now) - seconds(_dropped_check_period_start); + too_many = elapsed < TOO_MANY_DROPPED_PERIOD; + _dropped = 0; + _dropped_check_period_start = now; + } + } + + if (too_many) { + emit (boost::bind(boost::ref(TooManyDropped))); + } +} |
