mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-08-29 02:03:03 +08:00
mac-virtualcam: Compare camera UUIDs using CFUUID
This commit is contained in:
@@ -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"));
|
||||
|
||||
Reference in New Issue
Block a user