检测Microsoft Surface上的相机旋转?

mon*_*res 6 windows camera ms-media-foundation surface-pro

有没有可靠的方法来确定相机是否在Microsoft Surface上旋转?

基本上,我想知道设备中是否内置了特定的摄像头(因为它随后会随设备一起旋转),有没有办法查询?

我的问题是,当用户旋转设备时,我的相机视图被翻转,但我无法假设我应该只旋转读取帧,因为活动相机可能是外部USB相机.

我正在使用Media Foundation API阅读相机.

Gri*_*vit 2

基本上,我想知道设备中是否内置了特定的摄像头 [...] 有办法查询吗?

使用 UWP,您可以检查相机DeviceInformationenclosureLocation. 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
Run Code Online (Sandbox Code Playgroud)

内置摄像头应该将其物理位置记录在

HKLM\SYSTEM\CurrentControlSet\Control\InternalDeviceModification\{GUID}
Run Code Online (Sandbox Code Playgroud)

其中键的值PLD_Panel应该是 DWORD,其值与Panel上面引用的枚举非常相似。

这里,6是指unknown。因此,您应该能够检查此注册表项是否存在,如果存在,则检查其值。我怀疑这与 UWP 在幕后所做的类似。

如果做不到这一点,您还可以通过硬编码相机供应商和产品 ID 的某些值来获取支持MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME