libretro / RetroArch

Cross-platform, sophisticated frontend for the libretro API. Licensed GPLv3.
http://www.libretro.com
GNU General Public License v3.0
10.31k stars 1.83k forks source link

Please expose black frame insertion option in Android menus #14874

Open M-a-r-k opened 1 year ago

M-a-r-k commented 1 year ago

More and more phones have 120Hz-capable screens now. RetroArch supports black frame insertion on Android, but the user has to manually edit retroarch.cfg (video_black_frame_insertion = "1"). And maybe that setting will be reverted if you save settings from the GUI?

I understand that some LCD screens don't like BFI; see issue #13866. But there, both screens at issue were 60Hz only and BFI is useless then.

Probably most/all 120Hz-capable OLED screens work fine with BFI, so it would be nice to have an easy way to enable it. You could always show a first-time warning and recommend/force it only be used with 100Hz+ refresh rate.

LibretroAdmin commented 1 year ago

We had it previously exposed before, then someone with a 60Hz device turned it on, saw it after ghosting after the program exited, and freaked out. So we hid it again.

I guess if we were to reintroduce it again we have to do it in such a way that it only shows up for > 90Hz displays or something. We don't want to deal with a ton of people on 60Hz devices freaking out and pretending RetroArch is supposedly damaging their device when it's just the ghosting after imaging that takes a while to wear off.

hizzlekizzle commented 1 year ago

It could potentially cause problems even on higher-refresh devices. AFAIK, it's more related to the type of panel and whether it suffers from voltage accumulation.

M-a-r-k commented 1 year ago

Yes, I saw this YouTube video about emulating F-Zero on a Steam Deck (not with BFI) causing image retention. That game has regions of the screen which flash alternate colors for a length of time, so essentially any on/off flashing regions in alternate frames could be affected.

"Uneven" 2:1 or 1:2 BFI on a 180Hz LCD would probably be less likely to cause image retention. Or 2:2 on a 240Hz screen.

Apparently many LCD TVs have built-in BFI-like feature which would be preferable to doing it in software. The display will strobe its backlight rather than showing a black image repeatedly. I'm guessing OLED screens generally don't have a problem with BFI.

A warning explaining that some LCD screens may exhibit image retention, and suggesting the user test the setting for a brief period first would be enough I think.

Ophidon commented 1 year ago

Hello,

I'm the author of the last updates to RetroArch bfi (afaik, it's been a little while). As mentioned, image retention with 1:1 bfi at 120hz is a significant issue to the point of making the feature useless. Personally I've yet to see an lcd (I own no oleds) that -doesn't- suffer from it. Unless there are indeed oleds or other lcds out there that dont have the voltage accumulation issue at 120hz, I'd almost recommend disabling 120hz bfi universally in RetroArch.

And as the last post mentioned, 180hz 1:2 bfi is less susceptible, to the point that of my small sample size of 3 240hz screens I've tested it with, none has had -any- image retention after hours and hours of use. This is of course already built into retroarch, and is what I always use myself, though if I ever get a 360hz screen, I'll switch to using 300hz for bfi.

As it works now, 240hz does 1(on):3(off), and while this amounts to MUCH less image retention that 1:1 120hz, I've still noticed a very small amount, and thus have felt safer with the literal zero issues at 180hz. 2:2 at 240hz probably would solve it fully as well, but wouldn't be as much of an image clarity gain as 1:2 at 180hz, so kind of pointless.

As for just relying on hardware BFI, that would of course be an optimal solution. But there are regrettably VERY few screens that support 60hz strobing. The manufacturers don't want to deal with the complaints about eyestrain and headaches, I'd suppose. Never mind the fact that somehow europe survived ~50 years of 50hz CRTs. Anyway, a ton do 120hz (or down as low as like 85hz, which still doesn't help for 60hz content) but that is no better for motion clarity than than leaving it off for 60hz content, you're just turning a blur into 2 sharp double images doing that, looks terrible either way.

M-a-r-k commented 1 year ago

OLED works differently from LCDs, so BFI should work fine on any OLED screen. (No voltage build up, the D in OLED is for diode, and current only flows one way through those.)

I think a warning about LCD image retention in the menu would be good enough, rather than making it a pain to enable or disable BFI where it doesn't cause a problem. That could mean a lot of .cfg file editing where the user wants BFI with some cores but not others, or wants to temporarily disable it for brighter screen or because they set the phone display to 60Hz to save battery.

hizzlekizzle commented 1 year ago

Personally I've yet to see an lcd (I own no oleds) that -doesn't- suffer from it

IIRC, TFT LCDs don't care. I had an ASUS VG248QE with a TFT and it didn't have any persistence issues. I think it's mostly IPS panels that have it.

I think a warning about LCD image retention in the menu would be good enough

You would think/hope that, but many people do not read those warnings, don't pay attention to them or don't understand them (language barrier). Having settings that negatively affect user experience outside of the program, with a likelihood of affecting many/most users is not something I support.

In this case, the persistence is a very scary effect that sure looks/acts like permanent damage on a thousand-dollar device.

M-a-r-k commented 1 year ago

How about instead requiring the user to edit the config file to add an entry to tell RetroArch to show the BFI menu item? Something like video_show_black_frame_insertion_menu = "true"

That way, the user still has to manually change the config file (as currently), but after doing that BFI could be enabled and disabled easily.

XavierUniverse99 commented 2 weeks ago

More and more phones have 120Hz-capable screens now. RetroArch supports black frame insertion on Android, but the user has to manually edit retroarch.cfg (video_black_frame_insertion = "1"). And maybe that setting will be reverted if you save settings from the GUI?

I understand that some LCD screens don't like BFI; see issue #13866. But there, both screens at issue were 60Hz only and BFI is useless then.

Probably most/all 120Hz-capable OLED screens work fine with BFI, so it would be nice to have an easy way to enable it. You could always show a first-time warning and recommend/force it only be used with 100Hz+ refresh rate.

Any way to keep the phones refresh rate at 120 while in retroarch. I can't manage to have "video" settings to let me do 120hz.