mirror of
https://github.com/libretro/RetroArch
synced 2025-03-05 19:13:45 +00:00
Create camera_driver_ctl
This commit is contained in:
parent
aac2ceba02
commit
a766d1c1c1
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
6
driver.c
6
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;
|
||||
|
2
driver.h
2
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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user