From 99347130c30323eb95f3ffc1a761f68ffe0d8408 Mon Sep 17 00:00:00 2001 From: negativeExponent Date: Tue, 5 May 2020 09:24:24 +0800 Subject: [PATCH] Fix timing when changing from PAL/Dendy to NTSC - Happens when starting with PAL/Dendy region and changing to NTSC can cause frame to get stuck in 50 Hz - using RETRO_ENVIRONMENT_SET_SYSTEM_AV_INFO should remedy this. --- src/drivers/libretro/libretro.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/drivers/libretro/libretro.c b/src/drivers/libretro/libretro.c index 63c27e3..7ddfd1f 100644 --- a/src/drivers/libretro/libretro.c +++ b/src/drivers/libretro/libretro.c @@ -1107,11 +1107,14 @@ static void set_apu_channels(int chan) static void check_variables(bool startup) { struct retro_variable var = {0}; - int audio_video_updated = 0; bool palette_updated = false; char key[256]; int i, enable_apu; + /* 1 = Performs only geometry update: e.g. overscans */ + /* 2 = Performs video/geometry update when needed and timing changes: e.g. region and filter change */ + int audio_video_updated = 0; + var.key = "fceumm_ramstate"; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) @@ -1141,7 +1144,10 @@ static void check_variables(bool startup) else if (strcmp(var.value, "monochrome") == 0) use_ntsc = NTSC_MONOCHROME; if (use_ntsc != orig_value) + { + ResetPalette(); audio_video_updated = 2; + } } #endif /* HAVE_NTSC_FILTER */ @@ -1282,7 +1288,7 @@ static void check_variables(bool startup) if (newval != use_overscan) { use_overscan = newval; - geometry_update = true; + audio_video_updated = 1; } } @@ -1367,7 +1373,10 @@ static void check_variables(bool startup) else if (!strcmp(var.value, "Dendy")) opt_region = 3; if (opt_region != oldval) + { FCEUD_RegionOverride(opt_region); + audio_video_updated = 2; + } } var.key = "fceumm_sndquality";