Create driver mask enums

This commit is contained in:
twinaphex 2016-12-05 01:47:56 +01:00
parent 6e28aa30bb
commit f751199860
3 changed files with 50 additions and 38 deletions

View File

@ -2195,7 +2195,7 @@ bool command_event(enum event_command cmd, void *data)
break; break;
case CMD_EVENT_AUDIO_REINIT: case CMD_EVENT_AUDIO_REINIT:
{ {
int flags = DRIVER_AUDIO; int flags = DRIVER_AUDIO_MASK;
driver_ctl(RARCH_DRIVER_CTL_UNINIT, &flags); driver_ctl(RARCH_DRIVER_CTL_UNINIT, &flags);
driver_ctl(RARCH_DRIVER_CTL_INIT, &flags); driver_ctl(RARCH_DRIVER_CTL_INIT, &flags);
} }

View File

@ -293,17 +293,17 @@ static bool driver_update_system_av_info(const struct retro_system_av_info *info
**/ **/
static void init_drivers(int flags) static void init_drivers(int flags)
{ {
if (flags & DRIVER_VIDEO) if (flags & DRIVER_VIDEO_MASK)
video_driver_unset_own_driver(); video_driver_unset_own_driver();
if (flags & DRIVER_AUDIO) if (flags & DRIVER_AUDIO_MASK)
audio_driver_unset_own_driver(); audio_driver_unset_own_driver();
if (flags & DRIVER_INPUT) if (flags & DRIVER_INPUT_MASK)
input_driver_unset_own_driver(); input_driver_unset_own_driver();
if (flags & DRIVER_CAMERA) if (flags & DRIVER_CAMERA_MASK)
camera_driver_ctl(RARCH_CAMERA_CTL_UNSET_OWN_DRIVER, NULL); camera_driver_ctl(RARCH_CAMERA_CTL_UNSET_OWN_DRIVER, NULL);
if (flags & DRIVER_LOCATION) if (flags & DRIVER_LOCATION_MASK)
location_driver_ctl(RARCH_LOCATION_CTL_UNSET_OWN_DRIVER, NULL); location_driver_ctl(RARCH_LOCATION_CTL_UNSET_OWN_DRIVER, NULL);
if (flags & DRIVER_WIFI) if (flags & DRIVER_WIFI_MASK)
wifi_driver_ctl(RARCH_WIFI_CTL_UNSET_OWN_DRIVER, NULL); wifi_driver_ctl(RARCH_WIFI_CTL_UNSET_OWN_DRIVER, NULL);
#ifdef HAVE_MENU #ifdef HAVE_MENU
@ -311,10 +311,10 @@ static void init_drivers(int flags)
menu_driver_ctl(RARCH_MENU_CTL_SET_OWN_DRIVER, NULL); menu_driver_ctl(RARCH_MENU_CTL_SET_OWN_DRIVER, NULL);
#endif #endif
if (flags & (DRIVER_VIDEO | DRIVER_AUDIO)) if (flags & (DRIVER_VIDEO_MASK | DRIVER_AUDIO_MASK))
driver_adjust_system_rates(); driver_adjust_system_rates();
if (flags & DRIVER_VIDEO) if (flags & DRIVER_VIDEO_MASK)
{ {
struct retro_hw_render_callback *hwr = struct retro_hw_render_callback *hwr =
video_driver_get_hw_context(); video_driver_get_hw_context();
@ -330,29 +330,29 @@ static void init_drivers(int flags)
runloop_ctl(RUNLOOP_CTL_SET_FRAME_TIME_LAST, NULL); runloop_ctl(RUNLOOP_CTL_SET_FRAME_TIME_LAST, NULL);
} }
if (flags & DRIVER_AUDIO) if (flags & DRIVER_AUDIO_MASK)
{ {
audio_driver_init(); audio_driver_init();
audio_driver_new_devices_list(); audio_driver_new_devices_list();
} }
/* Only initialize camera driver if we're ever going to use it. */ /* Only initialize camera driver if we're ever going to use it. */
if ((flags & DRIVER_CAMERA) && camera_driver_ctl(RARCH_CAMERA_CTL_IS_ACTIVE, NULL)) if ((flags & DRIVER_CAMERA_MASK) && camera_driver_ctl(RARCH_CAMERA_CTL_IS_ACTIVE, NULL))
camera_driver_ctl(RARCH_CAMERA_CTL_INIT, NULL); camera_driver_ctl(RARCH_CAMERA_CTL_INIT, NULL);
/* Only initialize location driver if we're ever going to use it. */ /* Only initialize location driver if we're ever going to use it. */
if ((flags & DRIVER_LOCATION) && location_driver_ctl(RARCH_LOCATION_CTL_IS_ACTIVE, NULL)) if ((flags & DRIVER_LOCATION_MASK) && location_driver_ctl(RARCH_LOCATION_CTL_IS_ACTIVE, NULL))
init_location(); init_location();
#ifdef HAVE_MENU #ifdef HAVE_MENU
if (flags & DRIVER_MENU) if (flags & DRIVER_MENU_MASK)
{ {
menu_driver_ctl(RARCH_MENU_CTL_INIT, NULL); menu_driver_ctl(RARCH_MENU_CTL_INIT, NULL);
menu_driver_ctl(RARCH_MENU_CTL_CONTEXT_RESET, NULL); menu_driver_ctl(RARCH_MENU_CTL_CONTEXT_RESET, NULL);
} }
#endif #endif
if (flags & (DRIVER_VIDEO | DRIVER_AUDIO)) if (flags & (DRIVER_VIDEO_MASK | DRIVER_AUDIO_MASK))
{ {
/* Keep non-throttled state as good as possible. */ /* Keep non-throttled state as good as possible. */
if (input_driver_is_nonblock_state()) if (input_driver_is_nonblock_state())
@ -388,32 +388,32 @@ static void init_drivers(int flags)
static void uninit_drivers(int flags) static void uninit_drivers(int flags)
{ {
#ifdef HAVE_MENU #ifdef HAVE_MENU
if (flags & DRIVER_MENU) if (flags & DRIVER_MENU_MASK)
menu_driver_ctl(RARCH_MENU_CTL_DEINIT, NULL); menu_driver_ctl(RARCH_MENU_CTL_DEINIT, NULL);
#endif #endif
if ((flags & DRIVER_LOCATION) && !location_driver_ctl(RARCH_LOCATION_CTL_OWNS_DRIVER, NULL)) if ((flags & DRIVER_LOCATION_MASK) && !location_driver_ctl(RARCH_LOCATION_CTL_OWNS_DRIVER, NULL))
location_driver_ctl(RARCH_LOCATION_CTL_DEINIT, NULL); location_driver_ctl(RARCH_LOCATION_CTL_DEINIT, NULL);
if ((flags & DRIVER_CAMERA) && !camera_driver_ctl(RARCH_CAMERA_CTL_OWNS_DRIVER, NULL)) if ((flags & DRIVER_CAMERA_MASK) && !camera_driver_ctl(RARCH_CAMERA_CTL_OWNS_DRIVER, NULL))
camera_driver_ctl(RARCH_CAMERA_CTL_DEINIT, NULL); camera_driver_ctl(RARCH_CAMERA_CTL_DEINIT, NULL);
if (flags & DRIVER_AUDIO) if (flags & DRIVER_AUDIO_MASK)
audio_driver_deinit(); audio_driver_deinit();
if ((flags & DRIVER_WIFI) && !wifi_driver_ctl(RARCH_WIFI_CTL_OWNS_DRIVER, NULL)) if ((flags & DRIVER_WIFI_MASK) && !wifi_driver_ctl(RARCH_WIFI_CTL_OWNS_DRIVER, NULL))
wifi_driver_ctl(RARCH_WIFI_CTL_DEINIT, NULL); wifi_driver_ctl(RARCH_WIFI_CTL_DEINIT, NULL);
if (flags & DRIVERS_VIDEO_INPUT) if (flags & DRIVERS_VIDEO_INPUT)
video_driver_deinit(); video_driver_deinit();
if ((flags & DRIVER_VIDEO) && !video_driver_owns_driver()) if ((flags & DRIVER_VIDEO_MASK) && !video_driver_owns_driver())
video_driver_destroy_data(); video_driver_destroy_data();
if ((flags & DRIVER_INPUT) && !input_driver_owns_driver()) if ((flags & DRIVER_INPUT_MASK) && !input_driver_owns_driver())
input_driver_destroy_data(); input_driver_destroy_data();
if ((flags & DRIVER_AUDIO) && !audio_driver_owns_driver()) if ((flags & DRIVER_AUDIO_MASK) && !audio_driver_owns_driver())
audio_driver_destroy_data(); audio_driver_destroy_data();
} }

View File

@ -27,25 +27,37 @@
RETRO_BEGIN_DECLS RETRO_BEGIN_DECLS
#define DRIVERS_CMD_ALL \ #define DRIVERS_CMD_ALL \
( DRIVER_AUDIO \ ( DRIVER_AUDIO_MASK \
| DRIVER_VIDEO \ | DRIVER_VIDEO_MASK \
| DRIVER_INPUT \ | DRIVER_INPUT_MASK \
| DRIVER_CAMERA \ | DRIVER_CAMERA_MASK \
| DRIVER_LOCATION \ | DRIVER_LOCATION_MASK \
| DRIVER_MENU \ | DRIVER_MENU_MASK \
| DRIVERS_VIDEO_INPUT \ | DRIVERS_VIDEO_INPUT_MASK \
| DRIVER_WIFI ) | DRIVER_WIFI_MASK )
enum enum
{ {
DRIVER_AUDIO = 1 << 0, DRIVER_AUDIO = 0,
DRIVER_VIDEO = 1 << 1, DRIVER_VIDEO,
DRIVER_INPUT = 1 << 2, DRIVER_INPUT,
DRIVER_CAMERA = 1 << 3, DRIVER_CAMERA,
DRIVER_LOCATION = 1 << 4, DRIVER_LOCATION,
DRIVER_MENU = 1 << 5, DRIVER_MENU,
DRIVERS_VIDEO_INPUT = 1 << 6, DRIVERS_VIDEO_INPUT,
DRIVER_WIFI = 1 << 7 DRIVER_WIFI
};
enum
{
DRIVER_AUDIO_MASK = 1 << DRIVER_AUDIO,
DRIVER_VIDEO_MASK = 1 << DRIVER_VIDEO,
DRIVER_INPUT_MASK = 1 << DRIVER_INPUT,
DRIVER_CAMERA_MASK = 1 << DRIVER_CAMERA,
DRIVER_LOCATION_MASK = 1 << DRIVER_LOCATION,
DRIVER_MENU_MASK = 1 << DRIVER_MENU,
DRIVERS_VIDEO_INPUT_MASK = 1 << DRIVERS_VIDEO_INPUT,
DRIVER_WIFI_MASK = 1 << DRIVER_WIFI
}; };
enum driver_ctl_state enum driver_ctl_state