0
0
mirror of https://github.com/mpv-player/mpv.git synced 2024-09-20 12:02:23 +02:00

video: change --video-zoom behavior

Use the scaled video size (i.e. as shown on the window) as reference for
zoom. This is the easiest way to fix different width/height scale
factors  as they happen when zooming video with a pixel aspect ratio
other than 1:1.

Also fix the unscaled mode, so that it 1. doesn't scale even with
--video-zoom, and 2. doesn't scale by small amounts when the video is
cropped by making the window smaller than the video.
This commit is contained in:
wm4 2013-12-13 22:25:38 +01:00
parent ebf6d0004b
commit 37319ab644
2 changed files with 13 additions and 6 deletions

View File

@ -2667,6 +2667,10 @@ OPTIONS
``--video-zoom`` option is set to a value other than ``1``, scaling is
enabled, but the video isn't automatically scaled to the window size.)
The video and monitor aspects aspect will be ignored. Aspect correction
would require to scale the video in the X or Y direction, but this option
disables scaling, disabling all aspect correction.
Note that the scaler algorithm may still be used, even if the video isn't
scaled. For example, this can influence chroma conversion.
@ -2674,10 +2678,11 @@ OPTIONS
``--video-zoom=<value>``
Adjust the video display scale factor by the given value. The unit is in
fractions of original video size.
fractions of the (scaled) window video size.
For example, given a 1280x720 video, ``--video-zoom=-0.1`` would make the
video by 128 pixels smaller in X direction, and 72 pixels in Y direction.
For example, given a 1280x720 video shown in a 1280x720 window,
``--video-zoom=-0.1`` would make the video by 128 pixels smaller in
X direction, and 72 pixels in Y direction.
This option is disabled if the ``--no-keepaspect`` option is used.

View File

@ -508,10 +508,12 @@ static void src_dst_split_scaling(int src_size, int dst_size,
int *dst_start, int *dst_end,
int *osd_margin_a, int *osd_margin_b)
{
if (unscaled)
if (unscaled) {
scaled_src_size = src_size;
zoom = 0.0;
}
scaled_src_size += zoom * src_size;
scaled_src_size += zoom * scaled_src_size;
align = (align + 1) / 2;
*src_start = 0;
@ -537,7 +539,7 @@ static void src_dst_split_scaling(int src_size, int dst_size,
*dst_end = dst_size;
}
if (unscaled && zoom == 1.0) {
if (unscaled) {
// Force unscaled by reducing the range for src or dst
int src_s = *src_end - *src_start;
int dst_s = *dst_end - *dst_start;