From a766d1c1c1b2983ad9eb4d1ac4ac6d7e5d65f48c Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 5 Dec 2015 14:39:52 +0100 Subject: [PATCH] Create camera_driver_ctl --- camera/camera_driver.c | 32 +++++++++++++++++++++++++++++++- camera/camera_driver.h | 13 +++++++++++++ driver.c | 6 +++--- driver.h | 2 -- dynamic.c | 7 +++++-- 5 files changed, 52 insertions(+), 8 deletions(-) diff --git a/camera/camera_driver.c b/camera/camera_driver.c index 5bd90f9cc1..179a59a207 100644 --- a/camera/camera_driver.c +++ b/camera/camera_driver.c @@ -191,7 +191,7 @@ void init_camera(void) if (!driver->camera_data) { RARCH_ERR("Failed to initialize camera driver. Will continue without camera.\n"); - driver->camera_active = false; + camera_driver_ctl(RARCH_CAMERA_CTL_UNSET_ACTIVE, NULL); } if (system->camera_callback.initialized) @@ -213,3 +213,33 @@ void uninit_camera(void) } driver->camera_data = NULL; } + +bool camera_driver_ctl(enum rarch_camera_ctl_state state, void *data) +{ + static bool camera_driver_active = false; + static bool camera_driver_data_own = false; + + switch (state) + { + case RARCH_CAMERA_CTL_SET_OWN_DRIVER: + camera_driver_data_own = true; + break; + case RARCH_CAMERA_CTL_UNSET_OWN_DRIVER: + camera_driver_data_own = false; + break; + case RARCH_CAMERA_CTL_OWNS_DRIVER: + return camera_driver_data_own; + case RARCH_CAMERA_CTL_SET_ACTIVE: + camera_driver_active = true; + break; + case RARCH_CAMERA_CTL_UNSET_ACTIVE: + camera_driver_active = false; + break; + case RARCH_CAMERA_CTL_IS_ACTIVE: + return camera_driver_active; + default: + break; + } + + return false; +} diff --git a/camera/camera_driver.h b/camera/camera_driver.h index b99fee6a98..28a34874ec 100644 --- a/camera/camera_driver.h +++ b/camera/camera_driver.h @@ -25,6 +25,17 @@ extern "C" { #endif +enum rarch_camera_ctl_state +{ + RARCH_CAMERA_CTL_NONE = 0, + RARCH_CAMERA_CTL_SET_OWN_DRIVER, + RARCH_CAMERA_CTL_UNSET_OWN_DRIVER, + RARCH_CAMERA_CTL_OWNS_DRIVER, + RARCH_CAMERA_CTL_SET_ACTIVE, + RARCH_CAMERA_CTL_UNSET_ACTIVE, + RARCH_CAMERA_CTL_IS_ACTIVE +}; + typedef struct camera_driver { /* FIXME: params for initialization - queries for resolution, @@ -118,6 +129,8 @@ void init_camera(void); void uninit_camera(void); +bool camera_driver_ctl(enum rarch_camera_ctl_state state, void *data); + #ifdef __cplusplus } #endif diff --git a/driver.c b/driver.c index b5154ae7a7..9506810d10 100644 --- a/driver.c +++ b/driver.c @@ -367,7 +367,7 @@ void init_drivers(int flags) if (flags & DRIVER_INPUT) input_driver_ctl(RARCH_INPUT_CTL_UNSET_OWN_DRIVER, NULL); if (flags & DRIVER_CAMERA) - driver->camera_data_own = false; + camera_driver_ctl(RARCH_CAMERA_CTL_UNSET_OWN_DRIVER, NULL); if (flags & DRIVER_LOCATION) driver->location_data_own = false; @@ -399,7 +399,7 @@ void init_drivers(int flags) audio_driver_ctl(RARCH_AUDIO_CTL_INIT, NULL); /* Only initialize camera driver if we're ever going to use it. */ - if ((flags & DRIVER_CAMERA) && driver->camera_active) + if ((flags & DRIVER_CAMERA) && camera_driver_ctl(RARCH_CAMERA_CTL_IS_ACTIVE, NULL)) init_camera(); /* Only initialize location driver if we're ever going to use it. */ @@ -452,7 +452,7 @@ void uninit_drivers(int flags) driver->location_data = NULL; } - if ((flags & DRIVER_CAMERA) && !driver->camera_data_own) + if ((flags & DRIVER_CAMERA) && !camera_driver_ctl(RARCH_CAMERA_CTL_OWNS_DRIVER, NULL)) { uninit_camera(); driver->camera_data = NULL; diff --git a/driver.h b/driver.h index 6c977cf162..ba26e1717d 100644 --- a/driver.h +++ b/driver.h @@ -186,8 +186,6 @@ typedef struct driver { const camera_driver_t *camera; void *camera_data; - bool camera_active; - bool camera_data_own; const location_driver_t *location; void *location_data; diff --git a/dynamic.c b/dynamic.c index d2624c5013..135b262163 100644 --- a/dynamic.c +++ b/dynamic.c @@ -545,7 +545,7 @@ void uninit_libretro_sym(void) rarch_system_info_free(); - driver->camera_active = false; + camera_driver_ctl(RARCH_CAMERA_CTL_UNSET_ACTIVE, NULL); driver->location_active = false; /* Performance counters no longer valid. */ @@ -1122,7 +1122,10 @@ bool rarch_environment_cb(unsigned cmd, void *data) cb->start = driver_camera_start; cb->stop = driver_camera_stop; system->camera_callback = *cb; - driver->camera_active = cb->caps != 0; + if (cb->caps != 0) + camera_driver_ctl(RARCH_CAMERA_CTL_SET_ACTIVE, NULL); + else + camera_driver_ctl(RARCH_CAMERA_CTL_UNSET_ACTIVE, NULL); break; }