From 5afc025cc9c79fdee0a0aa7453971656f67ed918 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 22 Aug 2014 14:20:00 +0200 Subject: video: get rid of video_next_pts field Not really needed anymore. Code should be mostly equivalent. Also get rid of some other now-unused or outdated things. --- player/audio.c | 4 ++-- player/command.c | 2 +- player/core.h | 8 -------- player/discnav.c | 1 - player/playloop.c | 4 +--- player/video.c | 13 ++++--------- 6 files changed, 8 insertions(+), 24 deletions(-) diff --git a/player/audio.c b/player/audio.c index 3a691fed09..df80fcd161 100644 --- a/player/audio.c +++ b/player/audio.c @@ -329,8 +329,8 @@ static bool get_sync_samples(struct MPContext *mpctx, int *skip) double sync_pts = MP_NOPTS_VALUE; if (sync_to_video) { - if (mpctx->video_next_pts != MP_NOPTS_VALUE) { - sync_pts = mpctx->video_next_pts; + if (mpctx->video_pts != MP_NOPTS_VALUE) { + sync_pts = mpctx->video_pts; } else if (mpctx->video_status < STATUS_READY) { return false; // wait until we know a video PTS } diff --git a/player/command.c b/player/command.c index 761aba8fd6..bdb3cf1337 100644 --- a/player/command.c +++ b/player/command.c @@ -3670,7 +3670,7 @@ int run_command(MPContext *mpctx, mp_cmd_t *cmd) case MP_CMD_SUB_SEEK: { struct osd_sub_state state; osd_get_sub(mpctx->osd, OSDTYPE_SUB, &state); - if (state.dec_sub) { + if (state.dec_sub && mpctx->video_pts != MP_NOPTS_VALUE) { double a[2]; a[0] = mpctx->video_pts - state.video_offset - opts->sub_delay; a[1] = cmd->args[0].v.i; diff --git a/player/core.h b/player/core.h index 5a81a7288a..5355f720e0 100644 --- a/player/core.h +++ b/player/core.h @@ -255,16 +255,11 @@ typedef struct MPContext { // AV sync: the next frame should be shown when the audio out has this // much (in seconds) buffered data left. Increased when more data is // written to the ao, decreased when moving to the next frame. - // In the audio-only case used as a timer since the last seek - // by the audio CPU usage meter. double delay; // AV sync: time until next frame should be shown double time_frame; // Optional/additional AV sync compensation if video is too slow. double insert_silence; - // Set to true some time after a new frame has been shown, and it turns out - // that this frame was the last one before video ends. - bool playing_last_frame; // How much video timing has been changed to make it match the audio // timeline. Used for status line information only. double total_avsync_change; @@ -277,9 +272,6 @@ typedef struct MPContext { // the same value if the status line is updated at a time where no new // video frame is shown. double last_av_difference; - /* Timestamp of the latest image that was queued on the VO, but not yet - * to be flipped. */ - double video_next_pts; /* timestamp of video frame currently visible on screen * (or at least queued to be flipped by VO) */ double video_pts; diff --git a/player/discnav.c b/player/discnav.c index 2c24fc9a42..1511dec468 100644 --- a/player/discnav.c +++ b/player/discnav.c @@ -270,7 +270,6 @@ void mp_handle_nav(struct MPContext *mpctx) if (nav->nav_still_frame > 0) { // gross hack mpctx->time_frame += nav->nav_still_frame; - mpctx->playing_last_frame = true; nav->nav_still_frame = -2; } else if (nav->nav_still_frame == -2) { struct mp_nav_cmd inp = {MP_NAV_CMD_SKIP_STILL}; diff --git a/player/playloop.c b/player/playloop.c index f7f92a2eda..50494809e3 100644 --- a/player/playloop.c +++ b/player/playloop.c @@ -253,10 +253,8 @@ static int mp_seek(MPContext *mpctx, struct seek_params seek, /* Use the target time as "current position" for further relative * seeks etc until a new video frame has been decoded */ - if (seek.type == MPSEEK_ABSOLUTE) { - mpctx->video_pts = seek.amount; + if (seek.type == MPSEEK_ABSOLUTE) mpctx->last_seek_pts = seek.amount; - } // The hr_seek==false case is for skipping frames with PTS before the // current timeline chapter start. It's not really known where the demuxer diff --git a/player/video.c b/player/video.c index f368dc99b3..3885e77dd8 100644 --- a/player/video.c +++ b/player/video.c @@ -214,8 +214,7 @@ void reset_video_state(struct MPContext *mpctx) mpctx->delay = 0; mpctx->time_frame = 0; - mpctx->video_next_pts = MP_NOPTS_VALUE; - mpctx->playing_last_frame = false; + mpctx->video_pts = MP_NOPTS_VALUE; mpctx->total_avsync_change = 0; mpctx->drop_frame_cnt = 0; mpctx->dropped_frames = 0; @@ -475,7 +474,6 @@ static void adjust_sync(struct MPContext *mpctx, double v_pts, double frame_time double a_pts = written_audio_pts(mpctx) - mpctx->delay; double av_delay = a_pts - v_pts; - // Try to sync vo_flip() so it will *finish* at given time av_delay += mpctx->audio_delay; // This much pts difference is desired double change = av_delay * 0.1; @@ -544,10 +542,8 @@ static int update_video(struct MPContext *mpctx, double endpts) if (mpctx->d_video->header->attached_picture) { if (vo_has_frame(vo)) return VD_EOF; - if (mpctx->next_frame[0]) { - mpctx->video_next_pts = MP_NOPTS_VALUE; + if (mpctx->next_frame[0]) return VD_NEW_FRAME; - } r = video_output_image(mpctx, MP_NOPTS_VALUE); return r <= 0 ? VD_EOF: VD_PROGRESS; } @@ -573,7 +569,7 @@ static int update_video(struct MPContext *mpctx, double endpts) if (r == VD_NEW_FRAME) { double pts = mpctx->next_frame[0]->pts; - double last_pts = mpctx->video_next_pts; + double last_pts = mpctx->video_pts; if (last_pts == MP_NOPTS_VALUE) last_pts = pts; double frame_time = pts - last_pts; @@ -582,7 +578,6 @@ static int update_video(struct MPContext *mpctx, double endpts) MP_WARN(mpctx, "Jump in video pts: %f -> %f\n", last_pts, pts); frame_time = 0; } - mpctx->video_next_pts = pts; if (mpctx->d_audio) mpctx->delay -= frame_time; if (mpctx->video_status >= STATUS_READY) { @@ -767,7 +762,7 @@ void write_video(struct MPContext *mpctx, double endpts) duration = MPCLAMP(diff, 0, 10) * 1e6; } - mpctx->video_pts = mpctx->video_next_pts; + mpctx->video_pts = mpctx->next_frame[0]->pts; mpctx->last_vo_pts = mpctx->video_pts; mpctx->playback_pts = mpctx->video_pts; -- cgit v1.2.3