mirror of
https://github.com/libretro/RetroArch
synced 2025-02-21 09:39:56 +00:00
Start reimplementing audio/video/input driver deiniting
This commit is contained in:
parent
058e941d8a
commit
351077dc78
@ -269,11 +269,6 @@ static bool uninit_audio(void)
|
|||||||
|
|
||||||
compute_audio_buffer_statistics();
|
compute_audio_buffer_statistics();
|
||||||
|
|
||||||
current_audio = NULL;
|
|
||||||
|
|
||||||
if (!audio_driver_ctl(RARCH_AUDIO_CTL_OWNS_DRIVER, NULL))
|
|
||||||
audio_driver_context_audio_data = NULL;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -773,6 +768,12 @@ bool audio_driver_ctl(enum rarch_audio_ctl_state state, void *data)
|
|||||||
break;
|
break;
|
||||||
case RARCH_AUDIO_CTL_INIT:
|
case RARCH_AUDIO_CTL_INIT:
|
||||||
return init_audio();
|
return init_audio();
|
||||||
|
case RARCH_AUDIO_CTL_DESTROY:
|
||||||
|
current_audio = NULL;
|
||||||
|
break;
|
||||||
|
case RARCH_AUDIO_CTL_DESTROY_DATA:
|
||||||
|
audio_driver_context_audio_data = NULL;
|
||||||
|
break;
|
||||||
case RARCH_AUDIO_CTL_DEINIT:
|
case RARCH_AUDIO_CTL_DEINIT:
|
||||||
return uninit_audio();
|
return uninit_audio();
|
||||||
case RARCH_AUDIO_CTL_SETUP_REWIND:
|
case RARCH_AUDIO_CTL_SETUP_REWIND:
|
||||||
|
@ -77,6 +77,8 @@ enum rarch_audio_ctl_state
|
|||||||
RARCH_AUDIO_CTL_NONE = 0,
|
RARCH_AUDIO_CTL_NONE = 0,
|
||||||
RARCH_AUDIO_CTL_INIT,
|
RARCH_AUDIO_CTL_INIT,
|
||||||
RARCH_AUDIO_CTL_DEINIT,
|
RARCH_AUDIO_CTL_DEINIT,
|
||||||
|
RARCH_AUDIO_CTL_DESTROY,
|
||||||
|
RARCH_AUDIO_CTL_DESTROY_DATA,
|
||||||
RARCH_AUDIO_CTL_START,
|
RARCH_AUDIO_CTL_START,
|
||||||
RARCH_AUDIO_CTL_STOP,
|
RARCH_AUDIO_CTL_STOP,
|
||||||
RARCH_AUDIO_CTL_FIND_DRIVER,
|
RARCH_AUDIO_CTL_FIND_DRIVER,
|
||||||
|
20
driver.c
20
driver.c
@ -41,6 +41,9 @@ driver_t *driver_get_ptr(void)
|
|||||||
void driver_free(void)
|
void driver_free(void)
|
||||||
{
|
{
|
||||||
driver_t *driver = driver_get_ptr();
|
driver_t *driver = driver_get_ptr();
|
||||||
|
video_driver_ctl(RARCH_DISPLAY_CTL_DESTROY, NULL);
|
||||||
|
audio_driver_ctl(RARCH_AUDIO_CTL_DESTROY, NULL);
|
||||||
|
input_driver_ctl(RARCH_INPUT_CTL_DESTROY, NULL);
|
||||||
memset(driver, 0, sizeof(driver_t));
|
memset(driver, 0, sizeof(driver_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -464,7 +467,22 @@ void uninit_drivers(int flags)
|
|||||||
if (flags & DRIVERS_VIDEO_INPUT)
|
if (flags & DRIVERS_VIDEO_INPUT)
|
||||||
video_driver_ctl(RARCH_DISPLAY_CTL_DEINIT, NULL);
|
video_driver_ctl(RARCH_DISPLAY_CTL_DEINIT, NULL);
|
||||||
|
|
||||||
|
if (flags & DRIVER_VIDEO)
|
||||||
|
{
|
||||||
|
const struct retro_hw_render_callback *hw_render =
|
||||||
|
(const struct retro_hw_render_callback*)video_driver_callback();
|
||||||
|
|
||||||
|
if (hw_render->context_destroy && !video_driver_ctl(RARCH_DISPLAY_CTL_IS_VIDEO_CACHE_CONTEXT, NULL))
|
||||||
|
hw_render->context_destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((flags & DRIVER_VIDEO) && !video_driver_ctl(RARCH_DISPLAY_CTL_OWNS_DRIVER, NULL))
|
||||||
|
video_driver_ctl(RARCH_DISPLAY_CTL_DESTROY_DATA, NULL);
|
||||||
|
|
||||||
if ((flags & DRIVER_INPUT) && !input_driver_ctl(RARCH_INPUT_CTL_OWNS_DRIVER, NULL))
|
if ((flags & DRIVER_INPUT) && !input_driver_ctl(RARCH_INPUT_CTL_OWNS_DRIVER, NULL))
|
||||||
input_driver_ctl(RARCH_INPUT_CTL_DESTROY, NULL);
|
input_driver_ctl(RARCH_INPUT_CTL_DESTROY_DATA, NULL);
|
||||||
|
|
||||||
|
if ((flags & DRIVER_AUDIO) && !audio_driver_ctl(RARCH_AUDIO_CTL_OWNS_DRIVER, NULL))
|
||||||
|
audio_driver_ctl(RARCH_AUDIO_CTL_DESTROY_DATA, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -511,9 +511,6 @@ static void deinit_pixel_converter(void)
|
|||||||
|
|
||||||
static bool uninit_video_input(void)
|
static bool uninit_video_input(void)
|
||||||
{
|
{
|
||||||
const struct retro_hw_render_callback *hw_render =
|
|
||||||
(const struct retro_hw_render_callback*)video_driver_callback();
|
|
||||||
|
|
||||||
event_command(EVENT_CMD_OVERLAY_DEINIT);
|
event_command(EVENT_CMD_OVERLAY_DEINIT);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
@ -537,14 +534,7 @@ static bool uninit_video_input(void)
|
|||||||
event_command(EVENT_CMD_SHADER_DIR_DEINIT);
|
event_command(EVENT_CMD_SHADER_DIR_DEINIT);
|
||||||
video_monitor_compute_fps_statistics();
|
video_monitor_compute_fps_statistics();
|
||||||
|
|
||||||
if (hw_render->context_destroy && !video_driver_ctl(RARCH_DISPLAY_CTL_IS_VIDEO_CACHE_CONTEXT, NULL))
|
|
||||||
hw_render->context_destroy();
|
|
||||||
|
|
||||||
video_driver_ctl(RARCH_DISPLAY_CTL_UNSET_RGBA, NULL);
|
|
||||||
current_video = NULL;
|
|
||||||
|
|
||||||
if (!video_driver_ctl(RARCH_DISPLAY_CTL_OWNS_DRIVER, NULL))
|
|
||||||
video_driver_data = NULL;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1490,6 +1480,13 @@ bool video_driver_ctl(enum rarch_display_ctl_state state, void *data)
|
|||||||
return gfx_ctx_get_video_output_next(gfx_ctx_data_get_ptr());
|
return gfx_ctx_get_video_output_next(gfx_ctx_data_get_ptr());
|
||||||
case RARCH_DISPLAY_CTL_INIT:
|
case RARCH_DISPLAY_CTL_INIT:
|
||||||
return init_video();
|
return init_video();
|
||||||
|
case RARCH_DISPLAY_CTL_DESTROY:
|
||||||
|
video_driver_ctl(RARCH_DISPLAY_CTL_UNSET_RGBA, NULL);
|
||||||
|
current_video = NULL;
|
||||||
|
break;
|
||||||
|
case RARCH_DISPLAY_CTL_DESTROY_DATA:
|
||||||
|
video_driver_data = NULL;
|
||||||
|
break;
|
||||||
case RARCH_DISPLAY_CTL_DEINIT:
|
case RARCH_DISPLAY_CTL_DEINIT:
|
||||||
return uninit_video_input();
|
return uninit_video_input();
|
||||||
case RARCH_DISPLAY_CTL_MONITOR_RESET:
|
case RARCH_DISPLAY_CTL_MONITOR_RESET:
|
||||||
|
@ -279,6 +279,8 @@ enum rarch_display_ctl_state
|
|||||||
RARCH_DISPLAY_CTL_NONE = 0,
|
RARCH_DISPLAY_CTL_NONE = 0,
|
||||||
RARCH_DISPLAY_CTL_INIT,
|
RARCH_DISPLAY_CTL_INIT,
|
||||||
RARCH_DISPLAY_CTL_DEINIT,
|
RARCH_DISPLAY_CTL_DEINIT,
|
||||||
|
RARCH_DISPLAY_CTL_DESTROY,
|
||||||
|
RARCH_DISPLAY_CTL_DESTROY_DATA,
|
||||||
RARCH_DISPLAY_CTL_SUPPORTS_RGBA,
|
RARCH_DISPLAY_CTL_SUPPORTS_RGBA,
|
||||||
RARCH_DISPLAY_CTL_SET_RGBA,
|
RARCH_DISPLAY_CTL_SET_RGBA,
|
||||||
RARCH_DISPLAY_CTL_UNSET_RGBA,
|
RARCH_DISPLAY_CTL_UNSET_RGBA,
|
||||||
|
@ -712,13 +712,16 @@ bool input_driver_ctl(enum rarch_input_ctl_state state, void *data)
|
|||||||
return false;
|
return false;
|
||||||
current_input->free(current_input_data);
|
current_input->free(current_input_data);
|
||||||
return true;
|
return true;
|
||||||
|
case RARCH_INPUT_CTL_DESTROY_DATA:
|
||||||
|
current_input_data = NULL;
|
||||||
|
break;
|
||||||
case RARCH_INPUT_CTL_DESTROY:
|
case RARCH_INPUT_CTL_DESTROY:
|
||||||
input_driver_flushing_input = false;
|
input_driver_flushing_input = false;
|
||||||
input_driver_block_hotkey = false;
|
input_driver_block_hotkey = false;
|
||||||
input_driver_nonblock_state = false;
|
input_driver_nonblock_state = false;
|
||||||
memset(&input_driver_turbo_btns, 0, sizeof(turbo_buttons_t));
|
memset(&input_driver_turbo_btns, 0, sizeof(turbo_buttons_t));
|
||||||
current_input = NULL;
|
current_input = NULL;
|
||||||
current_input_data = NULL;
|
input_driver_ctl(RARCH_INPUT_CTL_DESTROY_DATA, NULL);
|
||||||
return true;
|
return true;
|
||||||
case RARCH_INPUT_CTL_GRAB_STDIN:
|
case RARCH_INPUT_CTL_GRAB_STDIN:
|
||||||
if (current_input->grab_stdin)
|
if (current_input->grab_stdin)
|
||||||
|
@ -52,6 +52,7 @@ enum rarch_input_ctl_state
|
|||||||
RARCH_INPUT_CTL_INIT,
|
RARCH_INPUT_CTL_INIT,
|
||||||
RARCH_INPUT_CTL_DEINIT,
|
RARCH_INPUT_CTL_DEINIT,
|
||||||
RARCH_INPUT_CTL_DESTROY,
|
RARCH_INPUT_CTL_DESTROY,
|
||||||
|
RARCH_INPUT_CTL_DESTROY_DATA,
|
||||||
RARCH_INPUT_CTL_HAS_CAPABILITIES,
|
RARCH_INPUT_CTL_HAS_CAPABILITIES,
|
||||||
RARCH_INPUT_CTL_POLL,
|
RARCH_INPUT_CTL_POLL,
|
||||||
RARCH_INPUT_CTL_FIND_DRIVER,
|
RARCH_INPUT_CTL_FIND_DRIVER,
|
||||||
|
@ -187,7 +187,6 @@ static bool netplay_can_poll(netplay_t *netplay)
|
|||||||
|
|
||||||
static bool send_chunk(netplay_t *netplay)
|
static bool send_chunk(netplay_t *netplay)
|
||||||
{
|
{
|
||||||
bool check_where_to_send = false;
|
|
||||||
const struct sockaddr *addr = NULL;
|
const struct sockaddr *addr = NULL;
|
||||||
|
|
||||||
if (netplay->addr)
|
if (netplay->addr)
|
||||||
@ -304,7 +303,7 @@ static bool netplay_get_cmd(netplay_t *netplay)
|
|||||||
if (!socket_receive_all_blocking(netplay->fd, &cmd, sizeof(cmd)))
|
if (!socket_receive_all_blocking(netplay->fd, &cmd, sizeof(cmd)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
cmd = ntohl(cmd);
|
cmd = ntohl(cmd);
|
||||||
|
|
||||||
cmd_size = cmd & 0xffff;
|
cmd_size = cmd & 0xffff;
|
||||||
cmd = cmd >> 16;
|
cmd = cmd >> 16;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user