Mpv's image scaling user shader bsed on jinc, similar to mpv's built in ewa or polar scaler.
Chroma
folder contains shaders for upscaling chroma only
Luma
folder contains shaders for upscaling and downscaling luma only
jincUpscale
is optimised for and only does upscaling
jincUpscaleUnsharp
is optimised for and only does upscaling, also provides unsharp mask
jincUpscaleHDR
is optimised for and only does upscaling; HDR version
jincUpscaleUnsharpHDR
is optimised for and only does upscaling, also provides unsharp mask; HDR version
jincDownscale
is optimised for and only does downscaling
jincDownscaleUnsharp
is optimised for and only does downscaling, also provides unsharp mask
jincDownscaleGaussian
is optimised for and only does downscaling, also provides gaussian blur
jincDownscaleGaussianUnsharp
is optimised for and only does downscaling, also provides gaussian blur and unsharp mask
- If you place this shader in the same folder as your
mpv.conf
, you can use it withglsl-shaders-append="~~/FILE_NAME"
. For an exampleglsl-shaders-append="~~/jincUpscale.glsl"
. - Requires
vo=gpu-next
. - Note that defualt settings are "simbolic" only, should change them to your liking.
- Note that all downscale shaders can be used for both SDR and HDR content.
- Note that HDR versions are just gamma light so you can use them for SDR
For better understanding of these settings see research https://github.com/garamond13/Finding-the-best-methods-for-image-scaling
Which kernel function to use for calculation of kernel weights. See "KERNEL functions LIST" inside the shader for available kernel functions.
Kernel radius determines the kernel size, which is ceil(2 * kernel radius)^2
when upsampling (upscale) or ceil(2 * kernel radius * downscale ratio * antialiasing amount)^2
when downsampling (downscale).
Effectively values smaller than 1 sharpen the kernel and values larger than 1 blur the kernel, 1 is neutral or no effect. Only affects widowed sinc kernels.
Reduces ringing artifacts.
Effectively trades between aliasing and ringing artifacts. The default value is 1.0.
Some kernel functions take additional parameters, they are set here.
See references for:
COSINE (power of cosine) - https://en.wikipedia.org/wiki/Window_function#Power-of-sine/cosine_windows
GARAMOND (power of garamond) - https://github.com/garamond13/power-of-garamond-window
BLACKMAN (power of blackman) - https://github.com/garamond13/power-of-blackman
GNW (generalized normal window) - https://ieeexplore.ieee.org/document/6638833
SAID - https://www.hpl.hp.com/techreports/2007/HPL-2007-179.pdf
FSR (modified fsr kernel, based on https://github.com/GPUOpen-Effects/FidelityFX-FSR) - for referernce see the research above
BCSPLINE - https://www.cs.utexas.edu/~fussell/courses/cs384g-fall2013/lectures/mitchell/Mitchell.pdf
Contrast C
is equivalent to mpv's --sigmoid-slope
and midpoint M
is equivalent to mpv's --sigmoid-center
.
- Unsharp mask works like this:
sharpened = original + (original − blurred) * amount
. - Blur kernel radius is independent from scaling kernel radius.
- For shaders with both unsharp mask and gaussian blur all settings are independent.
Gaussian blur sigma value, controls the blur intensity and how much it will be spread accros the blur kernel.
Determines how many neighboring pixels will contribute to the blurred value of the center pixel inside the blur kernel.
Sharpening amount or strenght.