Create RARCH_DRIVER_CTL_SET_REFRESH_RATE

This commit is contained in:
twinaphex 2015-12-11 11:00:12 +01:00
parent 0a01eab115
commit 1b768f7dcd
5 changed files with 34 additions and 45 deletions

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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 */

View File

@ -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;