diff options
| author | Carl Hetherington <cth@carlh.net> | 2019-11-06 01:09:13 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2020-01-08 21:56:47 +0100 |
| commit | 805487369e57e5eb57911805ba6de78b653d79ad (patch) | |
| tree | 73c07ac5f6617c915df2f50d695367d3d6c56a6c /src/wx/gl_video_view.cc | |
| parent | 694a9f48880efd428c8137e975de3581ad0a75a9 (diff) | |
Various timing hacks and development.
Diffstat (limited to 'src/wx/gl_video_view.cc')
| -rw-r--r-- | src/wx/gl_video_view.cc | 23 |
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; +} |
