Commit Graph

860 Commits (f11b43227af2269eda610d26a13d5c487e1d4618)

Author SHA1 Message Date
Stenzek 86333e9977
System: Fix crash on starting non-database game 1 year ago
Stenzek 8bfc31a59c
GameDatabase: Refactor disc sets
Store the sets in a separate file, and use pointers to reference instead
of string matching. This allows us to use the unsuffixed display names.
1 year ago
Stenzek a8b4bb3fce
GameDatabase: Add sort title, localized title, and save title fields 1 year ago
Stenzek 1ef1a2d3f4
System: Add XZ save state compression
For when space is really at a premium.

Also use CompressHelpers to reduce duplication.
1 year ago
Stenzek 86006e3d0c
System: Apply setting restrictions before gamedb
Allows overriding of more options.
1 year ago
Stenzek 7a359e54be
GPU: Add separate scaling and FMV scaling options 1 year ago
Stenzek c0c022591c
System: Synchronize input binding state on startup
This means that buttons which are pushed should register as pushed when
the system starts, rather than requiring them to be released and pressed
again.

Hopefully will allow passthrough of controllers that ground/press button
combinations to indicate the type of controller present.
1 year ago
Stenzek f464d42be5
AudioStream: Fix glitches when disabling fast-forwarding
Usually happened at high frame rates.
1 year ago
Stenzek f569448ea1
System: Centralize pause checks 1 year ago
Stenzek a660c13625
System: Always adjust video size for capture
Fixes auto resolution size with non-multiple-of-4 window sizes.
1 year ago
Stenzek b6b1a5e33c
CDROM: Add option to disable speedup on MDEC/FMVs 1 year ago
Stenzek 311e93fae4
FullscreenUI: Use game path for loading screen image
Makes it work with custom titles.
1 year ago
Stenzek 4440ae3b78
GPUThread: Store copy of game info
Don't save it in FullscreenUI.
1 year ago
Stenzek 278614a415
FullscreenUI: Display game cover when loading 1 year ago
Stenzek b07998512e
Qt: Refactor render window lifecycle
Remove multiple sources of truth, eliminate bugs in handling edge cases
when switching between modes.
1 year ago
Stenzek 43543ddedc
FullscreenUI: Improve icons in file selector 1 year ago
Stenzek cd2d0503da
System: Fix frame advance+runahead stepping 2 frames 1 year ago
Stenzek fb7772871c
GameDatabase: Use string_view for disc sets
Avoid the allocations, apparently forgot this one.
1 year ago
Davide Pesavento 280c0036eb
FullscreenUI: Change a few icons for improved consistency (#3463) 1 year ago
Stenzek 7b1c8a0407
System: Log init/boot time 1 year ago
KamFretoZ fa0a926133
Deps: Bump FontAwesome to 6.7.2 (#3456) 1 year ago
Davide Pesavento 70225f8345 Always use CTAD with std::unique_lock 1 year ago
Stenzek 5eb8578edc
System: Save undo state on reset 1 year ago
Stenzek cb2dfabeeb
Qt: Backport undo load state timestamps 1 year ago
Stenzek 5b40d7902a
System: Shut down GPU backend before other components
Prevents a rare crash on shutdown if OSD stats were enabled.
1 year ago
Stenzek 24cd6fa11b
Hotkeys: Add switch to previous/next disc hotkeys 1 year ago
Stenzek 66934cc5b8
System: Include queued frames in input latency stats 1 year ago
Stenzek 5eedecd811
System: Swap back gamesettings->safe mode order
Fixes e.g. round texcoords warning being shown on games that need it.

But don't display CD speedup warnings if the gamedb will disable them.
1 year ago
Stenzek 4a707afae1
System: Show safe mode warning after applying gamesettings
Prevents warning about things that have already been disabled.
1 year ago
Stenzek 7932618424
Bus: Enable SIO2 on any unknown BIOS
Not all PS2 BIOSes are in the list.
1 year ago
Stenzek 437430cbc4
System: Pull screenshot format from path extension 1 year ago
Stenzek 4c1aba62fc
System: Remove unused function
And rename instances of "filename" to "path".
1 year ago
Stenzek d286b96c2d
Achievements: Swap RAInterface for RAIntegration via rc_client 1 year ago
Stenzek 1bb1354d4e
Achievements: Use rc_client as source of truth for HC mode 1 year ago
Stenzek b794e841a9
Achievements: Improve HC self-disable 1 year ago
Stenzek 5034fb943c
Hotkeys: Rearrange categories for some shortcuts and improve naming 1 year ago
Stenzek bbdc6ab4e0
Misc: Fix a bunch of code analysis warnings
Quite a few of these were legitimate.
2 years ago
Stenzek 3bf5ded0d2
FullscreenUI: Fix various issues
- Pause menu losing key focus the first time it's opened.
- Pause menu being unopenable after close when paused.
- Key nav not being enabled after closing game via main UI.
2 years ago
Stenzek 2311c8d287
Settings: Convert dithering/true color options to a dropdown
Half of them are mutually exclusive, so this simplifies things.
Fewer options = better, right?
2 years ago
Stenzek 32b09193d1
Qt: Move force video timing to console settings
Since it's related to the region, it makes sense to be in here.
And it frees up precious vertical space.
2 years ago
Stenzek 62d7a73381
GPU/HW: Add 'Scaled Interlacing' option
Disabling this option causes rendering to skip N lines instead of 1
line, where N is the internal resolution multiplier.
2 years ago
Stenzek 8a0400ad2c
GameList: Don't try to scan gpudump files 2 years ago
Stenzek 8cfd843d8f
System: Fix depth clear threshold not applying immediately 2 years ago
Stenzek ec7c83a58e
Settings: Fix race toggling OSD messages 2 years ago
Stenzek 3ea26cc910
GPU: Rewrite automatic resolution scaling
Make it play nice with rewind/runahead.
2 years ago
Stenzek 369f62318f
Cheats: Only display codes for selected revision 2 years ago
Stenzek e9bfca8cca
System: Add 'Fast Forward Memory Card Access' option
Does what it says on the tin.
2 years ago
Stenzek e0620fcd40
System: Fix setting-altering game patch behaviour
e.g. overclock was only half applying
2 years ago
Stenzek 5ae32d3c70
System: Fix black screen when changing options while paused 2 years ago
Stenzek 46ae3e55ea
Cheats: Show disabled code count when HC/safe mode is active 2 years ago
Stenzek 4236beabaf
System: Fix setting-altering patches not applying on startup 2 years ago
Stenzek 81bca06707
System: Add hash to OnGameChanged 2 years ago
Stenzek 2cfc39e874
System: Move cheat reload to Initialize() 2 years ago
Stenzek 59773509af
System: Recreate memory save states when device options change 2 years ago
Stenzek 64d3716cfd
GPU: Further simplify draw rect calculation
Remove "Stretch Vertically" option, it was very confusing to users.

Integer scale will prefer whichever direction gets a larger draw
rectangle/preserves as much detail.
2 years ago
Stenzek 804d90d48f
System: Fix overriding console region 2 years ago
Stenzek 96058f5d7e
System: Use recreation logic for toggling GPU threading 2 years ago
Stenzek d314b25f91
System: Fix per-game achievements hardcore mode
By mostly reverting 4dd6365a99, I didn't
think of all the implications. Not just per-game HC mode, but it's also
problematic on Android too.
2 years ago
Stenzek 4dd6365a99
System: Simplify HC disable confirm on startup
Use one path on all platforms, always asynchronous.
2 years ago
Stenzek 4da7692a2d
System: Adjust initialization order to better fit FullscreenUI
Fixes jankyness of rendering the landing page when trying to resume
a game with achievements active, or when loading state.
2 years ago
Stenzek 6a09d6ecda
Achievements: Don't store hash as a string
This is needed to store achievement metadata in the game list.
2 years ago
Stenzek dc5f85a34e
System: Display safe mode warning when toggling on 2 years ago
Stenzek 4da1f613b6
System: Simplify CD speedup warnings 2 years ago
Stenzek f045a1742d
GPUThread: Fix order of updating state
Fixes unoverwritten textures not dumping on system shutdown.
2 years ago
Stenzek af58740f5d
System: Always display OSD warning messages
I regretted what I did in f2720b98dd
less than a week after I pushed the change.

As a compromise, only display the unsafe settings warnings on startup.
2 years ago
Stenzek 78902d7632
FullscreenUI: Fix several more unsafe reads 2 years ago
Stenzek 9b8d2a88de
System: Required changes for Android 2 years ago
Stenzek e1cbb50c64
GPU: Fix various capture/screenshot issues
- Simplify functions for rendering display.

- Post-processing should only when the target size matches the window.
  Otherwise the shaders are constantly recompiled.

- Include border overlay in capture/screenshots when above condition
  is satisfied.

- Relax video alignment size when using screen resolution + auto.

- Fix "Internal Resolution (Uncorrected)" capture mode.
2 years ago
Stenzek 6cba825bac
System: Add fatal error shutdown path
Switch to a null backend and shut down the system instead of crashing.
2 years ago
Stenzek d52bf795e4
GPU: Split backend into Backend+Presenter 2 years ago
Stenzek 8f19ac2dee
System: Set rapidyaml error handlers on startup
That way it can be used in multiple places.
2 years ago
Stenzek 08d2586a86
System: Allow host to set async worker count
For regtest.
2 years ago
Stenzek 1481c1d231
System: Post-processing is shut down on GPU thread 2 years ago
Stenzek e554456a00
System: Fix blank display on pause-on-start 2 years ago
Stenzek 10de915ae0
System: Remove 'sync_to_host_with_vsync'
Disabling the throttler with threaded rendering just leads to the CPU
thread pushing multiple frames, and getting backpressured from the GPU
thread. In other words, input lag.
2 years ago
Stenzek f6f709bcc5
System: Fix vsync preventing fast forward/turbo 2 years ago
Stenzek 0dc257abe4
System: Set time constraints for GPU thread on MacOS
Fixes erratic frame times.
2 years ago
Stenzek f6c7681ef0
ImGuiOverlays: Double buffer input OSD and add vibration 2 years ago
Stenzek 3621705933
Achievements: Ensure loading old states behave the same as new 2 years ago
Stenzek 035762af94
System: Fix subimage change OSD message 2 years ago
Stenzek e4dea69713
System: Drop state load OSD duration to quick 2 years ago
Stenzek e43d7046ba
Achievements: Attempt relogin on system boot
And display an error notification if login fails, instead of
invalidating the token.
2 years ago
Stenzek 29934d62c4
System: Improve rewind behaviour
- Fix crash when rewinding before first state is saved.
- Always save a rewind state immediately after normal save state load.
- Don't toss the last rewind state when rewinding, that way there is
  always at least one state to rewind to.
2 years ago
Stenzek 4449ae7904
Settings: Rearrange fields to avoid padding 2 years ago
Stenzek 561397a53c
CDROM: Add 'maximum' read speedup option
"Instant" seek is now renamed to Maximum as well, for consistency.
2 years ago
Stenzek 0960160589
System: Don't check for subchannel with GPU dump 2 years ago
Stenzek db14824d61
System: Use task queue for saving states/screenshots/gpudumps
System shutdown no longer needs to block. Gets rid of the slight
hitch when shutting down and saving state with the Big Picture UI.
2 years ago
Stenzek 37e5e64ddc
System: Move state display updates to call sites
Fixes black frames when changing settings with runahead/rewind enabled.
2 years ago
Stenzek f3b7686457
System: Fix crash with memory save states + renderer switch 2 years ago
Stenzek dcd439e7d8
GTE: Add 'Free Camera' feature 2 years ago
Stenzek a08acdb93a
System: Improve texture recycling when changing rewind/runahead settings
Fix suprious failures when changing rewind settings when low on VRAM.
2 years ago
Stenzek b76618fdf4
System: Should call PGXP Reset not Initialize() in InternalReset() 2 years ago
Stenzek e0877c1922
System: Add IsUsingPS2BIOS() 2 years ago
Stenzek 7228f6f1cf
System: Don't fail startup if cpuinfo init fails 2 years ago
Stenzek 82a843c121
RegTest: Log state and RAM hashes on exit
Useful for checking determinism.
2 years ago
Stenzek 1ed9e609a5
RegTest: Support replaying GPU dumps 2 years ago
Stenzek dd180f2fd6
System: Fix dump VRAM writes not updating on GPU thread 2 years ago
Stenzek dc18ce2c2a
System: Warn if fastmem mode is not optimal 2 years ago
Stenzek f3f99f7eac
FullscreenUI: Support renderer swapping without restart 2 years ago
Stenzek 9e04b0bf55
GPU/TextureCache: Add 'Always Track Uploads' option 2 years ago
Stenzek 515a4d07fb
System: Fix pre-frame sleep getting stuck 2 years ago
Stenzek 0aa89ec7b0
System: Fix some GPU settings not updating 2 years ago
Stenzek 62285dcf33
Settings: Split into GPU and main settings
That way the GPU thread copy doesn't need fields it never touches.
2 years ago
Stenzek 26db661a05
GPU: Remove global indirection 2 years ago
Stenzek c4b0430d5e
System: Remove unused SetExpansionROM() 2 years ago
Stenzek 7826c258b0
System: Frame step after runahead
Makes it behave as expected.
2 years ago
Stenzek 2d659fc3eb
GPU: Move backend work off CPU thread 2 years ago
Stenzek 831c982f3b
System: Rewrite memory save state handling
Makes it more friendly to GPU thread.
2 years ago
Stenzek f010d81652
ISOReader: Add XA and raw extraction modes 2 years ago
Stenzek b634eecd21
System: Allow separate configuration for multi-disc games 2 years ago
Stenzek 43af57d735
System: Fix UpdateGTEAspectRatio() during initialization 2 years ago
Stenzek 5687dd22bd
PIO: Add basic flash cartridge support 2 years ago
Stenzek db848d1381
System: Remove redundant GameDB lookup 2 years ago
Stenzek e507fdcb1f
System: Load state before calling OnSystemStarted()
Needed for transitent state cleanup on Android.
2 years ago
Stenzek 1edcc8c0ac
System: Merge system taints with state taints on load 2 years ago
Stenzek 5d7cb6c5dc
System: Move state compression/writing to worker thread
Reduce hitches when saving.
2 years ago
Stenzek 31d953dac2
System: Prevent memcard blocking resume state save
Because otherwise you end up with a stale/old resume state, which is
arguably worse.
2 years ago
Stenzek 5c4d95fd51
Settings: Add missing GPU feature disables 2 years ago
Stenzek 0c7636b3c3
System: Add missing safe mode disable messages 2 years ago
Stenzek 5b6e3a952c
System: Reset code cache on fastmem mode change
Fixes excess backpatching and potential crashes when changing mode.
2 years ago
Stenzek b7fff840c8
System: Move thread name init to host
Prevents funky thread names for regtest on Linux.
2 years ago
Stenzek aafc029682
Misc: Un-namespace Timer 2 years ago
Stenzek 0befbf8021
GPU: Add Uncorrected Borders crop mode
Should behave the same as the old "All Borders" mode.
The pixel aspect ratio WILL BE WRONG.

Also fixes the size of screenshots in internal resolution mode.
2 years ago
Stenzek 5fd79254bd
GPU: Fix crash when toggling software renderer 2 years ago
Stenzek b180b26728
GPU: Rework "All Borders" cropping to be aspect correct
The "All Borders" crop mode was previously creating an aspect ratio that
was completely incorrect when using modes outside of Auto/4:3. We now
scale the aspect ratio relative to the PAL/NTSC aspect ratio to account
for this, regardless of how much of a border the game configures.

Overscan cropping also produced an incorrect aspect ratio outside of 4:3
mode, resulting in minor horizontal stretching. It is now correct,
however, this results in black borders being added in 16:9 for most
games.

To remove these borders, you have two options:

 - Use the "Stretch to Fill" aspect ratio. This will scale the GTE
   aspect ratio to fill the screen.

 - Use the "Only Overscan Area (Aspect Uncorrected)" crop mode. This
   mode retains the "old" behaviour, resulting in a stretched image.
2 years ago
Stenzek 24dfd30839
Image: Refactor to a more generic class 2 years ago
Stenzek b984f343ae
System: Fix audio CD images not showing title 2 years ago
Stenzek 8ec9c90c82
Qt: Fix settings not applying immediately when editing profile 2 years ago
Stenzek 8611f4f438
System: Handle GPU device loss in BP-only mode 2 years ago
Stenzek ead9e56c4d
System: Support loading ELF files 2 years ago
Stenzek 8bd0e6c3f7
CPU/CodeCache: Clear blocks on system shutdown
Means we release all allocated memory on system shutdown, rather
than waiting until the next VM/system start.
2 years ago
Stenzek 6551358212
Log: Replace channel string search with bitset
Knocks off around ~20KB of code.
2 years ago
Stenzek 2043128f98
System: Fix per-game fast boot applying too late 2 years ago
Stenzek bfadd608fb
System: Add 'Task Threads'
Used for saving screenshots/GPU dumps.
2 years ago
Stenzek 53fb5cd9e1
GTE: Remove dependency on GPUDevice 2 years ago
Stenzek d34707a377
System: Pack state in struct
Don't trust the linker...
2 years ago
Stenzek 166c930738
System: Move private functions to separate header 2 years ago
Stenzek 21d19a6297
System: Move perf counters to separate namespace 2 years ago
Stenzek 875ccecb90
System: Use frame rate for speed calculation
Instead of cycles. Makes it invariant to OC changes, and can
be managed on the (future) GPU thread.
2 years ago
Stenzek 2c57817803
System: Invalidate display on debug window change
Fixes these windows displaying black if the VM is paused.
2 years ago
Stenzek 1ae2dcf192
GPU: Propagate initialization error to caller
Avoids double error popup.
2 years ago
Stenzek b92eeec962
System: Warning fix 2 years ago
Stenzek 080807e557
CDROM: Move subchannel replacement from CDImage
This will allow you to use SBI/LSD files with real discs, if your
drive does not support reading subchannels, or has an incorrect
skew.
2 years ago
Stenzek 7d2216c289
GameList: Avoid double fopen/read of EXEs 2 years ago
Stenzek 2d04f2eff9
System: Support loading .CPE files 2 years ago
Stenzek 485f81a02f
GPUDump: Support XZ compression 2 years ago
Stenzek 396e7d994a
System: Make global safe mode always take precedence 2 years ago
Stenzek a9bfe2642f
System: Simplify error path in BootSystem() 2 years ago
Stenzek b62e58776e
System: Fix GPU usage disappearing on renderer change 2 years ago
Stenzek c250209336
System: Fix input profiles inheriting base settings 2 years ago
Stenzek 4ab22921c4
GPUDump: Add GPU dump recording and playback
Implements the specification from:

https://github.com/ps1dev/standards/blob/main/GPUDUMP.md
2 years ago
Stenzek 056b629837
ImGuiManager: Add 'Screen Margins' (i.e. safe zone) 2 years ago
Stenzek 76208f5f2d
System: Display localized trait names 2 years ago
Stenzek 57cf0f2643
System: Reload cheats/patches on safe mode toggle 2 years ago
Stenzek baa9065d2e
System: Add taints to save states
This informs the user they are loading a save state that at some point
had potentially-game-breaking options enabled, and a reset is necessary
to clear them.
2 years ago
Stenzek 86a28d5dc0
ImGuiOverlays: Move debug state to auxiliary windows 2 years ago
Stenzek eb46142ee7
GPUDevice: Extract swap chain to separate class 2 years ago
Stenzek 005d48a387
System: Don't display setting warnings without game 2 years ago
Stenzek 11c212260c
System: Only check controller changes when valid 2 years ago
Stenzek e0b6f6f1b2
Cheats: Rewrite cheat management system 2 years ago
Stenzek 26b6c704f0
MemMap: Support dynamic page size selection
i.e. 4K to 16K on ARM64.
2 years ago
Stenzek 3fb5fb4c72
System: Fix saving of subimage index 2 years ago
Stenzek c9f7ef5f9a
System: Fix reset when booting EXE 2 years ago
Stenzek 08bdffac64
GPU/HW: Fix toggling texture replacement settings 2 years ago
Stenzek 887d588029
System: Further improve fastboot behaviour
Use fastboot when slowboot will fail.
2 years ago
Stenzek 51fefb36a0
System: Fix crash when toggling SW with interpreter 2 years ago
Stenzek 45c8f6ea56
BIOS: Make GetInfoForHash() public
And it should take a const span.
2 years ago
Stenzek 060146a37a
CDROM: Add SubQ Skew option
Fixes corrupted boss sprites in Captain Commando.

One day I'll refactor things to fix this properly.
2 years ago
Stenzek e06f1f1002
GPU: Add hardware texture cache 2 years ago
Stenzek 4132b5ef3d
Settings: Remove 'Increase Timer Resolution' option
It's no longer needed since I switched to high-resolution waitable
timers, which are supported on Win10 1803+.
2 years ago
Stenzek 036e11f7a8
Qt: Remove unused variable 2 years ago
Stenzek df8e950e6e
Qt: Rename 'Disable All Enhancements' to 'Safe Mode'
And move it to the bottom of the dialog.
2 years ago
Stenzek 29da7f7211
System: Add 'Fast Forward Boot' option 2 years ago
Stenzek 4d74b203af
System: Don't try to read SYSTEM.CNF from Audio CD 2 years ago
Stenzek bfc914aaa9
CMake: Add DISABLE_SSE4 option
NOT recommended. Only if you ABSOLUTELY need it.

The SSE2/legacy build will be a separate download option, and
warn you if you try to run it on a CPU that supports SSE4.
2 years ago
Stenzek c439de6364
Common: SSE2 backsupport for vector classes
shuffle8() sucks, the rest aren't _too_ bad.
2 years ago
Stenzek f169b892c1
GPU: Defer frame done if not running events
Prevents interruption/execution exiting if the frame was ticked over
by a MMIO access, e.g. reading GPUSTAT.
2 years ago
Stenzek 3dca598063
Log: Switch to enum class
Need to change the channel to a bitset too.. the string lookups are
horribly slow, and conflict when one is a prefix of another.
2 years ago
Stenzek 88381209b3
System: Fix crash when disabling runahead 2 years ago
Stenzek 19698559c3
System: Drop IPC server
The one group using it switched to shared memory exports anyway.
2 years ago
Stenzek ac8461a28b
System: Fix bogus SW thread CPU in OSD 2 years ago
Stenzek e617f17294
System: Set GPU timing enable on init/destroy
It's really unrelated to the guest GPU.
2 years ago
Stenzek e7aa0495ab
System: Not all setting changes need to interrupt 2 years ago
Stenzek b5df06a54a
GPU/HW: Rewrite automatic internal resolution selection
Make it aspect ratio aware, as well as updating when/if the game changes
resolution. Also include the padding area in the OSD/status resolution.
2 years ago
Stenzek 292c1e0f06
Misc: Normalize OSD message keys 2 years ago
Stenzek e03deb4928
System: Set realtime constraints on MacOS
Significantly improves frame timing/pacing, now it is a
flat line on my 2023 MBP like other platforms.
2 years ago
Stenzek 6f31e562a0
MetalDevice: Implement timed present 2 years ago
Stenzek f2720b98dd
System: Reduce force-displayed-warning scope
Please don't make me regret this.
2 years ago
Stenzek 20b4581bbe
Settings: Remove second source of truth for OSD notifications
And split it into warnings/messages. Warnings are always displayed
regardless of the "Show OSD Messages" setting, because they're critical
and users forget they disable messages.
2 years ago
Stenzek d1770b616f
Settings: Default console logging to running from TTY 2 years ago
Stenzek ac5a2a153a
GPUDevice: Remove BeginPresent() skip parameter
It wasn't used - System does its own present skipping.
2 years ago
Stenzek 4b0c1fdbf2
GPUDevice: Add recovery from lost device 2 years ago
Stenzek 1c1b82ed66
GPUDevice: Purge threaded presentation
Worse frame pacing, and GPU thread (when I finish it) will give
significantly faster performance on mobile anyway.
2 years ago
Stenzek ab1c85790c
CPU: Refactor execution mode switching
Fixes single step breaking in branch delay slots with recompiler.
Simplifies initialization.
Removes multiple sources of truth for fastmem.
2 years ago
spacepaw 5b4d625d23
Add *.psx as a supported PS-X EXE file type (#3290) 2 years ago
Stenzek 87eded4bce
FileSystem: Fix FD leak with atomic updated file on Linux
Also add the ability to explicitly commit and check for errors.
2 years ago
Stenzek 1446e3035f
Settings: Make Disable Interlacing a Deinterlacing mode
Saving that precious vertical space.
2 years ago
Stenzek 94911abdca
System: Display disabled enhancements in safe mode 2 years ago
Stenzek f9a594058f
Settings: Force Frame Timings => Force Video Timing
Also drop from GameDB, an override doesn't make sense here anyway,
due to the low success rate with the enhancement.
2 years ago
spacepaw 63abdb7afd
Reworked the "Force NTSC Timings" feature to support both NTSC and PAL frame timings (#3287) 2 years ago