mirror of
https://github.com/libretro/RetroArch
synced 2025-03-29 22:20:21 +00:00
Move rewind state variables in struct
This commit is contained in:
parent
37a541e8a0
commit
2f63b75697
15
general.h
15
general.h
@ -596,14 +596,17 @@ struct global
|
||||
|
||||
bool exec;
|
||||
|
||||
/* Rewind support. */
|
||||
state_manager_t *state_manager;
|
||||
size_t state_size;
|
||||
bool frame_is_reverse;
|
||||
|
||||
/* Movie playback/recording support. */
|
||||
struct
|
||||
{
|
||||
/* Rewind support. */
|
||||
state_manager_t *state;
|
||||
size_t size;
|
||||
bool frame_is_reverse;
|
||||
} rewind;
|
||||
|
||||
struct
|
||||
{
|
||||
/* Movie playback/recording support. */
|
||||
bsv_movie_t *movie;
|
||||
char movie_path[PATH_MAX_LENGTH];
|
||||
bool movie_playback;
|
||||
|
@ -247,13 +247,13 @@ static void gl_cg_set_params(void *data, unsigned width, unsigned height,
|
||||
set_param_2f(cg->prg[cg->active_idx].tex_size_f, tex_width, tex_height);
|
||||
set_param_2f(cg->prg[cg->active_idx].out_size_f, out_width, out_height);
|
||||
set_param_1f(cg->prg[cg->active_idx].frame_dir_f,
|
||||
g_extern.frame_is_reverse ? -1.0 : 1.0);
|
||||
g_extern.rewind.frame_is_reverse ? -1.0 : 1.0);
|
||||
|
||||
set_param_2f(cg->prg[cg->active_idx].vid_size_v, width, height);
|
||||
set_param_2f(cg->prg[cg->active_idx].tex_size_v, tex_width, tex_height);
|
||||
set_param_2f(cg->prg[cg->active_idx].out_size_v, out_width, out_height);
|
||||
set_param_1f(cg->prg[cg->active_idx].frame_dir_v,
|
||||
g_extern.frame_is_reverse ? -1.0 : 1.0);
|
||||
g_extern.rewind.frame_is_reverse ? -1.0 : 1.0);
|
||||
|
||||
if (cg->prg[cg->active_idx].frame_cnt_f || cg->prg[cg->active_idx].frame_cnt_v)
|
||||
{
|
||||
|
@ -982,7 +982,7 @@ static void gl_glsl_set_params(void *data, unsigned width, unsigned height,
|
||||
}
|
||||
|
||||
if (uni->frame_direction >= 0)
|
||||
glUniform1i(uni->frame_direction, g_extern.frame_is_reverse ? -1 : 1);
|
||||
glUniform1i(uni->frame_direction, g_extern.rewind.frame_is_reverse ? -1 : 1);
|
||||
|
||||
|
||||
for (i = 0; i < glsl->glsl_shader->luts; i++)
|
||||
|
@ -130,13 +130,13 @@ static void hlsl_set_params(void *data, unsigned width, unsigned height,
|
||||
set_param_2f(hlsl->prg[hlsl->active_idx].tex_size_f, tex_size, hlsl->prg[hlsl->active_idx].f_ctable);
|
||||
set_param_2f(hlsl->prg[hlsl->active_idx].out_size_f, out_size, hlsl->prg[hlsl->active_idx].f_ctable);
|
||||
set_param_1f(hlsl->prg[hlsl->active_idx].frame_cnt_f, frame_cnt, hlsl->prg[hlsl->active_idx].f_ctable);
|
||||
set_param_1f(hlsl->prg[hlsl->active_idx].frame_dir_f, g_extern.frame_is_reverse ? -1.0 : 1.0, hlsl->prg[hlsl->active_idx].f_ctable);
|
||||
set_param_1f(hlsl->prg[hlsl->active_idx].frame_dir_f, g_extern.rewind.frame_is_reverse ? -1.0 : 1.0, hlsl->prg[hlsl->active_idx].f_ctable);
|
||||
|
||||
set_param_2f(hlsl->prg[hlsl->active_idx].vid_size_v, ori_size, hlsl->prg[hlsl->active_idx].v_ctable);
|
||||
set_param_2f(hlsl->prg[hlsl->active_idx].tex_size_v, tex_size, hlsl->prg[hlsl->active_idx].v_ctable);
|
||||
set_param_2f(hlsl->prg[hlsl->active_idx].out_size_v, out_size, hlsl->prg[hlsl->active_idx].v_ctable);
|
||||
set_param_1f(hlsl->prg[hlsl->active_idx].frame_cnt_v, frame_cnt, hlsl->prg[hlsl->active_idx].v_ctable);
|
||||
set_param_1f(hlsl->prg[hlsl->active_idx].frame_dir_v, g_extern.frame_is_reverse ? -1.0 : 1.0, hlsl->prg[hlsl->active_idx].v_ctable);
|
||||
set_param_1f(hlsl->prg[hlsl->active_idx].frame_dir_v, g_extern.rewind.frame_is_reverse ? -1.0 : 1.0, hlsl->prg[hlsl->active_idx].v_ctable);
|
||||
|
||||
/* TODO - set lookup textures/FBO textures/state parameters/etc */
|
||||
}
|
||||
|
@ -687,7 +687,7 @@ void retro_init_libretro_cbs(void *data)
|
||||
**/
|
||||
void retro_set_rewind_callbacks(void)
|
||||
{
|
||||
if (g_extern.frame_is_reverse)
|
||||
if (g_extern.rewind.frame_is_reverse)
|
||||
{
|
||||
pretro_set_audio_sample(audio_sample_rewind);
|
||||
pretro_set_audio_sample_batch(audio_sample_batch_rewind);
|
||||
|
22
retroarch.c
22
retroarch.c
@ -895,7 +895,7 @@ static void init_rewind(void)
|
||||
return;
|
||||
#endif
|
||||
|
||||
if (!g_settings.rewind_enable || g_extern.state_manager)
|
||||
if (!g_settings.rewind_enable || g_extern.rewind.state)
|
||||
return;
|
||||
|
||||
if (g_extern.system.audio_callback.callback)
|
||||
@ -904,9 +904,9 @@ static void init_rewind(void)
|
||||
return;
|
||||
}
|
||||
|
||||
g_extern.state_size = pretro_serialize_size();
|
||||
g_extern.rewind.size = pretro_serialize_size();
|
||||
|
||||
if (!g_extern.state_size)
|
||||
if (!g_extern.rewind.size)
|
||||
{
|
||||
RARCH_ERR(RETRO_LOG_REWIND_INIT_FAILED_NO_SAVESTATES);
|
||||
return;
|
||||
@ -915,15 +915,15 @@ static void init_rewind(void)
|
||||
RARCH_LOG(RETRO_MSG_REWIND_INIT "%u MB\n",
|
||||
(unsigned)(g_settings.rewind_buffer_size / 1000000));
|
||||
|
||||
g_extern.state_manager = state_manager_new(g_extern.state_size,
|
||||
g_extern.rewind.state = state_manager_new(g_extern.rewind.size,
|
||||
g_settings.rewind_buffer_size);
|
||||
|
||||
if (!g_extern.state_manager)
|
||||
if (!g_extern.rewind.state)
|
||||
RARCH_WARN(RETRO_LOG_REWIND_INIT_FAILED);
|
||||
|
||||
state_manager_push_where(g_extern.state_manager, &state);
|
||||
pretro_serialize(state, g_extern.state_size);
|
||||
state_manager_push_do(g_extern.state_manager);
|
||||
state_manager_push_where(g_extern.rewind.state, &state);
|
||||
pretro_serialize(state, g_extern.rewind.size);
|
||||
state_manager_push_do(g_extern.rewind.state);
|
||||
}
|
||||
|
||||
static void init_movie(void)
|
||||
@ -2279,9 +2279,9 @@ bool rarch_main_command(unsigned cmd)
|
||||
if (driver.netplay_data)
|
||||
return false;
|
||||
#endif
|
||||
if (g_extern.state_manager)
|
||||
state_manager_free(g_extern.state_manager);
|
||||
g_extern.state_manager = NULL;
|
||||
if (g_extern.rewind.state)
|
||||
state_manager_free(g_extern.rewind.state);
|
||||
g_extern.rewind.state = NULL;
|
||||
break;
|
||||
case RARCH_CMD_REWIND_INIT:
|
||||
init_rewind();
|
||||
|
20
runloop.c
20
runloop.c
@ -220,14 +220,14 @@ static void check_rewind(bool pressed)
|
||||
{
|
||||
static bool first = true;
|
||||
|
||||
if (g_extern.frame_is_reverse)
|
||||
if (g_extern.rewind.frame_is_reverse)
|
||||
{
|
||||
/* We just rewound. Flush rewind audio buffer. */
|
||||
retro_flush_audio(g_extern.audio_data.rewind_buf
|
||||
+ g_extern.audio_data.rewind_ptr,
|
||||
g_extern.audio_data.rewind_size - g_extern.audio_data.rewind_ptr);
|
||||
|
||||
g_extern.frame_is_reverse = false;
|
||||
g_extern.rewind.frame_is_reverse = false;
|
||||
}
|
||||
|
||||
if (first)
|
||||
@ -236,7 +236,7 @@ static void check_rewind(bool pressed)
|
||||
return;
|
||||
}
|
||||
|
||||
if (!g_extern.state_manager)
|
||||
if (!g_extern.rewind.state)
|
||||
return;
|
||||
|
||||
if (pressed)
|
||||
@ -244,14 +244,14 @@ static void check_rewind(bool pressed)
|
||||
const void *buf = NULL;
|
||||
|
||||
msg_queue_clear(g_extern.msg_queue);
|
||||
if (state_manager_pop(g_extern.state_manager, &buf))
|
||||
if (state_manager_pop(g_extern.rewind.state, &buf))
|
||||
{
|
||||
g_extern.frame_is_reverse = true;
|
||||
g_extern.rewind.frame_is_reverse = true;
|
||||
setup_rewind_audio();
|
||||
|
||||
msg_queue_push(g_extern.msg_queue, RETRO_MSG_REWINDING, 0,
|
||||
g_extern.is_paused ? 1 : 30);
|
||||
pretro_unserialize(buf, g_extern.state_size);
|
||||
pretro_unserialize(buf, g_extern.rewind.size);
|
||||
|
||||
if (g_extern.bsv.movie)
|
||||
bsv_movie_frame_rewind(g_extern.bsv.movie);
|
||||
@ -270,14 +270,14 @@ static void check_rewind(bool pressed)
|
||||
if ((cnt == 0) || g_extern.bsv.movie)
|
||||
{
|
||||
void *state = NULL;
|
||||
state_manager_push_where(g_extern.state_manager, &state);
|
||||
state_manager_push_where(g_extern.rewind.state, &state);
|
||||
|
||||
RARCH_PERFORMANCE_INIT(rewind_serialize);
|
||||
RARCH_PERFORMANCE_START(rewind_serialize);
|
||||
pretro_serialize(state, g_extern.state_size);
|
||||
pretro_serialize(state, g_extern.rewind.size);
|
||||
RARCH_PERFORMANCE_STOP(rewind_serialize);
|
||||
|
||||
state_manager_push_do(g_extern.state_manager);
|
||||
state_manager_push_do(g_extern.rewind.state);
|
||||
}
|
||||
}
|
||||
|
||||
@ -301,7 +301,7 @@ static void check_slowmotion(bool pressed)
|
||||
rarch_render_cached_frame();
|
||||
|
||||
msg_queue_clear(g_extern.msg_queue);
|
||||
msg_queue_push(g_extern.msg_queue, g_extern.frame_is_reverse ?
|
||||
msg_queue_push(g_extern.msg_queue, g_extern.rewind.frame_is_reverse ?
|
||||
"Slow motion rewind." : "Slow motion.", 0, 30);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user