diff options
author | wm4 <wm4@nowhere> | 2015-10-30 14:05:41 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2015-10-30 14:05:41 +0100 |
commit | 7aba3a5d96b0d3b22c9e93057b6d1b4cba0e5104 (patch) | |
tree | 3271f366b12d492532f4e49463da305c75e7112a /player | |
parent | acd5816a6df9e2de9e8dd307dde12a90717d464a (diff) | |
download | mpv-7aba3a5d96b0d3b22c9e93057b6d1b4cba0e5104.tar.bz2 mpv-7aba3a5d96b0d3b22c9e93057b6d1b4cba0e5104.tar.xz |
command: add mistimed-frame-count property
Does what the manpage says. This is a replacement incrementing the
dropped frame counter (see previous commit).
Diffstat (limited to 'player')
-rw-r--r-- | player/command.c | 15 | ||||
-rw-r--r-- | player/core.h | 2 | ||||
-rw-r--r-- | player/video.c | 4 |
3 files changed, 18 insertions, 3 deletions
diff --git a/player/command.c b/player/command.c index b912a2ad1f..27912354a5 100644 --- a/player/command.c +++ b/player/command.c @@ -553,8 +553,6 @@ static int mp_property_total_avsync_change(void *ctx, struct m_property *prop, return m_property_double_ro(action, arg, mpctx->total_avsync_change); } - -/// Late frames static int mp_property_drop_frame_cnt(void *ctx, struct m_property *prop, int action, void *arg) { @@ -565,6 +563,16 @@ static int mp_property_drop_frame_cnt(void *ctx, struct m_property *prop, return m_property_int_ro(action, arg, mpctx->dropped_frames_total); } +static int mp_property_mistimed_frame_count(void *ctx, struct m_property *prop, + int action, void *arg) +{ + MPContext *mpctx = ctx; + if (!mpctx->d_video || !mpctx->display_sync_active) + return M_PROPERTY_UNAVAILABLE; + + return m_property_int_ro(action, arg, mpctx->mistimed_frames_total); +} + static int mp_property_vo_drop_frame_count(void *ctx, struct m_property *prop, int action, void *arg) { @@ -3383,6 +3391,7 @@ static const struct m_property mp_properties[] = { {"avsync", mp_property_avsync}, {"total-avsync-change", mp_property_total_avsync_change}, {"drop-frame-count", mp_property_drop_frame_cnt}, + {"mistimed-frame-count", mp_property_mistimed_frame_count}, {"vo-drop-frame-count", mp_property_vo_drop_frame_count}, {"vo-missed-frame-count", mp_property_vo_missed_frame_count}, {"percent-pos", mp_property_percent_pos}, @@ -3601,7 +3610,7 @@ static const char *const *const mp_event_property_change[] = { "percent-pos", "time-remaining", "playtime-remaining", "playback-time", "estimated-vf-fps", "drop-frame-count", "vo-drop-frame-count", "total-avsync-change", "audio-speed-correction", "video-speed-correction", - "vo-missed-frame-count"), + "vo-missed-frame-count", "mistimed-frame-count"), E(MPV_EVENT_VIDEO_RECONFIG, "video-out-params", "video-params", "video-format", "video-codec", "video-bitrate", "dwidth", "dheight", "width", "height", "fps", "aspect", "vo-configured", "current-vo", diff --git a/player/core.h b/player/core.h index b5c2077e5a..fb7c1ed975 100644 --- a/player/core.h +++ b/player/core.h @@ -269,6 +269,8 @@ typedef struct MPContext { // Timing error (in seconds) due to rounding on vsync boundaries double display_sync_error; int display_sync_disable_counter; + // Number of mistimed frames. + int mistimed_frames_total; /* Set if audio should be timed to start with video frame after seeking, * not set when e.g. playing cover art */ bool sync_audio_to_video; diff --git a/player/video.c b/player/video.c index af98c676ed..857fb017bc 100644 --- a/player/video.c +++ b/player/video.c @@ -211,6 +211,7 @@ void reset_video_state(struct MPContext *mpctx) mpctx->display_sync_disable_counter = 0; mpctx->dropped_frames_total = 0; mpctx->dropped_frames = 0; + mpctx->mistimed_frames_total = 0; mpctx->drop_message_shown = 0; mpctx->display_sync_drift_dir = 0; @@ -1034,6 +1035,9 @@ static void handle_display_sync_frame(struct MPContext *mpctx, // Likewise, we know sync is off, but is going to be compensated. time_left += drop_repeat * vsync; + if (drop_repeat) + mpctx->mistimed_frames_total += 1; + mpctx->total_avsync_change = 0; update_av_diff(mpctx, time_left); |