macOS Camera extension is not reported as a video device by `kCMIOHardwarePropertyDevices`

120 views Asked by At

I have a macOS app, which detects if a camera is being used via the kCMIOHardwarePropertyDevices :

typedef void (^DeviceIterator)(CMIOObjectID cameraObject, BOOL *stop);
static void iterateThroughAllInputDevices(DeviceIterator deviceIterator)
{
    // Check the number of devices.
    CMIOObjectPropertyAddress address = makeGlobalPropertyAddress(kCMIOHardwarePropertyDevices);
    UInt32 devicesDataSize;
    auto status = CMIOObjectGetPropertyDataSize(kCMIOObjectSystemObject, &address, 0, nil, &devicesDataSize);
    if (isError(status))
    {
        return;
    }

    // Get the devices.
    UInt32 devicesDataUsed;
    int count = devicesDataSize / sizeof(CMIOObjectID);
    if (!count)
    {
        LOG_INFO("video device list is empty");
        return;
    }

I am using virtual machines for my automated end-to-end tests (which tests are written in Python). These Virtual Machines don't have a Camera device available, so I quickly wrote a macOS Camera Extension (based on https://developer.apple.com/videos/play/wwdc2022/10022 ) in hope that it could act like a real camera. Unfortunately this Virtual Camera is not being detected by the code above. I am getting the video device list is empty message. How could I create a virtual (software) camera that would be listed by the API above?

0

There are 0 answers