+
+void
+SimpleVideoView::timer ()
+{
+ if (!_viewer->_film || !_viewer->_playing) {
+ return;
+ }
+
+ _viewer->get (false);
+ DCPTime const next = _viewer->_video_position + _viewer->one_video_frame();
+
+ if (next >= _viewer->_film->length()) {
+ _viewer->stop ();
+ _viewer->Finished ();
+ return;
+ }
+
+ LOG_DEBUG_PLAYER("%1 -> %2; delay %3", next.seconds(), _viewer->time().seconds(), max((next.seconds() - _viewer->time().seconds()) * 1000, 1.0));
+ _timer.Start (max ((next.seconds() - _viewer->time().seconds()) * 1000, 1.0), wxTIMER_ONE_SHOT);
+
+ if (_viewer->_butler) {
+ _viewer->_butler->rethrow ();
+ }
+}