Skip to content

Conversation

@forkymcforkface
Copy link

@forkymcforkface forkymcforkface commented Nov 20, 2025

This PR Adds a new core option to fix NTSC video output for CRT displays by cropping the 528-line EFB to standard 480i/p resolution.

I'm not 100% set on the option name as this could also be used on LCD displays for those that want to throw away the junk pixels

Problem
GameCube/Wii uses a 640x528 framebuffer internally, but NTSC video output is 640x480.

When the core reports 528 lines to frontends a few problems arise.

  • CRTSwitchres calculates and creates incorrect video timings, causing ~55Hz output instead of correct ~60Hz
  • Audio stuttering since the game is running too slow to sync
  • Not true to the original output seen on NGC/Wii with CRT Displays

Solution
New core option: Graphics > Settings > Crop Overscan (default: disabled)

When enabled for NTSC games:

  • Reports 640x480 geometry to frontend (ensures correct 60Hz timing)
  • Forces g_Config.bCrop = true (crops EFB internally, prevents squishing)
  • Updates video backend surface/swapchain creation to match
  • PAL games are unaffected - all changes are NTSC-conditional.
  • Supports scaled internal resolutions (2x = 960p, 3x = 1440p etc)
  • Uses Dolphin's existing crop mechanism for proper aspect ratio

Testing

  • NTSC: Verify 640x480@60Hz output, no vertical squishing
  • PAL: untested unchanged behavior (528/576 lines @50Hz)
  • Scaled: verified 2x/3x multiplies 480, not 528

@cscd98
Copy link

cscd98 commented Nov 21, 2025

Looks good, just change the bool to const bool for slight optimization.

Untested.

This option fixes NTSC video output for CRT displays by cropping the 528-line EFB to standard 480i/p resolution.
@forkymcforkface
Copy link
Author

Looks good, just change the bool to const bool for slight optimization.

Untested.

Fat fingered a few things, but I'm back now

bool to const bool and synced with the latest.

@warmenhoven warmenhoven merged commit df2b1a7 into libretro:master Nov 22, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants