检测 Microsoft Surface 上的相机旋转?

Posted

技术标签:

【中文标题】检测 Microsoft Surface 上的相机旋转?【英文标题】:Detect camera rotation on Microsoft Surface? 【发布时间】:2017-01-16 10:56:22 【问题描述】:

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

基本上,我想知道设备中是否内置了特定的相机(因为它会随着设备旋转),有没有办法查询这个?

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

我正在使用 Media Foundation API 读取摄像头。

【问题讨论】:

我不太确定这是否会有所帮助,但您可以检查相机媒体类型的 MF_MT_DEFAULT_STRIDE 属性:msdn.microsoft.com/en-us/library/windows/desktop/…。 “Stride 对于自上而下的图像是积极的,而对于自下而上的图像是消极的。” 我不认为是这样,例如,设备可能会旋转 90 度。 :( MF_MT_VIDEO_ROTATION,但我不确定 Surface 相机是否真的在使用它。 【参考方案1】:

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

使用 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

一个内置摄像头是supposed to register它的物理位置

HKLM\SYSTEM\CurrentControlSet\Control\InternalDeviceModification\GUID

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

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

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

【讨论】:

这看起来正是我所需要的。优秀的!但是,在我的 Surface Pro 3 设备(运行 Windows 10)上查看 regedit 时,缺少 InternalDeviceModification 键。有什么想法吗?

以上是关于检测 Microsoft Surface 上的相机旋转?的主要内容,如果未能解决你的问题,请参考以下文章

微软押宝Surface双屏设备:整合Microsoft 365打造全新生态

surface pro4 面部识别不能用了,相机也打不开,怎么解决?

如何将相机预览传递给 MediaCodec.createInputSurface() 创建的 Surface?

微软surface pro4的windows hello脸部识别不了了,相机也打不开,崩溃了

使用本机反应检测相机上的活人脸

内附优惠券微软(Microsoft)Surface