【小记】MSMF 框架开发 UVC 摄像头设置 MF_MT_SUBTYPE 的注意事项
太忙就简单说一下:
IMFSourceReader 有两个可以获取 IMFMediaType 对象的接口,分别是 GetNativeMediaType 与 GetCurrentMediaType。
初始化时调用 GetCurrentMediaType 获得的 IMFMediaType 对象(此时为硬件默认情况下自动选择的对象)再进行修改是不能用于 SetCurrentMediaType 的,即便是 SetCurrentMediaType 返回 S_OK。
正确的做法是先使用 GetNativeMediaType 遍历硬件所支持的 IMFMediaType 中 MF_MT_SUBTYPE 类型 ,再 SetCurrentMediaType 相对应的 IMFMediaType 。
示例代码:
// IMFSourceReader* m_reader = 假设 IMFSourceReader 已经初始化并可用; DWORD dwMediaTypeIndex = 0; HRESULT hr = S_OK; while (hr != MF_E_NO_MORE_TYPES) { IMFMediaType* pType = nullptr; hr = m_reader->GetNativeMediaType((DWORD)MF_SOURCE_READER_FIRST_VIDEO_STREAM, dwMediaTypeIndex, &pType); if (hr == S_OK) { GUID subtype; pType->GetGUID(MF_MT_SUBTYPE, &subtype); if (IsEqualGUID(subtype, MFVideoFormat_YUY2)) // 假设需要将硬件输出设置为 YUY2 { iRet = m_reader->SetCurrentMediaType((DWORD)MF_SOURCE_READER_FIRST_VIDEO_STREAM, NULL, pType); if (iRet != S_OK) { pType->Release(); // 处理错误 break; } MFGetAttributeSize(pType, MF_MT_FRAME_SIZE, &m_width, &m_height); pType->Release(); break; } pType->Release(); } dwMediaTypeIndex++; }
版权声明:
作者:芯片烤电池
链接:https://www.airchip.org.cn/index.php/2024/01/24/%d1%81jmsmfkjkfuvcsxtrhzrszmfmtsubtype/
来源:芯片烤电池
文章版权归作者所有,未经允许请勿转载。
THE END
1
二维码
海报
【小记】MSMF 框架开发 UVC 摄像头设置 MF_MT_SUBTYPE 的注意事项
太忙就简单说一下:
IMFSourceReader 有两个可以获取 IMFMediaType 对象的接口,分别是 GetNativeMediaType 与 GetCurrentMediaType。
……