Create camera_driver_ctl

This commit is contained in:
twinaphex 2015-12-05 14:39:52 +01:00
parent aac2ceba02
commit a766d1c1c1
5 changed files with 52 additions and 8 deletions

View File

@ -191,7 +191,7 @@ void init_camera(void)
if (!driver->camera_data) if (!driver->camera_data)
{ {
RARCH_ERR("Failed to initialize camera driver. Will continue without camera.\n"); 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) if (system->camera_callback.initialized)
@ -213,3 +213,33 @@ void uninit_camera(void)
} }
driver->camera_data = NULL; 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;
}

View File

@ -25,6 +25,17 @@
extern "C" { extern "C" {
#endif #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 typedef struct camera_driver
{ {
/* FIXME: params for initialization - queries for resolution, /* FIXME: params for initialization - queries for resolution,
@ -118,6 +129,8 @@ void init_camera(void);
void uninit_camera(void); void uninit_camera(void);
bool camera_driver_ctl(enum rarch_camera_ctl_state state, void *data);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -367,7 +367,7 @@ void init_drivers(int flags)
if (flags & DRIVER_INPUT) if (flags & DRIVER_INPUT)
input_driver_ctl(RARCH_INPUT_CTL_UNSET_OWN_DRIVER, NULL); input_driver_ctl(RARCH_INPUT_CTL_UNSET_OWN_DRIVER, NULL);
if (flags & DRIVER_CAMERA) if (flags & DRIVER_CAMERA)
driver->camera_data_own = false; camera_driver_ctl(RARCH_CAMERA_CTL_UNSET_OWN_DRIVER, NULL);
if (flags & DRIVER_LOCATION) if (flags & DRIVER_LOCATION)
driver->location_data_own = false; driver->location_data_own = false;
@ -399,7 +399,7 @@ void init_drivers(int flags)
audio_driver_ctl(RARCH_AUDIO_CTL_INIT, NULL); audio_driver_ctl(RARCH_AUDIO_CTL_INIT, NULL);
/* 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) && driver->camera_active) if ((flags & DRIVER_CAMERA) && camera_driver_ctl(RARCH_CAMERA_CTL_IS_ACTIVE, NULL))
init_camera(); init_camera();
/* Only initialize location driver if we're ever going to use it. */ /* 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; 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(); uninit_camera();
driver->camera_data = NULL; driver->camera_data = NULL;

View File

@ -186,8 +186,6 @@ typedef struct driver
{ {
const camera_driver_t *camera; const camera_driver_t *camera;
void *camera_data; void *camera_data;
bool camera_active;
bool camera_data_own;
const location_driver_t *location; const location_driver_t *location;
void *location_data; void *location_data;

View File

@ -545,7 +545,7 @@ void uninit_libretro_sym(void)
rarch_system_info_free(); rarch_system_info_free();
driver->camera_active = false; camera_driver_ctl(RARCH_CAMERA_CTL_UNSET_ACTIVE, NULL);
driver->location_active = false; driver->location_active = false;
/* Performance counters no longer valid. */ /* Performance counters no longer valid. */
@ -1122,7 +1122,10 @@ bool rarch_environment_cb(unsigned cmd, void *data)
cb->start = driver_camera_start; cb->start = driver_camera_start;
cb->stop = driver_camera_stop; cb->stop = driver_camera_stop;
system->camera_callback = *cb; 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; break;
} }