External UVC Cameras under Monterey

Is anyone experiencing issues with external UVC cameras (webcams) after upgrading to Monterey?

I have a Raspberry Pi webcam that was working really well under earlier versions of Mac OS, but Monterey is not “seeing” the camera. System Information says “no camera device found”. If I reboot the same machine with Big Sur the camera is detected.

IO Registry Explorer shows that the device registers okay and the device type is UVC. The difference between Big Sur and Monterey appears to be the upper abstraction layers. The UVC assistants are different between the two…

Let us see if we can track camera issues here: Make : model : physical connection

For me: Raspberry Pi Zero W : running ShowMeWebcam “firmware” : connected by USB2

For reference: ShowMeWebcam

and

Jeff Geerling’s build project

Accepted Reply

Well, good news! This did in fact turn out to be an issue with the ShowMeWebcam software. It is using Raspberry Pi software which is based on a Debian Style Linux kernel. It turns out that the method used to configure the USB “gadget” was the issue. The issue only affected 12.0.1 Monterey, presumably because of stricter matching.

The USB gadget configuration contained a single configuration, however, the config had been named/numbered “c.2”. The Linux kernel documentation states that configurations should have the format “name.number”, where name can be any text that would be valid in a file system, and number should be the number of the configuration. Notice that there was a single defined configuration, but that configuration had been given the number 2. On earlier versions of Mac OS this did not seem to matter, but on Monterey it seems that the numbering of the configs is important. Monterey was reporting:

CurrentConfiguration : 2 NumberOfConfigurations: 1
error Failed to get configuration descriptor for interface
error Failed to setup UVC Device

Notice, “CurrentConfiguration: 2”, and “NumberOfConfigurations: 1”, followed by “Failed to get configuration descriptor for interface”…

it seems that Monterey is numerically iterating for the configuration, rather than “object” iterating. In other words knowing there is only one configuration, it’s looking for the configuration numbered one (c.1).

The ShowMeWebcam software was changed to write the configuration to the node named “c.1”. This has solved the issue.

It is logical, however, it does represent a change in behaviour between Monterey and earlier versions of Mac OS.

Replies

Well, good news! This did in fact turn out to be an issue with the ShowMeWebcam software. It is using Raspberry Pi software which is based on a Debian Style Linux kernel. It turns out that the method used to configure the USB “gadget” was the issue. The issue only affected 12.0.1 Monterey, presumably because of stricter matching.

The USB gadget configuration contained a single configuration, however, the config had been named/numbered “c.2”. The Linux kernel documentation states that configurations should have the format “name.number”, where name can be any text that would be valid in a file system, and number should be the number of the configuration. Notice that there was a single defined configuration, but that configuration had been given the number 2. On earlier versions of Mac OS this did not seem to matter, but on Monterey it seems that the numbering of the configs is important. Monterey was reporting:

CurrentConfiguration : 2 NumberOfConfigurations: 1
error Failed to get configuration descriptor for interface
error Failed to setup UVC Device

Notice, “CurrentConfiguration: 2”, and “NumberOfConfigurations: 1”, followed by “Failed to get configuration descriptor for interface”…

it seems that Monterey is numerically iterating for the configuration, rather than “object” iterating. In other words knowing there is only one configuration, it’s looking for the configuration numbered one (c.1).

The ShowMeWebcam software was changed to write the configuration to the node named “c.1”. This has solved the issue.

It is logical, however, it does represent a change in behaviour between Monterey and earlier versions of Mac OS.