Windows 10ビルド10.1607.14393.10(別名Anniversaryエディション)では、もうMJPGキャプチャストリームを取得できません。 MJPGとYUY2の両方の解像度に使用されていましたが、IBaseFilterソースが何かに接続される前にDirectShow(カーネルストリーミング)とMedia Foundation MJPGでYUY2のみをNV12に変換しています。カメラが異なる複数のシステムで試しました。どのようなアイデアが間違っているかもしれない?WebCam MJPGキャプチャストリームはWindows 10で利用できません
640x480 @30 YUY2
...
640x480 @30 MJPG <- gone
...
DirectShow:
com_t<IAMStreamConfig> sc;
if_failed_return_result(camera_output_pin->QueryInterface(&sc));
int number_of_capabilities = 0;
int capability_size = 0;
if_failed_return(sc->GetNumberOfCapabilities(&number_of_capabilities, &capability_size), -1);
for (int i = 0; i < number_of_capabilities && k < count; i++) {
VIDEO_STREAM_CONFIG_CAPS scc;
assert(sizeof(scc) == capability_size);
AM_MEDIA_TYPE* mt = null;
if_failed_return(sc->GetStreamCaps(i, &mt, (BYTE*)&scc), -1);
...
MMFで
:ウェブカメラからのWindows 10周年記念アップデートMJPGビデオで
640x480 @30 YUY2
...
640x480 @30 NV12 // camera reports MJPG 4cc in USBView and KsStudio
for (int i = 0; k < count; i++) {
com_t<IMFMediaType> type;
if (d->reader->GetNativeMediaType(VIDEO_STREAM, i, &type) != 0) {
break;
}
GUID guid_major_type = {0};
if_failed_return_result(type->GetMajorType(&guid_major_type));
if (guid_major_type == MFMediaType_Video) {
GUID guid_subtype = {0};
if_failed_return_result(type->GetGUID(MF_MT_SUBTYPE, &guid_subtype));
AM_MEDIA_TYPE* amMediaType = null;
if_failed_return_result(type->GetRepresentation(FORMAT_MFVideoFormat, (void**)&amMediaType));
assert(amMediaType->cbFormat == sizeof(MFVIDEOFORMAT));
const MFVIDEOFORMAT* mi = (const MFVIDEOFORMAT*)amMediaType->pbFormat;
Windowsの更新プログラム自体が間違っている。また、同じ[MSDNフォーラムにQ]を参照してください(https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/cdac5a0c-dfb4-4928-9ca9-2a63ec1496de/directshow-mjpeg-frame-type-in-usb-cameras-not-working-windows-10-anniversary-update-1607?forum = windowsdirectshowdevelopment ) –
私は知っています - 初期の開発者として数ヶ月間していましたが、助けにならないで回避する必要があります – Leo
これを実証するコードは次のとおりです(msvc2012コマンドライン) https://github.com/leok7v/ uvc_mjpg_win10 – Leo