From 0d18c61bc55a7ba9edf2a765e87fed06936ae556 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 26 Sep 2015 13:04:07 +0200 Subject: [PATCH] Add RARCH_MAIN_CTL_IS_PAUSED --- audio/audio_driver.c | 6 ++++-- command_event.c | 7 +++++-- gfx/drivers/gl.c | 10 ++++++---- gfx/video_thread_wrapper.c | 6 ++++-- input/drivers/android_input.c | 5 ++++- runloop.c | 14 +++++++++----- runloop.h | 5 ++--- screenshot.c | 7 +++++-- 8 files changed, 39 insertions(+), 21 deletions(-) diff --git a/audio/audio_driver.c b/audio/audio_driver.c index 173a530c38..7cba721d6f 100644 --- a/audio/audio_driver.c +++ b/audio/audio_driver.c @@ -594,7 +594,7 @@ void audio_driver_set_nonblocking_state(bool enable) **/ bool audio_driver_flush(const int16_t *data, size_t samples) { - bool is_slowmotion; + bool is_slowmotion, is_paused; static struct retro_perf_counter audio_convert_s16 = {0}; static struct retro_perf_counter audio_convert_float = {0}; static struct retro_perf_counter audio_dsp = {0}; @@ -619,7 +619,9 @@ bool audio_driver_flush(const int16_t *data, size_t samples) driver->recording->push_audio(driver->recording_data, &ffemu_data); } - if (rarch_main_is_paused() || settings->audio.mute_enable) + rarch_main_ctl(RARCH_MAIN_CTL_IS_PAUSED, &is_paused); + + if (is_paused || settings->audio.mute_enable) return true; if (!driver->audio_active || !audio_data.data) return false; diff --git a/command_event.c b/command_event.c index 6fadf7ba70..39ecf106b5 100644 --- a/command_event.c +++ b/command_event.c @@ -1439,7 +1439,9 @@ bool event_command(enum event_command cmd) #endif break; case EVENT_CMD_PAUSE_CHECKS: - if (rarch_main_is_paused()) + rarch_main_ctl(RARCH_MAIN_CTL_IS_PAUSED, &boolean); + + if (boolean) { RARCH_LOG("%s\n", msg_hash_to_str(MSG_PAUSED)); event_command(EVENT_CMD_AUDIO_STOP); @@ -1454,7 +1456,8 @@ bool event_command(enum event_command cmd) } break; case EVENT_CMD_PAUSE_TOGGLE: - rarch_main_set_pause(!rarch_main_is_paused()); + rarch_main_ctl(RARCH_MAIN_CTL_IS_PAUSED, &boolean); + rarch_main_set_pause(!boolean); event_command(EVENT_CMD_PAUSE_CHECKS); break; case EVENT_CMD_UNPAUSE: diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index c83507d74f..bbb7d253b0 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -1632,7 +1632,7 @@ static bool gl_frame(void *data, const void *frame, uint64_t frame_count, unsigned pitch, const char *msg) { - bool is_slowmotion; + bool is_slowmotion, is_paused; unsigned width, height; struct gfx_tex_info feedback_info; static struct retro_perf_counter frame_run = {0}; @@ -1840,12 +1840,14 @@ static bool gl_frame(void *data, const void *frame, #endif #endif rarch_main_ctl(RARCH_MAIN_CTL_IS_SLOWMOTION, &is_slowmotion); + rarch_main_ctl(RARCH_MAIN_CTL_IS_PAUSED, &is_paused); /* Disable BFI during fast forward, slow-motion, * and pause to prevent flicker. */ - if (settings->video.black_frame_insertion && - !driver->nonblock_state && !is_slowmotion - && !rarch_main_is_paused()) + if ( + settings->video.black_frame_insertion + && !driver->nonblock_state + && !is_slowmotion && !is_paused) { gfx_ctx_swap_buffers(gl); glClear(GL_COLOR_BUFFER_BIT); diff --git a/gfx/video_thread_wrapper.c b/gfx/video_thread_wrapper.c index 0b1410eea4..807c06edb0 100644 --- a/gfx/video_thread_wrapper.c +++ b/gfx/video_thread_wrapper.c @@ -430,10 +430,12 @@ static void thread_loop(void *data) static bool thread_alive(void *data) { - bool ret; + bool ret, is_paused; thread_video_t *thr = (thread_video_t*)data; - if (rarch_main_is_paused()) + rarch_main_ctl(RARCH_MAIN_CTL_IS_PAUSED, &is_paused); + + if (is_paused) { thread_packet_t pkt = { CMD_ALIVE }; thread_send_and_wait(thr, &pkt); diff --git a/input/drivers/android_input.c b/input/drivers/android_input.c index ee080f62bd..f6649a7449 100644 --- a/input/drivers/android_input.c +++ b/input/drivers/android_input.c @@ -293,6 +293,7 @@ error: static void engine_handle_cmd(void) { + bool is_paused; int8_t cmd; struct android_app *android_app = (struct android_app*)g_android; driver_t *driver = driver_get_ptr(); @@ -330,7 +331,9 @@ static void engine_handle_cmd(void) scond_broadcast(android_app->cond); slock_unlock(android_app->mutex); - if (rarch_main_is_paused()) + rarch_main_ctl(RARCH_MAIN_CTL_IS_PAUSED, &is_paused); + + if (is_paused) event_command(EVENT_CMD_REINIT); break; diff --git a/runloop.c b/runloop.c index f8b7c8f0ab..0078ce078a 100644 --- a/runloop.c +++ b/runloop.c @@ -896,11 +896,6 @@ void rarch_main_set_idle(unsigned enable) main_is_idle = enable; } -bool rarch_main_is_paused(void) -{ - return main_is_paused; -} - bool rarch_main_ctl(enum rarch_main_ctl_state state, void *data) { switch (state) @@ -921,6 +916,15 @@ bool rarch_main_ctl(enum rarch_main_ctl_state state, void *data) *ptr = main_is_slowmotion; } return true; + case RARCH_MAIN_CTL_IS_PAUSED: + { + bool *ptr = (bool*)data; + if (!ptr) + return false; + *ptr = main_is_paused; + } + return true; + } return false; diff --git a/runloop.h b/runloop.h index 0827589287..f4ddb4c2f9 100644 --- a/runloop.h +++ b/runloop.h @@ -36,7 +36,8 @@ extern "C" { enum rarch_main_ctl_state { RARCH_MAIN_CTL_IS_IDLE = 0, - RARCH_MAIN_CTL_IS_SLOWMOTION + RARCH_MAIN_CTL_IS_SLOWMOTION, + RARCH_MAIN_CTL_IS_PAUSED, }; typedef struct rarch_resolution @@ -335,8 +336,6 @@ FILE *rarch_main_log_file(void); bool rarch_main_ctl(enum rarch_main_ctl_state state, void *data); -bool rarch_main_is_paused(void); - void rarch_main_set_slowmotion(unsigned enable); void rarch_main_set_pause(unsigned enable); diff --git a/screenshot.c b/screenshot.c index 610ad5b605..7352f032fd 100644 --- a/screenshot.c +++ b/screenshot.c @@ -131,6 +131,7 @@ static bool take_screenshot_raw(void) **/ bool take_screenshot(void) { + bool is_paused; bool viewport_read = false; bool ret = true; const char *msg = NULL; @@ -205,9 +206,11 @@ bool take_screenshot(void) msg = msg_hash_to_str(MSG_FAILED_TO_TAKE_SCREENSHOT); } - rarch_main_msg_queue_push(msg, 1, rarch_main_is_paused() ? 1 : 180, true); + rarch_main_ctl(RARCH_MAIN_CTL_IS_PAUSED, &is_paused); - if (rarch_main_is_paused()) + rarch_main_msg_queue_push(msg, 1, is_paused ? 1 : 180, true); + + if (is_paused) video_driver_cached_frame(); return ret;