diff --git a/driver.c b/driver.c index 2eff59fbcc..8f432843ad 100644 --- a/driver.c +++ b/driver.c @@ -214,21 +214,6 @@ static void driver_adjust_system_rates(void) driver_set_nonblock_state(); } -/** - * driver_set_refresh_rate: - * @hz : New refresh rate for monitor. - * - * Sets monitor refresh rate to new value by calling - * video_monitor_set_refresh_rate(). Subsequently - * calls audio_monitor_set_refresh_rate(). - **/ -void driver_set_refresh_rate(float hz) -{ - video_monitor_set_refresh_rate(hz); - audio_driver_ctl(RARCH_AUDIO_CTL_MONITOR_SET_REFRESH_RATE, NULL); - driver_adjust_system_rates(); -} - /** * driver_set_nonblock_state: * @@ -444,16 +429,6 @@ bool driver_ctl(enum driver_ctl_state state, void *data) { switch (state) { - case RARCH_DRIVER_CTL_INIT_PRE: - audio_driver_ctl(RARCH_AUDIO_CTL_FIND_DRIVER, NULL); - video_driver_ctl(RARCH_DISPLAY_CTL_FIND_DRIVER, NULL); - input_driver_ctl(RARCH_INPUT_CTL_FIND_DRIVER, NULL); - find_camera_driver(); - find_location_driver(); -#ifdef HAVE_MENU - find_menu_driver(); -#endif - break; case RARCH_DRIVER_CTL_DEINIT: video_driver_ctl(RARCH_DISPLAY_CTL_DESTROY, NULL); audio_driver_ctl(RARCH_AUDIO_CTL_DESTROY, NULL); @@ -465,6 +440,24 @@ bool driver_ctl(enum driver_ctl_state state, void *data) camera_driver_ctl(RARCH_CAMERA_CTL_DESTROY, NULL); retro_uninit_libretro_cbs(); break; + case RARCH_DRIVER_CTL_INIT_PRE: + audio_driver_ctl(RARCH_AUDIO_CTL_FIND_DRIVER, NULL); + video_driver_ctl(RARCH_DISPLAY_CTL_FIND_DRIVER, NULL); + input_driver_ctl(RARCH_INPUT_CTL_FIND_DRIVER, NULL); + find_camera_driver(); + find_location_driver(); +#ifdef HAVE_MENU + find_menu_driver(); +#endif + break; + case RARCH_DRIVER_CTL_SET_REFRESH_RATE: + { + float *hz = (float*)data; + video_monitor_set_refresh_rate(*hz); + audio_driver_ctl(RARCH_AUDIO_CTL_MONITOR_SET_REFRESH_RATE, NULL); + driver_adjust_system_rates(); + } + break; case RARCH_DRIVER_CTL_NONE: default: break; diff --git a/driver.h b/driver.h index e9b7ca4573..32f42ee4ea 100644 --- a/driver.h +++ b/driver.h @@ -182,6 +182,10 @@ enum driver_ctl_state * Should be run before RARCH_DRIVER_CTL_INIT. */ RARCH_DRIVER_CTL_INIT_PRE, + /* Sets monitor refresh rate to new value by calling + * video_monitor_set_refresh_rate(). Subsequently + * calls audio_monitor_set_refresh_rate(). */ + RARCH_DRIVER_CTL_SET_REFRESH_RATE }; @@ -254,16 +258,6 @@ bool find_next_driver(const char *label, char *s, size_t len); **/ void driver_set_nonblock_state(void); -/** - * driver_set_refresh_rate: - * @hz : New refresh rate for monitor. - * - * Sets monitor refresh rate to new value by calling - * video_monitor_set_refresh_rate(). Subsequently - * calls audio_monitor_set_refresh_rate(). - **/ -void driver_set_refresh_rate(float hz); - /** * driver_update_system_av_info: * @info : pointer to new A/V info diff --git a/gfx/drivers/ctr_gfx.c b/gfx/drivers/ctr_gfx.c index c47245b2d1..8cd0acff8a 100644 --- a/gfx/drivers/ctr_gfx.c +++ b/gfx/drivers/ctr_gfx.c @@ -240,7 +240,8 @@ static void ctr_lcd_aptHook(APT_HookType hook, void* param) static void* ctr_init(const video_info_t* video, const input_driver_t** input, void** input_data) { - void* ctrinput = NULL; + float refresh_rate; + void* ctrinput = NULL; ctr_video_t* ctr = (ctr_video_t*)linearAlloc(sizeof(ctr_video_t)); if (!ctr) @@ -375,8 +376,9 @@ static void* ctr_init(const video_info_t* video, ctr->empty_framebuffer = linearAlloc(320 * 240 * 2); memset(ctr->empty_framebuffer, 0, 320 * 240 * 2); - driver_set_refresh_rate((32730.0 * 8192.0) / 4481134.0); + refresh_rate = (32730.0 * 8192.0) / 4481134.0; + driver_ctl(RARCH_DRIVER_CTL_SET_REFRESH_RATE, &refresh_rate); aptHook(&ctr->lcd_aptHook, ctr_lcd_aptHook, ctr); return ctr; diff --git a/gfx/drivers/gx_gfx.c b/gfx/drivers/gx_gfx.c index 898be5b6fe..2bfaef3c93 100644 --- a/gfx/drivers/gx_gfx.c +++ b/gfx/drivers/gx_gfx.c @@ -414,17 +414,17 @@ static void gx_set_video_mode(void *data, unsigned fbWidth, unsigned lines, if (tvmode == VI_PAL) { + float refresh_rate = 50.0f; if (modetype == VI_NON_INTERLACE) - driver_set_refresh_rate(50.0801f); - else - driver_set_refresh_rate(50.0f); + refresh_rate = 50.0801f; + driver_ctl(RARCH_DRIVER_CTL_SET_REFRESH_RATE, &refresh_rate); } else { + float refresh_rate = 59.94f; if (modetype == VI_NON_INTERLACE) - driver_set_refresh_rate(59.8261f); - else - driver_set_refresh_rate(59.94f); + refresh_rate = 59.8261f; + driver_ctl(RARCH_DRIVER_CTL_SET_REFRESH_RATE, &refresh_rate); } /* custom viewports for older resolutions will most likely be corrupted, reset them */ diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 81890b3f88..c4dfb05488 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -2574,7 +2574,7 @@ static int setting_action_ok_video_refresh_rate_auto(void *data, bool wraparound if (video_monitor_fps_statistics(&video_refresh_rate, &deviation, &sample_points)) { - driver_set_refresh_rate(video_refresh_rate); + driver_ctl(RARCH_DRIVER_CTL_SET_REFRESH_RATE, &video_refresh_rate); /* Incase refresh rate update forced non-block video. */ event_command(EVENT_CMD_VIDEO_SET_BLOCKING_STATE); } @@ -2838,7 +2838,7 @@ void general_write_handler(void *data) } break; case MENU_LABEL_VIDEO_REFRESH_RATE_AUTO: - driver_set_refresh_rate(*setting->value.fraction); + driver_ctl(RARCH_DRIVER_CTL_SET_REFRESH_RATE, setting->value.fraction); /* In case refresh rate update forced non-block video. */ rarch_cmd = EVENT_CMD_VIDEO_SET_BLOCKING_STATE;