summaryrefslogtreecommitdiff
path: root/src/wx/gl_video_view.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2019-11-06 01:09:13 +0100
committerCarl Hetherington <cth@carlh.net>2020-01-08 21:56:47 +0100
commit805487369e57e5eb57911805ba6de78b653d79ad (patch)
tree73c07ac5f6617c915df2f50d695367d3d6c56a6c /src/wx/gl_video_view.cc
parent694a9f48880efd428c8137e975de3581ad0a75a9 (diff)
Various timing hacks and development.
Diffstat (limited to 'src/wx/gl_video_view.cc')
-rw-r--r--src/wx/gl_video_view.cc23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/wx/gl_video_view.cc b/src/wx/gl_video_view.cc
index c69ab210a..ebf8b8fe2 100644
--- a/src/wx/gl_video_view.cc
+++ b/src/wx/gl_video_view.cc
@@ -55,6 +55,7 @@ GLVideoView::GLVideoView (FilmViewer* viewer, wxWindow *parent)
: VideoView (viewer)
, _vsync_enabled (false)
, _thread (0)
+ , _one_shot (false)
{
_canvas = new wxGLCanvas (parent, wxID_ANY, 0, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE);
_canvas->Bind (wxEVT_PAINT, boost::bind(&GLVideoView::paint, this));
@@ -105,7 +106,7 @@ GLVideoView::~GLVideoView ()
}
static void
- check_gl_error (char const * last)
+check_gl_error (char const * last)
{
GLenum const e = glGetError ();
if (e != GL_NO_ERROR) {
@@ -278,25 +279,29 @@ try
}
while (true) {
- if (!_viewer->film() || !_viewer->playing()) {
+ if ((!_viewer->film() || !_viewer->playing()) && !_one_shot) {
dcpomatic_sleep_milliseconds (40);
continue;
}
+ _one_shot = false;
+
dcpomatic::DCPTime const next = _viewer->position() + _viewer->one_video_frame();
if (next >= _viewer->film()->length()) {
_viewer->stop ();
_viewer->Finished ();
- return;
+ continue;
}
get_next_frame (false);
set_image (_player_video.first->image(bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), false, true));
draw ();
- _viewer->_video_position = _player_video.second;
- std::cout << "sleep " << _viewer->time_until_next_frame() << "\n";
+ while (_viewer->time_until_next_frame() < 5) {
+ get_next_frame (true);
+ }
+
dcpomatic_sleep_milliseconds (_viewer->time_until_next_frame());
}
@@ -318,3 +323,11 @@ GLVideoView::context () const
boost::mutex::scoped_lock lm (_context_mutex);
return _context;
}
+
+bool
+GLVideoView::display_next_frame (bool non_blocking)
+{
+ bool const g = get_next_frame (non_blocking);
+ _one_shot = true;
+ return g;
+}