Move bsv movie code to movie.c

This commit is contained in:
twinaphex 2015-12-01 00:04:04 +01:00
parent d3ac25ae3e
commit 5d9e6bca60
5 changed files with 110 additions and 69 deletions

View File

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

View File

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

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

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

View File

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