summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2021-08-17 00:25:09 +0200
committerCarl Hetherington <cth@carlh.net>2021-08-17 00:25:09 +0200
commit6b50d63a76999bb5c443b69e7ec68b4607ab9b4e (patch)
treefe2041174491531b8bbd8dd395d67f88e1b8f191
parentb5632b00565286feed6b3efa1c1b4b19b1b0f164 (diff)
Only warn about lots of frame drops in the player (#2069).
-rw-r--r--src/tools/dcpomatic_player.cc21
-rw-r--r--src/wx/film_viewer.cc22
-rw-r--r--src/wx/film_viewer.h3
3 files changed, 24 insertions, 22 deletions
diff --git a/src/tools/dcpomatic_player.cc b/src/tools/dcpomatic_player.cc
index 112f2c065..7ffb107bf 100644
--- a/src/tools/dcpomatic_player.cc
+++ b/src/tools/dcpomatic_player.cc
@@ -33,6 +33,7 @@
#include "wx/system_information_dialog.h"
#include "wx/player_stress_tester.h"
#include "wx/verify_dcp_progress_dialog.h"
+#include "wx/nag_dialog.h"
#include "lib/cross.h"
#include "lib/config.h"
#include "lib/util.h"
@@ -210,6 +211,7 @@ public:
_viewer->PlaybackPermitted.connect (bind(&DOMFrame::playback_permitted, this));
_viewer->Started.connect (bind(&DOMFrame::playback_started, this, _1));
_viewer->Stopped.connect (bind(&DOMFrame::playback_stopped, this, _1));
+ _viewer->TooManyDropped.connect (bind(&DOMFrame::too_many_frames_dropped, this));
_info = new PlayerInformation (_overall_panel, _viewer);
setup_main_sizer (Config::instance()->player_mode());
#ifdef __WXOSX__
@@ -347,6 +349,25 @@ public:
_controls->log (wxString::Format("playback-stopped %s", time.timecode(_film->video_frame_rate()).c_str()));
}
+
+ void too_many_frames_dropped ()
+ {
+ if (!Config::instance()->nagged(Config::NAG_TOO_MANY_DROPPED_FRAMES)) {
+ _viewer->stop ();
+ }
+
+ NagDialog::maybe_nag (
+ this,
+ Config::NAG_TOO_MANY_DROPPED_FRAMES,
+ _("The player is dropping a lot of frames, so playback may not be accurate.\n\n"
+ "<b>This does not necessarily mean that the DCP you are playing is defective!</b>\n\n"
+ "You may be able to improve player performance by:\n"
+ "• choosing 'decode at half resolution' or 'decode at quarter resolution' from the View menu\n"
+ "• using a more powerful computer.\n"
+ )
+ );
+ }
+
void set_decode_reduction (optional<int> reduction)
{
_viewer->set_dcp_decode_reduction (reduction);
diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc
index 4ea2a8b00..17649d450 100644
--- a/src/wx/film_viewer.cc
+++ b/src/wx/film_viewer.cc
@@ -104,7 +104,7 @@ FilmViewer::FilmViewer (wxWindow* p)
}
_video_view->Sized.connect (boost::bind(&FilmViewer::video_view_sized, this));
- _video_view->TooManyDropped.connect (boost::bind(&FilmViewer::too_many_frames_dropped, this));
+ _video_view->TooManyDropped.connect (boost::bind(boost::ref(TooManyDropped)));
set_film (shared_ptr<Film>());
@@ -770,23 +770,3 @@ FilmViewer::image_changed (shared_ptr<PlayerVideo> pv)
{
emit (boost::bind(boost::ref(ImageChanged), pv));
}
-
-
-void
-FilmViewer::too_many_frames_dropped ()
-{
- if (!Config::instance()->nagged(Config::NAG_TOO_MANY_DROPPED_FRAMES)) {
- stop ();
- }
-
- NagDialog::maybe_nag (
- panel(),
- Config::NAG_TOO_MANY_DROPPED_FRAMES,
- _("The player is dropping a lot of frames, so playback may not be accurate.\n\n"
- "<b>This does not necessarily mean that the DCP you are playing is defective!</b>\n\n"
- "You may be able to improve player performance by:\n"
- "• choosing 'decode at half resolution' or 'decode at quarter resolution' from the View menu\n"
- "• using a more powerful computer.\n"
- )
- );
-}
diff --git a/src/wx/film_viewer.h b/src/wx/film_viewer.h
index 0f9967519..2efe448c9 100644
--- a/src/wx/film_viewer.h
+++ b/src/wx/film_viewer.h
@@ -145,6 +145,8 @@ public:
boost::signals2::signal<void (dcpomatic::DCPTime)> Stopped;
/** While playing back we reached the end of the film (emitted from GUI thread) */
boost::signals2::signal<void ()> Finished;
+ /** Emitted from the GUI thread when a lot of frames are being dropped */
+ boost::signals2::signal<void()> TooManyDropped;
boost::signals2::signal<bool ()> PlaybackPermitted;
@@ -161,7 +163,6 @@ private:
void config_changed (Config::Property);
void film_length_change ();
void ui_finished ();
- void too_many_frames_dropped ();
dcpomatic::DCPTime uncorrected_time () const;
Frame average_latency () const;