有没有可靠的方法来确定相机是否在Microsoft Surface上旋转?检测Microsoft Surface上的相机旋转?
基本上,我想知道如果一个特定的相机内置到设备中(因为它会随着设备旋转),有没有一种方法来查询这个?
我的问题是,当用户旋转设备,我的相机视图翻转,但我不能假定我应该只是旋转阅读框,因为活动相机可能是外部USB相机。
我正在使用Media Foundation API读取相机。
有没有可靠的方法来确定相机是否在Microsoft Surface上旋转?检测Microsoft Surface上的相机旋转?
基本上,我想知道如果一个特定的相机内置到设备中(因为它会随着设备旋转),有没有一种方法来查询这个?
我的问题是,当用户旋转设备,我的相机视图翻转,但我不能假定我应该只是旋转阅读框,因为活动相机可能是外部USB相机。
我正在使用Media Foundation API读取相机。
基本上,我想知道如果一个特定的相机内置到设备有没有办法查询这个?
使用UWP,您可以检查相机的DeviceInformation
的enclosureLocation
。 panel
属性,它可以是:
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
的某些值进行硬编码来支持。
这看起来像正是我需要的,非常棒!但是,在我的Surface Pro 3设备(运行Windows 10)中查看注册表编辑器时,InternalDeviceModification键缺失。有任何想法吗? – monoceres
我不太确定这是否有帮助,但是您可以检查相机媒体类型的MF_MT_DEFAULT_STRIDE属性:https://msdn.microsoft.com/en-us/library/windows/desktop/ms698965(v = vs.85)的.aspx。 “步幅对自上而下的图像为正,对自下而上的图像为负。” – VuVirt
我不认为就是这样,例如,设备可能旋转90度。 :( – monoceres
这是['MF_MT_VIDEO_ROTATION'](https://msdn.microsoft.com/en-us/library/windows/desktop/hh162880),但我不确定Surface相机是否真的使用它。 –