是否有可靠的方法来确定相机是否在 Microsoft Surface 上旋转?
基本上,我想知道设备中是否内置了特定的相机(因为它会随设备旋转),有没有办法查询这个?
我的问题是,当用户旋转设备时,我的相机视图被翻转,但是我不能假设我应该只旋转读取帧,因为活动相机可能是外部 USB 相机。
我正在使用 Media Foundation API 读取摄像机。
是否有可靠的方法来确定相机是否在 Microsoft Surface 上旋转?
基本上,我想知道设备中是否内置了特定的相机(因为它会随设备旋转),有没有办法查询这个?
我的问题是,当用户旋转设备时,我的相机视图被翻转,但是我不能假设我应该只旋转读取帧,因为活动相机可能是外部 USB 相机。
我正在使用 Media Foundation API 读取摄像机。
基本上,我想知道设备中是否内置了特定的摄像头[...]有没有办法查询这个?
使用 UWP,您可以检查相机DeviceInformation
的enclosureLocation
. panel
属性,可以是:
front
// back
etc 用于集成摄像头或unknown
对于外接摄像头CameraStarterKit示例中提供了完整示例。
不过,如果不能使用 UWP,应该还是可以找到底层信息的。使用 MF,您应该能够访问MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK
.
这将是类似的
\\?\usb#vid_046d&pid_0843&mi_00#6&2314864d&0&0000#{e5323777-f976-4f5b-9b55-b94699c46e44}\global
内置摄像头应该将其物理位置记录在
HKLM\SYSTEM\CurrentControlSet\Control\InternalDeviceModification\{GUID}
其中键的值应该是一个 DWORD,其值与上面引用的枚举PLD_Panel
非常相似。Panel
在这里,6
意思是unknown
。因此,您应该能够检查此注册表项是否存在,如果存在,请检查其值。我怀疑这类似于 UWP 在幕后所做的。
如果做不到这一点,您还可以通过硬编码相机供应商和产品 ID 或 的一些值来获得支持MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME
。