diff options
Diffstat (limited to 'mpvcore')
-rw-r--r-- | mpvcore/command.c | 22 | ||||
-rw-r--r-- | mpvcore/options.c | 6 |
2 files changed, 19 insertions, 9 deletions
diff --git a/mpvcore/command.c b/mpvcore/command.c index 35e72cb3ad..bce0300bc5 100644 --- a/mpvcore/command.c +++ b/mpvcore/command.c @@ -1478,22 +1478,30 @@ static int mp_property_fps(m_option_t *prop, int action, void *arg, static int mp_property_aspect(m_option_t *prop, int action, void *arg, MPContext *mpctx) { + struct sh_video *sh_video = mpctx->sh_video; if (!mpctx->sh_video) return M_PROPERTY_UNAVAILABLE; switch (action) { case M_PROPERTY_SET: { - float f = *(float *)arg; - if (f < 0.1) - f = (float)mpctx->sh_video->disp_w / mpctx->sh_video->disp_h; - mpctx->opts->movie_aspect = f; + mpctx->opts->movie_aspect = *(float *)arg; reinit_video_filters(mpctx); mp_force_video_refresh(mpctx); return M_PROPERTY_OK; } - case M_PROPERTY_GET: - *(float *)arg = mpctx->sh_video->aspect; + case M_PROPERTY_GET: { + float aspect = -1; + struct mp_image_params *params = sh_video->vf_input; + if (params && params->d_w && params->d_h) { + aspect = (float)params->d_w / params->d_h; + } else if (sh_video->disp_w && sh_video->disp_h) { + aspect = (float)sh_video->disp_w / sh_video->disp_h; + } + if (aspect <= 0) + return M_PROPERTY_UNAVAILABLE; + *(float *)arg = aspect; return M_PROPERTY_OK; } + } return M_PROPERTY_NOT_IMPLEMENTED; } @@ -1874,7 +1882,7 @@ static const m_option_t mp_properties[] = { { "fps", mp_property_fps, CONF_TYPE_FLOAT, 0, 0, 0, NULL }, { "aspect", mp_property_aspect, CONF_TYPE_FLOAT, - CONF_RANGE, 0, 10, NULL }, + CONF_RANGE, -1, 10, NULL }, M_OPTION_PROPERTY_CUSTOM("vid", mp_property_video), { "program", mp_property_program, CONF_TYPE_INT, CONF_RANGE, -1, 65535, NULL }, diff --git a/mpvcore/options.c b/mpvcore/options.c index d73faa1cbe..9cffb07284 100644 --- a/mpvcore/options.c +++ b/mpvcore/options.c @@ -497,8 +497,10 @@ const m_option_t mp_opts[] = { // scaling: {"sws", &sws_flags, CONF_TYPE_INT, 0, 0, 2, NULL}, {"ssf", (void *) scaler_filter_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL}, - OPT_FLOATRANGE("aspect", movie_aspect, 0, 0.1, 10.0), - OPT_FLOAT_STORE("no-aspect", movie_aspect, 0, 0), + // -1 means auto aspect (prefer container size until aspect change) + // 0 means square pixels + OPT_FLOATRANGE("aspect", movie_aspect, 0, -1.0, 10.0), + OPT_FLOAT_STORE("no-aspect", movie_aspect, 0, 0.0), OPT_FLAG_CONSTANTS("flip", flip, 0, 0, 1), |