diff options
author | wm4 <wm4@nowhere> | 2015-11-27 22:04:44 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2015-11-27 22:04:44 +0100 |
commit | 7023c383b22a9619840b88175a8c272f2f9d4414 (patch) | |
tree | 5bb7828079a20407971c72380f74a3f4164adb5b /video | |
parent | 2bee47fd27f4ee544f1db15fcedf8cd94df89610 (diff) | |
download | mpv-7023c383b22a9619840b88175a8c272f2f9d4414.tar.bz2 mpv-7023c383b22a9619840b88175a8c272f2f9d4414.tar.xz |
vo: change vo_frame field units
This was just converting back and forth between int64_t/microseconds and
double/seconds. Remove this stupidity. The pts/duration fields are still
in microseconds, but they have no meaning in the display-sync case (also
drop printing the pts field from opengl/video.c - it's always 0).
Diffstat (limited to 'video')
-rw-r--r-- | video/out/opengl/video.c | 7 | ||||
-rw-r--r-- | video/out/vo.c | 4 | ||||
-rw-r--r-- | video/out/vo.h | 4 |
3 files changed, 6 insertions, 9 deletions
diff --git a/video/out/opengl/video.c b/video/out/opengl/video.c index 4c62efe3be..7f0bb22b8f 100644 --- a/video/out/opengl/video.c +++ b/video/out/opengl/video.c @@ -2088,7 +2088,7 @@ static void gl_video_interpolate_frame(struct gl_video *p, struct vo_frame *t, double pts_now = p->surfaces[surface_now].pts, pts_nxt = p->surfaces[surface_nxt].pts; - double mix = (t->vsync_offset / 1e6) / (pts_nxt - pts_now); + double mix = t->vsync_offset / (pts_nxt - pts_now); // The scaler code always wants the fcoord to be between 0 and 1, // so we try to adjust by using the previous set of N frames instead // (which requires some extra checking to make sure it's valid) @@ -2107,7 +2107,7 @@ static void gl_video_interpolate_frame(struct gl_video *p, struct vo_frame *t, // Blend the frames together if (oversample) { - double vsync_dist = t->vsync_interval / 1e6 / (pts_nxt - pts_now), + double vsync_dist = t->vsync_interval / (pts_nxt - pts_now), threshold = tscale->conf.kernel.params[0]; threshold = isnan(threshold) ? 0.0 : threshold; mix = (1 - mix) / vsync_dist; @@ -2130,8 +2130,7 @@ static void gl_video_interpolate_frame(struct gl_video *p, struct vo_frame *t, } MP_STATS(p, "frame-mix"); - MP_DBG(p, "inter frame pts: %lld, vsync: %lld, mix: %f\n", - (long long)t->pts, (long long)t->vsync_interval, mix); + MP_DBG(p, "inter frame vsync: %f, mix: %f\n", t->vsync_interval, mix); p->is_interpolated = true; } pass_draw_to_screen(p, fbo); diff --git a/video/out/vo.c b/video/out/vo.c index 7d39c7e613..a3254d8866 100644 --- a/video/out/vo.c +++ b/video/out/vo.c @@ -741,8 +741,6 @@ static bool render_frame(struct vo *vo) int64_t duration = frame->duration; int64_t end_time = pts + duration; - frame->vsync_interval = in->vsync_interval; - // Time at which we should flip_page on the VO. int64_t target = frame->display_synced ? 0 : pts - in->flip_queue_offset; @@ -761,7 +759,7 @@ static bool render_frame(struct vo *vo) // frame currently drawn, while in->current_frame is the potentially next.) in->current_frame->repeat = true; if (frame->display_synced) { - in->current_frame->vsync_offset += in->vsync_interval; + in->current_frame->vsync_offset += in->current_frame->vsync_interval; in->dropped_frame |= in->current_frame->num_vsyncs < 1; } if (in->current_frame->num_vsyncs > 0) diff --git a/video/out/vo.h b/video/out/vo.h index 05c50bb3dd..051638882b 100644 --- a/video/out/vo.h +++ b/video/out/vo.h @@ -165,9 +165,9 @@ struct vo_frame { // Approximate frame duration, in us. int duration; // Realtime of estimated distance between 2 vsync events. - int64_t vsync_interval; + double vsync_interval; // "ideal" display time within the vsync - int64_t vsync_offset; + double vsync_offset; // how often the frame will be repeated (does not include OSD redraws) int num_vsyncs; // Set if the current frame is repeated from the previous. It's guaranteed |