浏览代码

mac-virtualcam: Compare camera UUIDs using CFUUID

jcm 1 年之前
父节点
当前提交
552a88a895
共有 1 个文件被更改,包括 9 次插入3 次删除
  1. 9 3
      plugins/mac-virtualcam/src/obs-plugin/plugin-main.mm

+ 9 - 3
plugins/mac-virtualcam/src/obs-plugin/plugin-main.mm

@@ -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"));