检测Microsoft Surface上的相机旋转?

时间:2017-01-16 10:56:22

标签: windows camera ms-media-foundation surface-pro

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

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

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

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

1 个答案:

答案 0 :(得分:2)

  

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

使用UWP,您可以查看相机的DeviceInformation enclosureLocationpanel属性,该属性为:

  • 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

内置摄像头supposed to register

中的物理位置
HKLM\SYSTEM\CurrentControlSet\Control\InternalDeviceModification\{GUID}

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

此处,6表示unknown。因此,您应该能够检查是否存在此注册表项,如果存在,请检查其值。我怀疑这与UWP所做的相似。

如果做不到这一点,你也可以通过硬编码相机供应商和产品ID或MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME的某些值来破解支持。