Sophos News

Has Microsoft “broken” millions of webcams? (And how to fix yours.)

It’s not a good /day, week, month, quarter, year/ to be working in Microsoft Support.

The company has been on a bit of a hiding to nothing over updates for a year or more, following the launch of Windows 10.

Admittedly, some of our readers have told us that they simply can’t see what the fuss is about: latest version, modern look, more secure, free of charge, what’s the problem?. (Not any more, of course: from 30 July 2016 onwards, you’ve had to pay.)

But there’s been a very vocal contingent – a minority, we suspect, but a significant minority at the very least – who have fallen out hard with Microsoft over the move to Windows 10.

From unannounced “pre-downloads“, where files totalling more than 3GB were silently stashed locally in case you wanted them later, through ambiguous dialogs that upgraded you when you thought you’d declined, to unexpected popups in the middle of weather report live on TV, it seemed that Microsoft just couldn’t get it right.

Even when Microsoft listened to its users and made the wording in the upgrade dialog much clearer, some of our readers still had negative things to say.

So, now that the free upgrade is over (so you definitely can’t get it by mistake) and the next big version update, known as the Anniversary Edition rather than Windows 11, you’d think that Microsoft might have cut itself some slack.

Except that there’s a huge brouhaha going on as users report, “My webcam’s busted.”

If the vitriol poured out in the comments (300 and counting) of a Thurrott blog article entitled “Microsoft Has Broken Millions Of Webcams With Windows 10 Anniversary Update” is anything to go by, this one’s a super-big problem.

Of course, your webcam isn’t “broken” in the dropped-on-the-floor-and-in-two-pieces sense of the word.

However, a bunch of Windows software, apparently including Microsoft Skype itself, no longer works properly with some well-known webcams on the market, notably those that implement video compression inside the camera itself.

High-definition webcams, like the popular USB-based Logitech C930e that can stream video at 1920x1080p, often include built-in compression so that there’s less data to send down the USB cable in the first place, usually using one of two common lossy compression formats known as MJPEG and H.264.

That’s the same sort of compression that digital TV uses, and it’s like listening to an audio track as an MP3 instead of straight off a CD or in an uncompressed form such as FLAC: for most people the difference is modest or even undetectable, but the savings in bandwidth and storage can be huge.

Anyway, as far as we can tell, until Windows 10 Anniversary Edition (10AE), Windows apps that handled video input could ask the operating system for the compressed data straight out of the camera, and process it directly.

There are a few disadvantages to doing this:

So, Microsoft decided that in Windows 10AE, your app would no longer be able to request video streams in compressed-out-of-the-camera format.

Instead, you’d have to accept already-decompressed video from the operating system itself, decoded into one of two common formats: YUY2 or NV12.

YUY2 data has a brightness level (luminance) for every pixel, and colour information for each pair of horizontal pixels. NV12 is similar, with brightness data for every pixel but colour only for every 2×2 square in the image. Encoding brightness and colour separately, compared to modern formats such as RGB and HSV, was a neat solution when colour TV came out in the 1950s. By transmitting the luminance and sound as before and splitting the colour data into a separate signal, black-and-white TVs continued to work normally, blissfully ignorant that colour TVs existed at all. The reason for sampling the colour data at a half or a quarter of the rate used for brightness is that the human eye is much less sensitive to variations in colour than in luminance. (That’s the reason why moonlit scenes look like black-and-white photographs: in low light, we can hardly distinguish colour at all.)

In theory, an app working directly with uncompressed data shouldn’t make any difference to what you see, because an app can’t display compressed data without decompressing it anyway.

In practice, however, it means that unless your app has an option to use uncompressed video, or automatically adjusts itself if a compressed stream is not available from a camera from which it expected one, the app will no longer work at all.

And that’s what lots of software vendors are complaining about on Microsoft’s support forums, because lots and lots of those vendors’ own users are complaining that “my web cam broke after the update.”

That’s because some vendors prefer pre-compressed data, and rely on using cameras that support it, especially if they are capturing data from multiple webcams, as a surveillance system might.

Pre-compressed data greatly reduces the amount of data coming in via USB, and USB bandwidth can become a bottleneck if it’s shared between many devices.

Also, multi-source video recording apps that use uncompressed video inputs have to compress multiple webcam streams at the same time before saving them – a CPU-intensive job that in the past could be left to each camera to do in parallel.

With Microsoft’s own Skype app apparently on the list of affected apps, there are plenty of reports of “blank screens of death” during Skype video calls.

What to do?

There’s also a registry hack going round, where you use the registry editor to set the following entry:

HKLM\SOFTWARE\WOW6432Node\
Microsoft\Windows Media Foundation\
Platform\EnableFrameServerMode = 0

We haven’t tried this, not least because we only wanted to use Skype, and the new Skype Preview did the job fine for us.

We’re assuming that this is a hidden tweak that turns off the new “you can no longer get data pre-compressed from the camera” option, but please bear in mind that it’s not officially document by Microsoft far as we know [as at 2016-08-22T16:15Z], and we’ve not tested it ourselves.

Are you affected by this issue?

If so, did you try any workarounds, and if so, were they successful? (You may remain anonymous.)