1 (edited by Nintendo Maniac 64 06-07-2022 22:44:21)

Topic: Interpolate "To screen" refersh but at integer, non-fractional values?

Just a simple question - is there some way to have the "To screen" interpolation option only work in full integers to whatever the maximum frame rate would be without exceeding the refresh rate?

What made me think of this is that my friend just recently bought a 75Hz monitor that supports adaptive sync, and I can't help but wonder if on such a monitor that playing 24fps video content would still interpolate to 75Hz (3.125x) rather than to 72Hz (3.000x).

And yes, you could make manual separate profile for individual frame rates, e.g. 3x for 20 to 25fps and 2x for 30fps but, with variable refresh displays becoming more common, this seems like a simple function that'd become ever-more useful going forward (especially with high-refresh monitors where this manual setup would be particularly tedious, e.g. on a 144Hz adaptive sync monitor you'd need to configure 7x for 20fps, 6x for 24fps, 5x for 25fps, 4x for 30fps, 3x for 48fps, 2x for 50fps and 60fps...).

Re: Interpolate "To screen" refersh but at integer, non-fractional values?

If you want integer smooth factor (integer mitliplier) then it is mean you want to see every source frame in output.
This option is already done. Use SVP profile setting: Frames interpolation mode = 1m

3 (edited by Nintendo Maniac 64 08-07-2022 03:55:59)

Re: Interpolate "To screen" refersh but at integer, non-fractional values?

Maybe you're misunderstanding me?

With the test scenario of a 25fps video clip, the refresh rate at 60Hz, SVP set with "To screen" and "1m", that still results in it interpolating by 2.4x to 60fps with 60 unique frames in the resulting video...and 2.4 is not an integer value.

Re: Interpolate "To screen" refersh but at integer, non-fractional values?

You can imagine 2.4x ratio with 1m mode as 2x ratio and some additional interpolated frames:
2x: 1, 1.5, 2, 2.5, 3 ...
2.4x: 1, 1.5, 2, 2.3, 2.7, 3 ...

Where: 1 and 2 - source frames
1.5 - calculated intermediate frame beeting 1 and 2.

Or explain me please why you want integer factor in case of refresh rate not multiple to framerate?

5 (edited by Nintendo Maniac 64 07-08-2022 02:25:57)

Re: Interpolate "To screen" refersh but at integer, non-fractional values?

I'm just trying to figure out if there's an easy way on a 144Hz VRR monitor to get all of the various typical frame rates interpolating at their maximum integer factors without manually creating profiles for every single framerate.

From what I can tell, one currently has to manually create 6 individual profiles (7x for 20fps, 6x for 24fps, 5x for 25fps, 4x for 30fps, 3x for 48fps, 2x for 50fps and 60fps), and that's without considering that the user may very well want different settings for different resolutions as well, meaning you could end up with something like 18 or more (6 for 1080p, 6 for 720p, 6 for 480p and below, etc).

EDIT: make that 7 individual profiles - I just stumbled across some 18fps videos which, for 144Hz, would use 8x interpolation.

Re: Interpolate "To screen" refersh but at integer, non-fractional values?

all settings -> frc.target.tolarance, you can set it to the big enough value

Re: Interpolate "To screen" refersh but at integer, non-fractional values?

Chainik wrote:

all settings -> frc.target.tolarance, you can set it to the big enough value

This would be a good solution, except that it allows for rates higher than the monitor can do as well.


I have the same desire for SVP as the OP.  I'd love to be able to set a range equal to my adaptive sync range, and have a target frame rate within that range. Could this be a feature request?

Is the adaptive sync range on a monitor available as information that SVP could attain?  I have different monitors with separate ranges that I watch videos with SVP on both. Would be great to get that information and adjust between them automatically.

Maybe have a simple target selection between: Low, Mid, or High.  I'd generally choose the Low target since I don't need movies to be doing 6x+ interpolation if 2x or 3x gets it into my monitors range.

Thank you!

8 (edited by Nintendo Maniac 64 07-08-2022 03:20:01)

Re: Interpolate "To screen" refersh but at integer, non-fractional values?

Apologies for the late response - for some reason I was not getting email notification of replies...

Nevertheless, I was reminded of this thread when I stumbled across two random 18fps videos which is an uncommon enough framerate that I didn't have a manually-created profile for it.


David Webb wrote:
Chainik wrote:

all settings -> frc.target.tolarance, you can set it to the big enough value

This would be a good solution, except that it allows for rates higher than the monitor can do as well.

Yeah, I've discovered another scenario where, even on a non-VRR display, getting an integer value is ideal and the issue of it going to the integer above is problematic - Linux combined with mpv-plugin-xrandr.

(do note however that "mpv-plugin-xrandr" is by default configured to switch to your monitor's lowest refresh rate that's an integer of the video's frame rate which makes it poor for use with SVP; see my comment on the project's git on how to make it instead switch to the highest refresh rate that's an integer of the video's frame rate so as to make it work well with SVP)


If you use a monitor that maxes out at 75Hz and, for 30fps videos, your have your Linux PC automatically change your monitor refresh rate 60Hz via mpv-plugin-xrandr, SVP will still interpolate that 30fps video by 2.5x to 75fps if you use the "to screen" setting in SVP.  Furthermore, if you adjust the frc.target.tolerance setting to a larger value accordingly to get it to only interpolate to a non-fractional integer value, it will instead end up interpolating by 3x to 90fps.

I think this is because 75Hz is exactly in between 60 and 90, and SVP defaults to rounding up.  I say this because, with the same scenario but with a 24fps video and having your 75Hz monitor automatically change to 72Hz, adjusting the frc.target.tolerance setting accordingly and using "to screen" does indeed result in 24fps being interpolated by 3x to 72fps.

The "frc.target.tolerance" setting work-around would work flawlessly if it instead just always rounded down - this would allow even the rare monitor that maxes out at 85Hz would still have a 30fps video interpolated by 2x to 60fps when using "to screen" (or, in a more common scenario with a 144Hz monitor, have 25fps videos be interpolated by 5x to 125fps rather than to 150fps).