2017-01-16 123 views
6

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

基本上,我想知道如果一个特定的相机内置到设备中(因为它会随着设备旋转),有没有一种方法来查询这个?

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

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

+0

我不太确定这是否有帮助,但是您可以检查相机媒体类型的MF_MT_DEFAULT_STRIDE属性:https://msdn.microsoft.com/en-us/library/windows/desktop/ms698965(v = vs.85)的.aspx。 “步幅对自上而下的图像为正,对自下而上的图像为负。” – VuVirt

+0

我不认为就是这样,例如,设备可能旋转90度。 :( – monoceres

+1

这是['MF_MT_VIDEO_ROTATION'](https://msdn.microsoft.com/en-us/library/windows/desktop/hh162880),但我不确定Surface相机是否真的使用它。 –

回答

2

基本上,我想知道如果一个特定的相机内置到设备有没有办法查询这个?

使用UWP,您可以检查相机的DeviceInformationenclosureLocationpanel属性,它可以是:

  • front/back /等用于集成照相机或
  • 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的某些值进行硬编码来支持。

+0

这看起来像正是我需要的,非常棒!但是,在我的Surface Pro 3设备(运行Windows 10)中查看注册表编辑器时,InternalDeviceModification键缺失。有任何想法吗? – monoceres