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("keepaspect-window", keepaspect_window, 0),
|
||||||
OPT_FLAG("hidpi-window-scale", hidpi_window_scale, 0),
|
OPT_FLAG("hidpi-window-scale", hidpi_window_scale, 0),
|
||||||
OPT_FLAG("native-fs", native_fs, 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),
|
OPT_DOUBLERANGE("video-timing-offset", timing_offset, 0, 0.0, 1.0),
|
||||||
#if HAVE_X11
|
#if HAVE_X11
|
||||||
OPT_CHOICE("x11-netwm", x11_netwm, 0,
|
OPT_CHOICE("x11-netwm", x11_netwm, 0,
|
||||||
|
@ -612,8 +613,6 @@ const m_option_t mp_opts[] = {
|
||||||
{"decoder+vo", 3})),
|
{"decoder+vo", 3})),
|
||||||
OPT_FLAG("video-latency-hacks", video_latency_hacks, 0),
|
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_FLAG("untimed", untimed, 0),
|
||||||
|
|
||||||
OPT_STRING("stream-dump", stream_dump, M_OPT_FILE),
|
OPT_STRING("stream-dump", stream_dump, M_OPT_FILE),
|
||||||
|
|
|
@ -50,6 +50,7 @@ typedef struct mp_vo_opts {
|
||||||
|
|
||||||
char *mmcss_profile;
|
char *mmcss_profile;
|
||||||
|
|
||||||
|
double override_display_fps;
|
||||||
double timing_offset;
|
double timing_offset;
|
||||||
|
|
||||||
// vo_drm
|
// vo_drm
|
||||||
|
@ -224,7 +225,6 @@ typedef struct MPOpts {
|
||||||
int autosync;
|
int autosync;
|
||||||
int frame_dropping;
|
int frame_dropping;
|
||||||
int video_latency_hacks;
|
int video_latency_hacks;
|
||||||
double frame_drop_fps;
|
|
||||||
int term_osd;
|
int term_osd;
|
||||||
int term_osd_bar;
|
int term_osd_bar;
|
||||||
char *term_osd_bar_chars;
|
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)
|
int action, void *arg)
|
||||||
{
|
{
|
||||||
MPContext *mpctx = ctx;
|
MPContext *mpctx = ctx;
|
||||||
double fps = mpctx->opts->frame_drop_fps;
|
double fps = mpctx->video_out ? vo_get_display_fps(mpctx->video_out) : 0;
|
||||||
struct vo *vo = mpctx->video_out;
|
if (fps > 0 && action != M_PROPERTY_SET)
|
||||||
if (vo)
|
return m_property_double_ro(action, arg, fps);
|
||||||
fps = vo_get_display_fps(vo);
|
return mp_property_generic_option(mpctx, prop, action, arg);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mp_property_framedrop(void *ctx, struct m_property *prop,
|
static int mp_property_framedrop(void *ctx, struct m_property *prop,
|
||||||
|
|
|
@ -163,6 +163,7 @@ struct vo_internal {
|
||||||
uint64_t current_frame_id;
|
uint64_t current_frame_id;
|
||||||
|
|
||||||
double display_fps;
|
double display_fps;
|
||||||
|
double reported_display_fps;
|
||||||
int opt_framedrop;
|
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,
|
mp_read_option_raw(vo->global, "framedrop", &m_option_type_choice,
|
||||||
&in->opt_framedrop);
|
&in->opt_framedrop);
|
||||||
|
|
||||||
double display_fps;
|
double fps = 0;
|
||||||
mp_read_option_raw(vo->global, "display-fps", &m_option_type_double,
|
vo->driver->control(vo, VOCTRL_GET_DISPLAY_FPS, &fps);
|
||||||
&display_fps);
|
|
||||||
|
|
||||||
if (display_fps <= 0)
|
|
||||||
vo->driver->control(vo, VOCTRL_GET_DISPLAY_FPS, &display_fps);
|
|
||||||
|
|
||||||
pthread_mutex_lock(&in->lock);
|
pthread_mutex_lock(&in->lock);
|
||||||
|
|
||||||
if (in->display_fps != display_fps) {
|
in->reported_display_fps = 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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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);
|
pthread_mutex_unlock(&in->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue