From: Steinar H. Gunderson Date: Fri, 5 Oct 2018 20:53:22 +0000 (+0200) Subject: Another small refactoring, this time to snapping. X-Git-Tag: 1.8.0~76^2~76 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=866a2a290ae84d271fccf4940c60667e209c8e1c;p=nageru Another small refactoring, this time to snapping. --- diff --git a/player.cpp b/player.cpp index bb2377a..5f6af62 100644 --- a/player.cpp +++ b/player.cpp @@ -141,21 +141,20 @@ void Player::thread_func(bool also_output_to_stream) // Snap to input frame: If we can do so with less than 1% jitter // (ie., move less than 1% of an _output_ frame), do so. - double in_pts_lower_as_frameno = (in_pts_lower - in_pts_origin) * output_framerate / TIMEBASE / speed; - double in_pts_upper_as_frameno = (in_pts_upper - in_pts_origin) * output_framerate / TIMEBASE / speed; - if (fabs(in_pts_lower_as_frameno - frameno) < 0.01) { - destination->setFrame(stream_idx, in_pts_lower, /*interpolated=*/false); - if (video_stream != nullptr) { - video_stream->schedule_original_frame(lrint(out_pts), stream_idx, in_pts_lower); + bool snapped = false; + for (int64_t snap_pts : { in_pts_lower, in_pts_upper }) { + double snap_pts_as_frameno = (snap_pts - in_pts_origin) * output_framerate / TIMEBASE / speed; + if (fabs(snap_pts_as_frameno - frameno) < 0.01) { + destination->setFrame(stream_idx, snap_pts, /*interpolated=*/false); + if (video_stream != nullptr) { + video_stream->schedule_original_frame(lrint(out_pts), stream_idx, snap_pts); + } + in_pts_origin += snap_pts - in_pts; + snapped = true; + break; } - in_pts_origin += in_pts_lower - in_pts; - continue; - } else if (fabs(in_pts_upper_as_frameno - frameno) < 0.01) { - destination->setFrame(stream_idx, in_pts_upper, /*interpolated=*/false); - if (video_stream != nullptr) { - video_stream->schedule_original_frame(lrint(out_pts), stream_idx, in_pts_upper); - } - in_pts_origin += in_pts_upper - in_pts; + } + if (snapped) { continue; }