mirror of https://github.com/mpv-player/mpv
vo: move display-fps internal option value to VO opts
Removes the awkward notification through VO_EVENT_WIN_STATE. Unfortunately, some awkwardness remains in mp_property_display_fps(), because the property has conflicting semantics with the option.
This commit is contained in:
parent
2c572e2bb1
commit
e42a194062
|
@ -139,6 +139,7 @@ static const m_option_t mp_vo_opt_list[] = {
|
|||
OPT_FLAG("keepaspect-window", keepaspect_window, 0),
|
||||
OPT_FLAG("hidpi-window-scale", hidpi_window_scale, 0),
|
||||
OPT_FLAG("native-fs", native_fs, 0),
|
||||
OPT_DOUBLE("display-fps", override_display_fps, M_OPT_MIN, .min = 0),
|
||||
OPT_DOUBLERANGE("video-timing-offset", timing_offset, 0, 0.0, 1.0),
|
||||
#if HAVE_X11
|
||||
OPT_CHOICE("x11-netwm", x11_netwm, 0,
|
||||
|
@ -612,8 +613,6 @@ const m_option_t mp_opts[] = {
|
|||
{"decoder+vo", 3})),
|
||||
OPT_FLAG("video-latency-hacks", video_latency_hacks, 0),
|
||||
|
||||
OPT_DOUBLE("display-fps", frame_drop_fps, M_OPT_MIN, .min = 0),
|
||||
|
||||
OPT_FLAG("untimed", untimed, 0),
|
||||
|
||||
OPT_STRING("stream-dump", stream_dump, M_OPT_FILE),
|
||||
|
|
|
@ -50,6 +50,7 @@ typedef struct mp_vo_opts {
|
|||
|
||||
char *mmcss_profile;
|
||||
|
||||
double override_display_fps;
|
||||
double timing_offset;
|
||||
|
||||
// vo_drm
|
||||
|
@ -224,7 +225,6 @@ typedef struct MPOpts {
|
|||
int autosync;
|
||||
int frame_dropping;
|
||||
int video_latency_hacks;
|
||||
double frame_drop_fps;
|
||||
int term_osd;
|
||||
int term_osd_bar;
|
||||
char *term_osd_bar_chars;
|
||||
|
|
|
@ -2724,17 +2724,10 @@ static int mp_property_display_fps(void *ctx, struct m_property *prop,
|
|||
int action, void *arg)
|
||||
{
|
||||
MPContext *mpctx = ctx;
|
||||
double fps = mpctx->opts->frame_drop_fps;
|
||||
struct vo *vo = mpctx->video_out;
|
||||
if (vo)
|
||||
fps = vo_get_display_fps(vo);
|
||||
if (action == M_PROPERTY_SET) {
|
||||
int ret = mp_property_generic_option(mpctx, prop, action, arg);
|
||||
if (vo)
|
||||
vo_event(vo, VO_EVENT_WIN_STATE);
|
||||
return ret;
|
||||
}
|
||||
return m_property_double_ro(action, arg, fps);
|
||||
double fps = mpctx->video_out ? vo_get_display_fps(mpctx->video_out) : 0;
|
||||
if (fps > 0 && action != M_PROPERTY_SET)
|
||||
return m_property_double_ro(action, arg, fps);
|
||||
return mp_property_generic_option(mpctx, prop, action, arg);
|
||||
}
|
||||
|
||||
static int mp_property_framedrop(void *ctx, struct m_property *prop,
|
||||
|
|
|
@ -163,6 +163,7 @@ struct vo_internal {
|
|||
uint64_t current_frame_id;
|
||||
|
||||
double display_fps;
|
||||
double reported_display_fps;
|
||||
int opt_framedrop;
|
||||
};
|
||||
|
||||
|
@ -533,27 +534,30 @@ static void update_display_fps(struct vo *vo)
|
|||
mp_read_option_raw(vo->global, "framedrop", &m_option_type_choice,
|
||||
&in->opt_framedrop);
|
||||
|
||||
double display_fps;
|
||||
mp_read_option_raw(vo->global, "display-fps", &m_option_type_double,
|
||||
&display_fps);
|
||||
|
||||
if (display_fps <= 0)
|
||||
vo->driver->control(vo, VOCTRL_GET_DISPLAY_FPS, &display_fps);
|
||||
double fps = 0;
|
||||
vo->driver->control(vo, VOCTRL_GET_DISPLAY_FPS, &fps);
|
||||
|
||||
pthread_mutex_lock(&in->lock);
|
||||
|
||||
if (in->display_fps != display_fps) {
|
||||
in->display_fps = display_fps;
|
||||
MP_VERBOSE(vo, "Assuming %f FPS for display sync.\n", display_fps);
|
||||
|
||||
// make sure to update the player
|
||||
in->queued_events |= VO_EVENT_WIN_STATE;
|
||||
wakeup_core(vo);
|
||||
}
|
||||
|
||||
in->nominal_vsync_interval = in->display_fps > 0 ? 1e6 / in->display_fps : 0;
|
||||
in->vsync_interval = MPMAX(in->nominal_vsync_interval, 1);
|
||||
in->reported_display_fps = fps;
|
||||
}
|
||||
|
||||
double display_fps = vo->opts->override_display_fps;
|
||||
if (display_fps <= 0)
|
||||
display_fps = in->reported_display_fps;
|
||||
|
||||
if (in->display_fps != display_fps) {
|
||||
in->nominal_vsync_interval = display_fps > 0 ? 1e6 / display_fps : 0;
|
||||
in->vsync_interval = MPMAX(in->nominal_vsync_interval, 1);
|
||||
in->display_fps = display_fps;
|
||||
|
||||
MP_VERBOSE(vo, "Assuming %f FPS for display sync.\n", display_fps);
|
||||
|
||||
// make sure to update the player
|
||||
in->queued_events |= VO_EVENT_WIN_STATE;
|
||||
wakeup_core(vo);
|
||||
}
|
||||
|
||||
pthread_mutex_unlock(&in->lock);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue