mac-virtualcam: Compare camera UUIDs using CFUUID

This commit is contained in:
jcm
2024-01-10 19:25:06 -07:00
committed by Ryan Foster
parent 4dac84999d
commit 552a88a895
@@ -382,8 +382,10 @@ static bool virtualcam_output_start(void *data)
CMIOObjectGetPropertyData(kCMIOObjectSystemObject, &address, 0, NULL, size, &used, device_data);
vcam->deviceID = 0;
NSString *OBSVirtualCamUUID = [[NSBundle bundleWithIdentifier:@"com.obsproject.mac-virtualcam"]
NSString *OBSVirtualCamUUIDString = [[NSBundle bundleWithIdentifier:@"com.obsproject.mac-virtualcam"]
objectForInfoDictionaryKey:@"OBSCameraDeviceUUID"];
CFUUIDRef OBSVirtualCamUUID =
CFUUIDCreateFromString(kCFAllocatorDefault, (CFStringRef) OBSVirtualCamUUIDString);
size_t num_elements = size / sizeof(CMIOObjectID);
for (size_t i = 0; i < num_elements; i++) {
@@ -395,15 +397,19 @@ static bool virtualcam_output_start(void *data)
CMIOObjectGetPropertyDataSize(cmioDevice, &address, 0, NULL, &device_name_size);
CFStringRef uid;
CMIOObjectGetPropertyData(cmioDevice, &address, 0, NULL, device_name_size, &used, &uid);
const char *uid_string = CFStringGetCStringPtr(uid, kCFStringEncodingUTF8);
if (uid_string && strcmp(uid_string, OBSVirtualCamUUID.UTF8String) == 0) {
CFUUIDRef deviceUUID = CFUUIDCreateFromString(kCFAllocatorDefault, uid);
if (CFEqual(OBSVirtualCamUUID, deviceUUID)) {
vcam->deviceID = cmioDevice;
CFRelease(uid);
CFRelease(deviceUUID);
break;
} else {
CFRelease(uid);
CFRelease(deviceUUID);
}
}
CFRelease(OBSVirtualCamUUID);
if (!vcam->deviceID) {
obs_output_set_last_error(vcam->output, obs_module_text("Error.SystemExtension.CameraUnavailable"));