Windows 10 Anniversary Update brought a breaking change that removed, in many cases, hardware compressed video formats from video capture APIs, even though the devices themselves are known to have respective capabilities.
- DirectShow MJPEG frame type in USB cameras is not working after Windows 10 anniversary update (1607)
- Webcam MJPG capture streams are unavailable on Windows 10
- MJPG encoded media type is not available for USB/UVC web-cameras after Windows 10 version 1607 (OS Build 14393.10 ‘anniversary)) update
- Direct show webcam video capture fails in Windows 10 Anniversary edition
- MPG disappeared from Logitech c930e since Windows 10 Anniversary Update?
The magic of Logitech C930e camera is also lost since it is no longer available for video capture in hardware compressed H.264.
Presumably an issue in middle layer, such as Kernel Streaming, it is reflected by missing support for some of video device formats, esp. Motion JPEG (FourCC MJPG) and H.264 (FourCC H264). The depth of the issue also results in effect that capabilities are equally missing from both DirectShow and Media Foundation APIs.
Unless someone wants to develop a driver talking to hardware directly bypassing Kernel Streaming subsystem (such as, for example, “DeckLink Video Capture” for Blackmagic Design devices leveraging SDK and not the complementary WDM driver), it seems that the only solution is to wait for the fix from Microsoft. Rather sooner than later it will be here taking into consideration the scope of the problem.
Rather, try to stop automatic updates if video capture is important for you.
See also:
- Media Foundation Capture Capabilities for Logitech Webcam C930e Before and After the Update
- How To Uninstall Windows 10 Anniversary Update
UPDATE: Mike from MSFT commented in this thread:
Hey guys, Mike from the Camera team here. We saw this concern pop up for the first time a couple of days ago, and we’d like to understand exactly what difficulties you are all facing. There are two items that I would like the discussion to focus on.
Firstly, the media types supported on a given machine vary depending on the capabilities of the camera device you’re using. There is no guarantee that a media type such as MJPEG will be supported on all cameras (for example, the Surface Pro 4 / Surface Book cameras do not support it). This means that, by taking a hard dependency on it being available, you’re limiting the portability of your application to the set of cameras that do offer that media type. What applications should do instead, is query the available formats (see: IMFSourceReader::GetNativeMediaType for MediaFoundation, IAMStreamConfig::GetStreamCaps or the IPin::EnumMediaTypes article for DirectShow), and make a selection based on the one that best suits your needs or capabilities.
Secondly, we are expecting that almost all clients using MJPEG frames will be decoding the stream as one of the first steps in their pipeline. In order for this to be done in the most efficient way, with the smallest impact to overall system performance, we want to offload that piece of the process to be taken care of by the platform. This means your application should be able to consume the uncompressed frames, which will have been decoded to NV12 for MediaFoundation applications, and YUY2 for DirectShow applications.
If there are any other issues that you’d like to bring to our attention, please do so. We’d love to understand how we can best help you through this transition, and we’ll be considering your feedback for future planning. Thanks!
Originally looked as a bug, but the MSFT comment explaining it was intentional changes the background of the problem. See https://alax.info/blog/1686 for an update on the breaking change.
Logitech Statement: