mirror of
https://github.com/libretro/RetroArch.git
synced 2025-02-21 18:21:51 +00:00
Move bsv movie code to movie.c
This commit is contained in:
parent
d3ac25ae3e
commit
5d9e6bca60
@ -79,50 +79,6 @@ static void event_save_files(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void event_init_movie(void)
|
||||
{
|
||||
settings_t *settings = config_get_ptr();
|
||||
global_t *global = global_get_ptr();
|
||||
|
||||
if (global->bsv.movie_start_playback)
|
||||
{
|
||||
if (!(global->bsv.movie = bsv_movie_init(global->bsv.movie_start_path,
|
||||
RARCH_MOVIE_PLAYBACK)))
|
||||
{
|
||||
RARCH_ERR("%s: \"%s\".\n",
|
||||
msg_hash_to_str(MSG_FAILED_TO_LOAD_MOVIE_FILE),
|
||||
global->bsv.movie_start_path);
|
||||
retro_fail(1, "event_init_movie()");
|
||||
}
|
||||
|
||||
global->bsv.movie_playback = true;
|
||||
rarch_main_msg_queue_push_new(MSG_STARTING_MOVIE_PLAYBACK, 2, 180, false);
|
||||
RARCH_LOG("%s.\n", msg_hash_to_str(MSG_STARTING_MOVIE_PLAYBACK));
|
||||
settings->rewind_granularity = 1;
|
||||
}
|
||||
else if (global->bsv.movie_start_recording)
|
||||
{
|
||||
char msg[PATH_MAX_LENGTH] = {0};
|
||||
snprintf(msg, sizeof(msg),
|
||||
"%s \"%s\".",
|
||||
msg_hash_to_str(MSG_STARTING_MOVIE_RECORD_TO),
|
||||
global->bsv.movie_start_path);
|
||||
|
||||
if (!(global->bsv.movie = bsv_movie_init(global->bsv.movie_start_path,
|
||||
RARCH_MOVIE_RECORD)))
|
||||
{
|
||||
rarch_main_msg_queue_push_new(MSG_FAILED_TO_START_MOVIE_RECORD, 1, 180, true);
|
||||
RARCH_ERR("%s.\n", msg_hash_to_str(MSG_FAILED_TO_START_MOVIE_RECORD));
|
||||
return;
|
||||
}
|
||||
|
||||
rarch_main_msg_queue_push(msg, 1, 180, true);
|
||||
RARCH_LOG("%s \"%s\".\n",
|
||||
msg_hash_to_str(MSG_STARTING_MOVIE_RECORD_TO),
|
||||
global->bsv.movie_start_path);
|
||||
settings->rewind_granularity = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* event_disk_control_set_eject:
|
||||
@ -474,15 +430,12 @@ static void event_deinit_core(bool reinit)
|
||||
static void event_init_cheats(void)
|
||||
{
|
||||
bool allow_cheats = true;
|
||||
driver_t *driver = driver_get_ptr();
|
||||
global_t *global = global_get_ptr();
|
||||
|
||||
(void)driver;
|
||||
|
||||
#ifdef HAVE_NETPLAY
|
||||
driver_t *driver = driver_get_ptr();
|
||||
|
||||
allow_cheats &= !driver->netplay_data;
|
||||
#endif
|
||||
allow_cheats &= !global->bsv.movie;
|
||||
allow_cheats &= !bsv_movie_ctl(BSV_MOVIE_CTL_IS_INITED, NULL);
|
||||
|
||||
if (!allow_cheats)
|
||||
return;
|
||||
@ -1043,7 +996,7 @@ bool event_command(enum event_command cmd)
|
||||
case EVENT_CMD_LOAD_STATE:
|
||||
/* Immutable - disallow savestate load when
|
||||
* we absolutely cannot change game state. */
|
||||
if (global->bsv.movie)
|
||||
if (bsv_movie_ctl(BSV_MOVIE_CTL_IS_INITED, NULL))
|
||||
return false;
|
||||
|
||||
#ifdef HAVE_NETPLAY
|
||||
@ -1502,16 +1455,11 @@ bool event_command(enum event_command cmd)
|
||||
event_command(EVENT_CMD_AUTOSAVE_INIT);
|
||||
break;
|
||||
case EVENT_CMD_BSV_MOVIE_DEINIT:
|
||||
if (!global)
|
||||
break;
|
||||
|
||||
if (global->bsv.movie)
|
||||
bsv_movie_free(global->bsv.movie);
|
||||
global->bsv.movie = NULL;
|
||||
bsv_movie_ctl(BSV_MOVIE_CTL_DEINIT, NULL);
|
||||
break;
|
||||
case EVENT_CMD_BSV_MOVIE_INIT:
|
||||
event_command(EVENT_CMD_BSV_MOVIE_DEINIT);
|
||||
event_init_movie();
|
||||
bsv_movie_ctl(BSV_MOVIE_CTL_INIT, NULL);
|
||||
break;
|
||||
case EVENT_CMD_NETPLAY_DEINIT:
|
||||
#ifdef HAVE_NETPLAY
|
||||
|
@ -474,7 +474,7 @@ int16_t input_state(unsigned port, unsigned device,
|
||||
|
||||
device &= RETRO_DEVICE_MASK;
|
||||
|
||||
if (global->bsv.movie && global->bsv.movie_playback)
|
||||
if (bsv_movie_ctl(BSV_MOVIE_CTL_PLAYBACK_ON, NULL))
|
||||
{
|
||||
int16_t ret;
|
||||
if (bsv_movie_get_input(global->bsv.movie, &ret))
|
||||
@ -526,7 +526,7 @@ int16_t input_state(unsigned port, unsigned device,
|
||||
}
|
||||
}
|
||||
|
||||
if (global->bsv.movie && !global->bsv.movie_playback)
|
||||
if (bsv_movie_ctl(BSV_MOVIE_CTL_PLAYBACK_OFF, NULL))
|
||||
bsv_movie_set_input(global->bsv.movie, res);
|
||||
|
||||
return res;
|
||||
|
80
movie.c
80
movie.c
@ -21,7 +21,10 @@
|
||||
#include <rhash.h>
|
||||
#include <retro_endianness.h>
|
||||
|
||||
#include "movie.h"
|
||||
#include "general.h"
|
||||
#include "msg_hash.h"
|
||||
#include "runloop.h"
|
||||
#include "verbosity.h"
|
||||
|
||||
struct bsv_movie
|
||||
@ -255,3 +258,80 @@ void bsv_movie_frame_rewind(bsv_movie_t *handle)
|
||||
}
|
||||
}
|
||||
|
||||
static void bsv_movie_init_state(void)
|
||||
{
|
||||
settings_t *settings = config_get_ptr();
|
||||
global_t *global = global_get_ptr();
|
||||
|
||||
if (bsv_movie_ctl(BSV_MOVIE_CTL_START_PLAYBACK, NULL))
|
||||
{
|
||||
if (!(global->bsv.movie = bsv_movie_init(global->bsv.movie_start_path,
|
||||
RARCH_MOVIE_PLAYBACK)))
|
||||
{
|
||||
RARCH_ERR("%s: \"%s\".\n",
|
||||
msg_hash_to_str(MSG_FAILED_TO_LOAD_MOVIE_FILE),
|
||||
global->bsv.movie_start_path);
|
||||
retro_fail(1, "event_init_movie()");
|
||||
}
|
||||
|
||||
global->bsv.movie_playback = true;
|
||||
rarch_main_msg_queue_push_new(MSG_STARTING_MOVIE_PLAYBACK, 2, 180, false);
|
||||
RARCH_LOG("%s.\n", msg_hash_to_str(MSG_STARTING_MOVIE_PLAYBACK));
|
||||
settings->rewind_granularity = 1;
|
||||
}
|
||||
else if (bsv_movie_ctl(BSV_MOVIE_CTL_START_RECORDING, NULL))
|
||||
{
|
||||
char msg[PATH_MAX_LENGTH] = {0};
|
||||
snprintf(msg, sizeof(msg),
|
||||
"%s \"%s\".",
|
||||
msg_hash_to_str(MSG_STARTING_MOVIE_RECORD_TO),
|
||||
global->bsv.movie_start_path);
|
||||
|
||||
if (!(global->bsv.movie = bsv_movie_init(global->bsv.movie_start_path,
|
||||
RARCH_MOVIE_RECORD)))
|
||||
{
|
||||
rarch_main_msg_queue_push_new(MSG_FAILED_TO_START_MOVIE_RECORD, 1, 180, true);
|
||||
RARCH_ERR("%s.\n", msg_hash_to_str(MSG_FAILED_TO_START_MOVIE_RECORD));
|
||||
return;
|
||||
}
|
||||
|
||||
rarch_main_msg_queue_push(msg, 1, 180, true);
|
||||
RARCH_LOG("%s \"%s\".\n",
|
||||
msg_hash_to_str(MSG_STARTING_MOVIE_RECORD_TO),
|
||||
global->bsv.movie_start_path);
|
||||
settings->rewind_granularity = 1;
|
||||
}
|
||||
}
|
||||
|
||||
bool bsv_movie_ctl(enum bsv_ctl_state state, void *data)
|
||||
{
|
||||
global_t *global = global_get_ptr();
|
||||
|
||||
switch (state)
|
||||
{
|
||||
case BSV_MOVIE_CTL_IS_INITED:
|
||||
return global->bsv.movie;
|
||||
case BSV_MOVIE_CTL_PLAYBACK_ON:
|
||||
return global->bsv.movie && global->bsv.movie_playback;
|
||||
case BSV_MOVIE_CTL_PLAYBACK_OFF:
|
||||
return global->bsv.movie && !global->bsv.movie_playback;
|
||||
case BSV_MOVIE_CTL_START_RECORDING:
|
||||
return global->bsv.movie_start_recording;
|
||||
case BSV_MOVIE_CTL_START_PLAYBACK:
|
||||
return global->bsv.movie_start_playback;
|
||||
case BSV_MOVIE_CTL_END:
|
||||
return global->bsv.movie_end && global->bsv.eof_exit;
|
||||
case BSV_MOVIE_CTL_DEINIT:
|
||||
if (global->bsv.movie)
|
||||
bsv_movie_free(global->bsv.movie);
|
||||
global->bsv.movie = NULL;
|
||||
break;
|
||||
case BSV_MOVIE_CTL_INIT:
|
||||
bsv_movie_init_state();
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
14
movie.h
14
movie.h
@ -40,6 +40,18 @@ enum rarch_movie_type
|
||||
RARCH_MOVIE_RECORD
|
||||
};
|
||||
|
||||
enum bsv_ctl_state
|
||||
{
|
||||
BSV_MOVIE_CTL_IS_INITED = 0,
|
||||
BSV_MOVIE_CTL_PLAYBACK_ON,
|
||||
BSV_MOVIE_CTL_PLAYBACK_OFF,
|
||||
BSV_MOVIE_CTL_START_RECORDING,
|
||||
BSV_MOVIE_CTL_START_PLAYBACK,
|
||||
BSV_MOVIE_CTL_DEINIT,
|
||||
BSV_MOVIE_CTL_INIT,
|
||||
BSV_MOVIE_CTL_END
|
||||
};
|
||||
|
||||
bsv_movie_t *bsv_movie_init(const char *path, enum rarch_movie_type type);
|
||||
|
||||
/* Playback. */
|
||||
@ -57,6 +69,8 @@ void bsv_movie_frame_rewind(bsv_movie_t *handle);
|
||||
|
||||
void bsv_movie_free(bsv_movie_t *handle);
|
||||
|
||||
bool bsv_movie_ctl(enum bsv_ctl_state state, void *data);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
17
runloop.c
17
runloop.c
@ -562,11 +562,11 @@ bool runloop_ctl(enum runloop_ctl_state state, void *data)
|
||||
case RUNLOOP_CTL_CHECK_MOVIE:
|
||||
if (global->bsv.movie_playback)
|
||||
return runloop_ctl(RUNLOOP_CTL_CHECK_MOVIE_PLAYBACK, NULL);
|
||||
if (!global->bsv.movie)
|
||||
if (!bsv_movie_ctl(BSV_MOVIE_CTL_IS_INITED, NULL))
|
||||
return runloop_ctl(RUNLOOP_CTL_CHECK_MOVIE_INIT, NULL);
|
||||
return runloop_ctl(RUNLOOP_CTL_CHECK_MOVIE_RECORD, NULL);
|
||||
case RUNLOOP_CTL_CHECK_MOVIE_RECORD:
|
||||
if (!global->bsv.movie)
|
||||
if (!bsv_movie_ctl(BSV_MOVIE_CTL_IS_INITED, NULL))
|
||||
return false;
|
||||
|
||||
rarch_main_msg_queue_push_new(
|
||||
@ -576,7 +576,7 @@ bool runloop_ctl(enum runloop_ctl_state state, void *data)
|
||||
event_command(EVENT_CMD_BSV_MOVIE_DEINIT);
|
||||
break;
|
||||
case RUNLOOP_CTL_CHECK_MOVIE_INIT:
|
||||
if (global->bsv.movie)
|
||||
if (bsv_movie_ctl(BSV_MOVIE_CTL_IS_INITED, NULL))
|
||||
return false;
|
||||
{
|
||||
char path[PATH_MAX_LENGTH], msg[PATH_MAX_LENGTH];
|
||||
@ -597,9 +597,9 @@ bool runloop_ctl(enum runloop_ctl_state state, void *data)
|
||||
|
||||
global->bsv.movie = bsv_movie_init(path, RARCH_MOVIE_RECORD);
|
||||
|
||||
if (!global->bsv.movie)
|
||||
if (!bsv_movie_ctl(BSV_MOVIE_CTL_IS_INITED, NULL))
|
||||
return false;
|
||||
else if (global->bsv.movie)
|
||||
else if (bsv_movie_ctl(BSV_MOVIE_CTL_IS_INITED, NULL))
|
||||
{
|
||||
rarch_main_msg_queue_push(msg, 1, 180, true);
|
||||
RARCH_LOG("%s \"%s\".\n",
|
||||
@ -865,11 +865,10 @@ static void rarch_main_cmd_get_state(
|
||||
static INLINE int rarch_main_iterate_time_to_exit(event_cmd_state_t *cmd)
|
||||
{
|
||||
uint64_t *frame_count = NULL;
|
||||
global_t *global = global_get_ptr();
|
||||
rarch_system_info_t *system = rarch_system_info_get_ptr();
|
||||
bool shutdown_pressed = (system && system->shutdown) || cmd->quit_key_pressed;
|
||||
bool video_alive = video_driver_ctl(RARCH_DISPLAY_CTL_IS_ALIVE, NULL);
|
||||
bool movie_end = (global->bsv.movie_end && global->bsv.eof_exit);
|
||||
bool movie_end = bsv_movie_ctl(BSV_MOVIE_CTL_END, NULL);
|
||||
bool frame_count_end = false;
|
||||
|
||||
video_driver_ctl(RARCH_DISPLAY_CTL_GET_FRAME_COUNT, &frame_count);
|
||||
@ -1053,7 +1052,7 @@ int rarch_main_iterate(unsigned *sleep_ms)
|
||||
netplay_pre_frame((netplay_t*)driver->netplay_data);
|
||||
#endif
|
||||
|
||||
if (global->bsv.movie)
|
||||
if (bsv_movie_ctl(BSV_MOVIE_CTL_IS_INITED, NULL))
|
||||
bsv_movie_set_frame_start(global->bsv.movie);
|
||||
|
||||
if (system->camera_callback.caps)
|
||||
@ -1092,7 +1091,7 @@ int rarch_main_iterate(unsigned *sleep_ms)
|
||||
input_pop_analog_dpad(settings->input.autoconf_binds[i]);
|
||||
}
|
||||
|
||||
if (global->bsv.movie)
|
||||
if (bsv_movie_ctl(BSV_MOVIE_CTL_IS_INITED, NULL))
|
||||
bsv_movie_set_frame_end(global->bsv.movie);
|
||||
|
||||
#ifdef HAVE_NETPLAY
|
||||
|
Loading…
x
Reference in New Issue
Block a user