From 139c658d03a5eea88abe50b73af5fc773f8481c5 Mon Sep 17 00:00:00 2001 From: Jeffrey Paine Date: Mon, 10 Apr 2023 15:03:51 -0400 Subject: [PATCH] camhook: Add disable_camera options Allow users to manually disable specific cameras --- src/main/camhook/cam.c | 16 ++++++++----- src/main/camhook/config-cam.c | 44 ++++++++++++++++++++++++++++------- 2 files changed, 45 insertions(+), 15 deletions(-) diff --git a/src/main/camhook/cam.c b/src/main/camhook/cam.c index c8ea928..f368721 100644 --- a/src/main/camhook/cam.c +++ b/src/main/camhook/cam.c @@ -706,11 +706,6 @@ void fill_cam_struct(struct CameraData *data, const char *devid) // Device instance path strcpy(data->deviceInstancePath, devid); // continue - } else if (check_four(devid, "SKIP")) { - // User wants to leave this camera unassigned - num_addressed_cams++; - num_located_cams++; - return; } else { // UNKNOWN ENTRY log_info("UNK: %s", devid); @@ -813,6 +808,14 @@ void camhook_init(struct camhook_config_cam *config_cam) // fill before applying hooks for (size_t i = 0; i < config_cam->num_devices; ++i) { + // Check if this camera is disabled first + if (config_cam->disable_camera[i]) { + // If so, pretend this camera is already assigned and move on + num_addressed_cams++; + num_located_cams++; + continue; + } + // If not, try to hook the camera fill_cam_struct(&camData[i], config_cam->device_id[i]); } @@ -834,7 +837,8 @@ void camhook_init(struct camhook_config_cam *config_cam) NULL, "Mf.dll", camhook_mf_syms, lengthof(camhook_mf_syms)); log_info("Inserted cam hooks for %d cams", (int) num_setup); - } else { + // If the user has manually disabled all cams, don't print this in the log + } else if (num_addressed_cams != config_cam->num_devices) { log_info("No cams detected, not hooking"); } } diff --git a/src/main/camhook/config-cam.c b/src/main/camhook/config-cam.c index e905f0b..05ed8de 100644 --- a/src/main/camhook/config-cam.c +++ b/src/main/camhook/config-cam.c @@ -7,8 +7,18 @@ #define CAMHOOK_CONFIG_CAM_DISABLE_EMU_KEY "cam.disable_emu" #define CAMHOOK_CONFIG_CAM_DEFAULT_DISABLE_EMU_VALUE false -// the following two arrays are based on CAMHOOK_CONFIG_CAM_MAX +// the following four arrays are based on CAMHOOK_CONFIG_CAM_MAX // please insert more elements if more cams are added +const char *camhook_config_disable_camera[CAMHOOK_CONFIG_CAM_MAX] = { + "cam.disable_camera1", + "cam.disable_camera2", +}; + +const int camhook_config_disable_camera_default_values[CAMHOOK_CONFIG_CAM_MAX] = { + false, + false, +}; + const char *camhook_config_device_id_keys[CAMHOOK_CONFIG_CAM_MAX] = { "cam.device_id1", "cam.device_id2", @@ -28,6 +38,11 @@ void camhook_config_cam_init(struct cconfig *config, size_t num_cams) "Disables the camera emulation"); for (size_t i = 0; i < num_cams; ++i) { + cconfig_util_set_bool( + config, + camhook_config_disable_camera[i], + camhook_config_disable_camera_default_values[i], + "Disable camera"); cconfig_util_set_str( config, camhook_config_device_id_keys[i], @@ -56,17 +71,28 @@ void camhook_config_cam_get( CAMHOOK_CONFIG_CAM_DEFAULT_DISABLE_EMU_VALUE); } for (size_t i = 0; i < num_cams; ++i) { - if (!cconfig_util_get_str( + if (!cconfig_util_get_bool( config, - camhook_config_device_id_keys[i], - config_cam->device_id[i], - sizeof(config_cam->device_id[i]) - 1, - camhook_config_device_default_values[i])) { + camhook_config_disable_camera[i], + &config_cam->disable_camera[i], + camhook_config_disable_camera_default_values[i])) { log_warning( "Invalid value for key '%s' specified, fallback " - "to default '%s'", - camhook_config_device_id_keys[i], - camhook_config_device_default_values[i]); + "to default '%d'", + camhook_config_disable_camera[i], + camhook_config_disable_camera_default_values[i]); + } + if (!cconfig_util_get_str( + config, + camhook_config_device_id_keys[i], + config_cam->device_id[i], + sizeof(config_cam->device_id[i]) - 1, + camhook_config_device_default_values[i])) { + log_warning( + "Invalid value for key '%s' specified, fallback " + "to default '%s'", + camhook_config_device_id_keys[i], + camhook_config_device_default_values[i]); } } }