/** Ask for ::get() to be called next time we are idle */
void
-FilmViewer::request_idle_get ()
+FilmViewer::request_idle_display_next_frame ()
{
if (_idle_get) {
return;
return;
}
- if (_video_view->get(true)) {
+ if (_video_view->display_next_frame(true)) {
_idle_get = false;
} else {
/* get() could not complete quickly so we'll try again later */
}
_film = film;
- _video_position = DCPTime ();
_video_view->clear ();
_video_view->set_image (shared_ptr<Image>());
--_suspended;
if (_playing && !_suspended) {
if (_audio.isStreamOpen()) {
- _audio.setStreamTime (_video_position.seconds());
+ _audio.setStreamTime (_video_view->position().seconds());
_audio.startStream ();
}
_video_view->start ();
}
if (_audio.isStreamOpen()) {
- _audio.setStreamTime (_video_position.seconds());
+ _audio.setStreamTime (_video_view->position().seconds());
_audio.startStream ();
}
void
FilmViewer::slow_refresh ()
{
- seek (_video_position, true);
+ seek (_video_view->position(), true);
}
/** Try to re-get the current frame quickly by resetting the metadata
_butler->seek (t, accurate);
if (!_playing) {
- request_idle_get ();
+ request_idle_display_next_frame ();
+ } else {
+ while (!_video_view->display_next_frame(false)) {}
}
resume ();
return DCPTime::from_seconds (const_cast<RtAudio*>(&_audio)->getStreamTime());
}
- return _video_position;
+ return _video_view->position();
}
DCPTime
DCPTime::from_frames (average_latency(), _film->audio_frame_rate());
}
- return _video_position;
+ return _video_view->position();
}
int
void
FilmViewer::seek_by (DCPTime by, bool accurate)
{
- seek (_video_position + by, accurate);
+ seek (_video_view->position() + by, accurate);
}
void
FilmViewer::time_until_next_frame () const
{
DCPTime const next = position() + one_video_frame();
- return max ((next.seconds() - time().seconds()) * 1000, 1.0);
+ std::cout << to_string(next) << " " << to_string(time()) << " " << ((next.seconds() - time().seconds()) * 1000) << "\n";
+ if (next < time()) {
+ return 0;
+ }
+ return (next.seconds() - time().seconds()) * 1000;
}