summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAvi Halachmi (:avih) <avihpit@yahoo.com>2021-08-07 14:59:47 +0300
committeravih <avih@users.noreply.github.com>2021-08-07 17:30:19 +0300
commit2667dd66437723580f80671933b55963cc6bc8f5 (patch)
treecb074da3ee29ee24aa2c9dd4ef93650b902091eb
parent19c4ae004a14617c8ecff191119723d0b7731b0c (diff)
downloadmpv-2667dd66437723580f80671933b55963cc6bc8f5.tar.bz2
mpv-2667dd66437723580f80671933b55963cc6bc8f5.tar.xz
Revert "command: make current-window-scale writeable"
This reverts commit 873ae0de2af3bb84a11e5e57f6e3a8942b2263c2. The next commit will restore this functionality, with the following differences from the reverted commit: - Smaller and simpler code change. - On bad scale: use "Invalid value" (compared to "no such property"). - Doesn't combine the docs for window-scale and current-window-scale. - Doesn't remove the docs for window-scale behavior prior to 0.31.0.
-rw-r--r--DOCS/interface-changes.rst1
-rw-r--r--DOCS/man/input.rst22
-rw-r--r--etc/input.conf6
-rw-r--r--player/command.c59
4 files changed, 42 insertions, 46 deletions
diff --git a/DOCS/interface-changes.rst b/DOCS/interface-changes.rst
index ee84bc8f1c..b4927470fa 100644
--- a/DOCS/interface-changes.rst
+++ b/DOCS/interface-changes.rst
@@ -42,7 +42,6 @@ Interface changes
instead be used to specifically set the contrast to any value.
- add a `--watch-later-options` option to allow configuring which
options quit-watch-later saves
- - make `current-window-scale` writeable and use it in the default input.conf
--- mpv 0.33.0 ---
- add `--d3d11-exclusive-fs` flag to enable D3D11 exclusive fullscreen mode
when the player enters fullscreen.
diff --git a/DOCS/man/input.rst b/DOCS/man/input.rst
index 26735bf819..75841dba99 100644
--- a/DOCS/man/input.rst
+++ b/DOCS/man/input.rst
@@ -2518,20 +2518,26 @@ Property list
enabled, or after precise seeking). Files with imprecise timestamps (such
as Matroska) might lead to unstable results.
-``current-window-scale`` (RW)
+``window-scale`` (RW)
Window size multiplier. Setting this will resize the video window to the
values contained in ``dwidth`` and ``dheight`` multiplied with the value
set with this property. Setting ``1`` will resize to original video size
(or to be exact, the size the video filters output). ``2`` will set the
- double size, ``0.5`` halves the size. When reading this property, this
- returns the scale value calculated from the current window size.
+ double size, ``0.5`` halves the size.
- The similarly named ``window-scale`` option behaves like a typical mpv
- option. It does not pay attention to realtime window changes and only
- updates if the user changes its value. In most cases, you probably want
- to set ``current-window-scale`` directly.
+ See ``current-window-scale`` for the value derived from the actual window
+ size.
+
+ Since mpv 0.31.0, this always returns the previously set value (or the
+ default value), instead of the value implied by the actual window size.
+ Before mpv 0.31.0, this returned what ``current-window-scale`` returns now,
+ after the window was created.
- ``current-window-scale`` is unavailable if no video is active.
+``current-window-scale``
+ The ``window-scale`` value calculated from the current window size. This
+ has the same value as ``window-scale`` if the window size was not changed
+ since setting the option, and the window size was not restricted in other
+ ways. The property is unavailable if no video is active.
``focused``
Whether the window has focus. Might not be supported by all VOs.
diff --git a/etc/input.conf b/etc/input.conf
index f84c0b7fca..63da217f3c 100644
--- a/etc/input.conf
+++ b/etc/input.conf
@@ -118,9 +118,9 @@
#6 add gamma 1
#7 add saturation -1
#8 add saturation 1
-#Alt+0 set current-window-scale 0.5
-#Alt+1 set current-window-scale 1.0
-#Alt+2 set current-window-scale 2.0
+#Alt+0 set window-scale 0.5
+#Alt+1 set window-scale 1.0
+#Alt+2 set window-scale 2.0
# toggle deinterlacer (automatically inserts or removes required filter)
#d cycle deinterlace
#r add sub-pos -1 # move subtitles up
diff --git a/player/command.c b/player/command.c
index 0a66bbcbac..5119857986 100644
--- a/player/command.c
+++ b/player/command.c
@@ -2316,55 +2316,46 @@ static int mp_property_video_frame_info(void *ctx, struct m_property *prop,
return m_property_read_sub(props, action, arg);
}
-static int update_window_scale(struct MPContext *mpctx, double scale)
+static int mp_property_current_window_scale(void *ctx, struct m_property *prop,
+ int action, void *arg)
{
+ MPContext *mpctx = ctx;
struct vo *vo = mpctx->video_out;
if (!vo)
- return -1;
+ return M_PROPERTY_UNAVAILABLE;
struct mp_image_params params = get_video_out_params(mpctx);
int vid_w, vid_h;
mp_image_params_get_dsize(&params, &vid_w, &vid_h);
if (vid_w < 1 || vid_h < 1)
- return -1;
+ return M_PROPERTY_UNAVAILABLE;
- int s[2] = {vid_w * scale, vid_h * scale};
- if (s[0] > 0 && s[1] > 0)
- vo_control(vo, VOCTRL_SET_UNFS_WINDOW_SIZE, s);
- return 0;
+ int s[2];
+ if (vo_control(vo, VOCTRL_GET_UNFS_WINDOW_SIZE, s) <= 0 ||
+ s[0] < 1 || s[1] < 1)
+ return M_PROPERTY_UNAVAILABLE;
+
+ double xs = (double)s[0] / vid_w;
+ double ys = (double)s[1] / vid_h;
+ return m_property_double_ro(action, arg, (xs + ys) / 2);
}
-static int mp_property_current_window_scale(void *ctx, struct m_property *prop,
- int action, void *arg)
+static void update_window_scale(struct MPContext *mpctx)
{
- MPContext *mpctx = ctx;
struct vo *vo = mpctx->video_out;
if (!vo)
- return M_PROPERTY_UNAVAILABLE;
-
- switch (action) {
- case M_PROPERTY_SET:
- if (update_window_scale(mpctx, *(double *)arg) < 0)
- return M_PROPERTY_UNAVAILABLE;
- return M_PROPERTY_OK;
- case M_PROPERTY_GET_TYPE:
- case M_PROPERTY_GET: ;
- struct mp_image_params params = get_video_out_params(mpctx);
- int vid_w, vid_h;
- mp_image_params_get_dsize(&params, &vid_w, &vid_h);
- if (vid_w < 1 || vid_h < 1)
- return M_PROPERTY_UNAVAILABLE;
+ return;
- int s[2];
- if (vo_control(vo, VOCTRL_GET_UNFS_WINDOW_SIZE, s) <= 0 ||
- s[0] < 1 || s[1] < 1)
- return M_PROPERTY_UNAVAILABLE;
+ struct mp_image_params params = get_video_out_params(mpctx);
+ int vid_w, vid_h;
+ mp_image_params_get_dsize(&params, &vid_w, &vid_h);
+ if (vid_w < 1 || vid_h < 1)
+ return;
- double xs = (double)s[0] / vid_w;
- double ys = (double)s[1] / vid_h;
- return m_property_double_ro(action, arg, (xs + ys) / 2);
- }
- return M_PROPERTY_NOT_IMPLEMENTED;
+ double scale = mpctx->opts->vo->window_scale;
+ int s[2] = {vid_w * scale, vid_h * scale};
+ if (s[0] > 0 && s[1] > 0)
+ vo_control(vo, VOCTRL_SET_UNFS_WINDOW_SIZE, s);
}
static int mp_property_display_fps(void *ctx, struct m_property *prop,
@@ -6710,7 +6701,7 @@ void mp_option_change_callback(void *ctx, struct m_config_option *co, int flags,
}
if (opt_ptr == &opts->vo->window_scale)
- update_window_scale(mpctx, opts->vo->window_scale);
+ update_window_scale(mpctx);
if (opt_ptr == &opts->cursor_autohide_delay)
mpctx->mouse_timer = 0;