mirror of
https://github.com/libretro/RetroArch
synced 2025-03-06 04:13:52 +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)
|
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;
|
||||||
|
}
|
||||||
|
@ -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
|
||||||
|
6
driver.c
6
driver.c
@ -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;
|
||||||
|
2
driver.h
2
driver.h
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user