diff --git a/retroarch.c b/retroarch.c index 4a1e04a8f6..418c1b22d7 100644 --- a/retroarch.c +++ b/retroarch.c @@ -12639,22 +12639,6 @@ static void command_event_runtime_log_init(struct rarch_state *p_rarch) sizeof(p_rarch->runtime_core_path)); } -static INLINE retro_time_t runloop_set_frame_limit( - const struct retro_system_av_info *av_info, - float fastforward_ratio) -{ - return (fastforward_ratio < 1.0f) ? 0.0f : - (retro_time_t)roundf(1000000.0f / (av_info->timing.fps * fastforward_ratio)); -} - -static INLINE float runloop_get_fastforward_ratio( - settings_t *settings, - struct retro_fastforwarding_override *fastmotion_override) -{ - return (fastmotion_override->fastforward && (fastmotion_override->ratio >= 0.0f)) ? - fastmotion_override->ratio : settings->floats.fastforward_ratio; -} - static bool command_event_init_core( settings_t *settings, struct rarch_state *p_rarch, @@ -13283,106 +13267,12 @@ static void retroarch_pause_checks(struct rarch_state *p_rarch) #endif } -static void runloop_frame_time_free(runloop_state_t *p_runloop) -{ - memset(&p_runloop->frame_time, 0, - sizeof(struct retro_frame_time_callback)); - p_runloop->frame_time_last = 0; - p_runloop->max_frames = 0; -} - -static void runloop_audio_buffer_status_free(runloop_state_t *p_runloop) -{ - memset(&p_runloop->audio_buffer_status, 0, - sizeof(struct retro_audio_buffer_status_callback)); - p_runloop->audio_latency = 0; -} - -static void runloop_game_focus_free(runloop_state_t *p_runloop) -{ - /* Ensure that game focus mode is disabled */ - if (p_runloop->game_focus_state.enabled) - { - enum input_game_focus_cmd_type game_focus_cmd = GAME_FOCUS_CMD_OFF; - command_event(CMD_EVENT_GAME_FOCUS_TOGGLE, &game_focus_cmd); - } - - p_runloop->game_focus_state.enabled = false; - p_runloop->game_focus_state.core_requested = false; -} - -static void runloop_fastmotion_override_free(settings_t *settings, - runloop_state_t *p_runloop) -{ - float fastforward_ratio = settings->floats.fastforward_ratio; - bool reset_frame_limit = p_runloop->fastmotion_override.fastforward && - (p_runloop->fastmotion_override.ratio >= 0.0f) && - (p_runloop->fastmotion_override.ratio != fastforward_ratio); - - p_runloop->fastmotion_override.ratio = 0.0f; - p_runloop->fastmotion_override.fastforward = false; - p_runloop->fastmotion_override.notification = false; - p_runloop->fastmotion_override.inhibit_toggle = false; - - if (reset_frame_limit) - p_runloop->frame_limit_minimum_time = runloop_set_frame_limit( - &p_runloop->av_info, - fastforward_ratio); -} - -static void runloop_system_info_free(runloop_state_t *p_runloop) -{ - rarch_system_info_t *sys_info = &p_runloop->system; - - if (sys_info->subsystem.data) - free(sys_info->subsystem.data); - sys_info->subsystem.data = NULL; - sys_info->subsystem.size = 0; - - if (sys_info->ports.data) - free(sys_info->ports.data); - sys_info->ports.data = NULL; - sys_info->ports.size = 0; - - if (sys_info->mmaps.descriptors) - free((void *)sys_info->mmaps.descriptors); - sys_info->mmaps.descriptors = NULL; - sys_info->mmaps.num_descriptors = 0; - - p_runloop->key_event = NULL; - p_runloop->frontend_key_event = NULL; - - p_runloop->audio_callback.callback = NULL; - p_runloop->audio_callback.set_state = NULL; - - sys_info->info.library_name = NULL; - sys_info->info.library_version = NULL; - sys_info->info.valid_extensions = NULL; - sys_info->info.need_fullpath = false; - sys_info->info.block_extract = false; - - memset(&p_runloop->system, 0, sizeof(rarch_system_info_t)); -} - static bool libretro_get_system_info( struct rarch_state *p_rarch, const char *path, struct retro_system_info *info, bool *load_no_content); -#ifdef HAVE_RUNAHEAD -static void runloop_runahead_clear_variables(runloop_state_t *p_runloop) -{ - p_runloop->runahead_save_state_size = 0; - p_runloop->runahead_save_state_size_known = false; - p_runloop->runahead_video_active = true; - p_runloop->runahead_available = true; - p_runloop->runahead_secondary_core_available = true; - p_runloop->runahead_force_input_dirty = true; - p_runloop->last_frame_count_runahead = 0; -} -#endif - /** * command_event: * @cmd : Event command index. diff --git a/retroarch.h b/retroarch.h index f054def661..9605ff631b 100644 --- a/retroarch.h +++ b/retroarch.h @@ -226,6 +226,14 @@ enum runloop_action RUNLOOP_ACTION_AUTOSAVE }; +enum input_game_focus_cmd_type +{ + GAME_FOCUS_CMD_OFF = 0, + GAME_FOCUS_CMD_ON, + GAME_FOCUS_CMD_TOGGLE, + GAME_FOCUS_CMD_REAPPLY +}; + #ifdef HAVE_BSV_MOVIE enum rarch_movie_type { @@ -2392,6 +2400,22 @@ void bsv_movie_deinit(runloop_state_t *p_runloop); bool bsv_movie_init(runloop_state_t *p_runloop); #endif +void runloop_system_info_free(runloop_state_t *p_runloop); +void runloop_fastmotion_override_free(settings_t *settings, + runloop_state_t *p_runloop); +void runloop_game_focus_free(runloop_state_t *p_runloop); +void runloop_audio_buffer_status_free(runloop_state_t *p_runloop); +void runloop_frame_time_free(runloop_state_t *p_runloop); +#ifdef HAVE_RUNAHEAD +void runloop_runahead_clear_variables(runloop_state_t *p_runloop); +#endif +retro_time_t runloop_set_frame_limit( + const struct retro_system_av_info *av_info, + float fastforward_ratio); +float runloop_get_fastforward_ratio( + settings_t *settings, + struct retro_fastforwarding_override *fastmotion_override); + RETRO_END_DECLS #endif diff --git a/retroarch_data.h b/retroarch_data.h index c3b076df9a..cb6f3b5578 100644 --- a/retroarch_data.h +++ b/retroarch_data.h @@ -1258,14 +1258,6 @@ enum auto_shader_operation AUTO_SHADER_OP_EXISTS }; -enum input_game_focus_cmd_type -{ - GAME_FOCUS_CMD_OFF = 0, - GAME_FOCUS_CMD_ON, - GAME_FOCUS_CMD_TOGGLE, - GAME_FOCUS_CMD_REAPPLY -}; - typedef struct runloop_ctx_msg_info { const char *msg; diff --git a/runloop.c b/runloop.c index 4823db94a6..b330cbf7f4 100755 --- a/runloop.c +++ b/runloop.c @@ -14,6 +14,7 @@ */ #include +#include #include @@ -21,6 +22,7 @@ #include #endif +#include "command.h" #include "configuration.h" #include "content.h" #include "file_path_special.h" @@ -847,6 +849,21 @@ end: } #endif +retro_time_t runloop_set_frame_limit( + const struct retro_system_av_info *av_info, + float fastforward_ratio) +{ + return (fastforward_ratio < 1.0f) ? 0.0f : + (retro_time_t)roundf(1000000.0f / (av_info->timing.fps * fastforward_ratio)); +} + +float runloop_get_fastforward_ratio( + settings_t *settings, + struct retro_fastforwarding_override *fastmotion_override) +{ + return (fastmotion_override->fastforward && (fastmotion_override->ratio >= 0.0f)) ? + fastmotion_override->ratio : settings->floats.fastforward_ratio; +} /* Fetches core options path for current core/content * - path: path from which options should be read @@ -1101,3 +1118,98 @@ core_option_manager_t *runloop_init_core_options( options_path, src_options_path, option_defs); return NULL; } + +void runloop_audio_buffer_status_free(runloop_state_t *p_runloop) +{ + memset(&p_runloop->audio_buffer_status, 0, + sizeof(struct retro_audio_buffer_status_callback)); + p_runloop->audio_latency = 0; +} + +void runloop_game_focus_free(runloop_state_t *p_runloop) +{ + /* Ensure that game focus mode is disabled */ + if (p_runloop->game_focus_state.enabled) + { + enum input_game_focus_cmd_type game_focus_cmd = GAME_FOCUS_CMD_OFF; + command_event(CMD_EVENT_GAME_FOCUS_TOGGLE, &game_focus_cmd); + } + + p_runloop->game_focus_state.enabled = false; + p_runloop->game_focus_state.core_requested = false; +} + +void runloop_fastmotion_override_free(settings_t *settings, + runloop_state_t *p_runloop) +{ + float fastforward_ratio = settings->floats.fastforward_ratio; + bool reset_frame_limit = p_runloop->fastmotion_override.fastforward && + (p_runloop->fastmotion_override.ratio >= 0.0f) && + (p_runloop->fastmotion_override.ratio != fastforward_ratio); + + p_runloop->fastmotion_override.ratio = 0.0f; + p_runloop->fastmotion_override.fastforward = false; + p_runloop->fastmotion_override.notification = false; + p_runloop->fastmotion_override.inhibit_toggle = false; + + if (reset_frame_limit) + p_runloop->frame_limit_minimum_time = runloop_set_frame_limit( + &p_runloop->av_info, + fastforward_ratio); +} + +void runloop_system_info_free(runloop_state_t *p_runloop) +{ + rarch_system_info_t *sys_info = &p_runloop->system; + + if (sys_info->subsystem.data) + free(sys_info->subsystem.data); + sys_info->subsystem.data = NULL; + sys_info->subsystem.size = 0; + + if (sys_info->ports.data) + free(sys_info->ports.data); + sys_info->ports.data = NULL; + sys_info->ports.size = 0; + + if (sys_info->mmaps.descriptors) + free((void *)sys_info->mmaps.descriptors); + sys_info->mmaps.descriptors = NULL; + sys_info->mmaps.num_descriptors = 0; + + p_runloop->key_event = NULL; + p_runloop->frontend_key_event = NULL; + + p_runloop->audio_callback.callback = NULL; + p_runloop->audio_callback.set_state = NULL; + + sys_info->info.library_name = NULL; + sys_info->info.library_version = NULL; + sys_info->info.valid_extensions = NULL; + sys_info->info.need_fullpath = false; + sys_info->info.block_extract = false; + + memset(&p_runloop->system, 0, sizeof(rarch_system_info_t)); +} + +void runloop_frame_time_free(runloop_state_t *p_runloop) +{ + memset(&p_runloop->frame_time, 0, + sizeof(struct retro_frame_time_callback)); + p_runloop->frame_time_last = 0; + p_runloop->max_frames = 0; +} + + +#ifdef HAVE_RUNAHEAD +void runloop_runahead_clear_variables(runloop_state_t *p_runloop) +{ + p_runloop->runahead_save_state_size = 0; + p_runloop->runahead_save_state_size_known = false; + p_runloop->runahead_video_active = true; + p_runloop->runahead_available = true; + p_runloop->runahead_secondary_core_available = true; + p_runloop->runahead_force_input_dirty = true; + p_runloop->last_frame_count_runahead = 0; +} +#endif