diff --git a/input/input_driver.c b/input/input_driver.c index bab1a58d5c..dd390c4f0b 100644 --- a/input/input_driver.c +++ b/input/input_driver.c @@ -480,7 +480,7 @@ int16_t input_state(unsigned port, unsigned device, if (bsv_movie_get_input(global->bsv.movie, &ret)) return ret; - global->bsv.movie_end = true; + bsv_movie_ctl(BSV_MOVIE_CTL_SET_END, NULL); } if (settings->input.remap_binds_enable) diff --git a/movie.c b/movie.c index b7e93df917..e4dcb6e8a6 100644 --- a/movie.c +++ b/movie.c @@ -321,6 +321,15 @@ bool bsv_movie_ctl(enum bsv_ctl_state state, void *data) return global->bsv.movie_start_playback; case BSV_MOVIE_CTL_END: return global->bsv.movie_end && global->bsv.eof_exit; + case BSV_MOVIE_CTL_SET_END: + global->bsv.movie_end = true; + break; + case BSV_MOVIE_CTL_UNSET_END: + global->bsv.movie_end = false; + break; + case BSV_MOVIE_CTL_UNSET_PLAYBACK: + global->bsv.movie_playback = false; + break; case BSV_MOVIE_CTL_DEINIT: if (global->bsv.movie) bsv_movie_free(global->bsv.movie); @@ -329,6 +338,12 @@ bool bsv_movie_ctl(enum bsv_ctl_state state, void *data) case BSV_MOVIE_CTL_INIT: bsv_movie_init_state(); break; + case BSV_MOVIE_CTL_SET_FRAME_START: + bsv_movie_set_frame_start(global->bsv.movie); + break; + case BSV_MOVIE_CTL_SET_FRAME_END: + bsv_movie_set_frame_end(global->bsv.movie); + break; default: return false; } diff --git a/movie.h b/movie.h index 557ef97c37..10a4e30de9 100644 --- a/movie.h +++ b/movie.h @@ -47,9 +47,14 @@ enum bsv_ctl_state BSV_MOVIE_CTL_PLAYBACK_OFF, BSV_MOVIE_CTL_START_RECORDING, BSV_MOVIE_CTL_START_PLAYBACK, + BSV_MOVIE_CTL_UNSET_PLAYBACK, + BSV_MOVIE_CTL_SET_FRAME_START, + BSV_MOVIE_CTL_SET_FRAME_END, BSV_MOVIE_CTL_DEINIT, BSV_MOVIE_CTL_INIT, - BSV_MOVIE_CTL_END + BSV_MOVIE_CTL_END, + BSV_MOVIE_CTL_SET_END, + BSV_MOVIE_CTL_UNSET_END }; bsv_movie_t *bsv_movie_init(const char *path, enum rarch_movie_type type); diff --git a/runloop.c b/runloop.c index d3c9ab9bf2..62e4ea5533 100644 --- a/runloop.c +++ b/runloop.c @@ -625,8 +625,8 @@ bool runloop_ctl(enum runloop_ctl_state state, void *data) event_command(EVENT_CMD_BSV_MOVIE_DEINIT); - global->bsv.movie_end = false; - global->bsv.movie_playback = false; + bsv_movie_ctl(BSV_MOVIE_CTL_UNSET_END, NULL); + bsv_movie_ctl(BSV_MOVIE_CTL_UNSET_PLAYBACK, NULL); break; case RUNLOOP_CTL_STATE_FREE: main_is_idle = false; @@ -1053,7 +1053,7 @@ int rarch_main_iterate(unsigned *sleep_ms) #endif if (bsv_movie_ctl(BSV_MOVIE_CTL_IS_INITED, NULL)) - bsv_movie_set_frame_start(global->bsv.movie); + bsv_movie_ctl(BSV_MOVIE_CTL_SET_FRAME_START, NULL); if (system->camera_callback.caps) driver_camera_poll(); @@ -1092,7 +1092,7 @@ int rarch_main_iterate(unsigned *sleep_ms) } if (bsv_movie_ctl(BSV_MOVIE_CTL_IS_INITED, NULL)) - bsv_movie_set_frame_end(global->bsv.movie); + bsv_movie_ctl(BSV_MOVIE_CTL_SET_FRAME_END, NULL); #ifdef HAVE_NETPLAY if (driver->netplay_data)