none
win8 RTM 版本相机问题 RRS feed

  • 问题

  • 使用win8 RTM版本使用相机程序, 当bios定义camera为内置不可移除设备时,会出现使用win8相机预览为mirror, 拍照或摄像为normal, 当bios不做定义即普通消费者把camera作为一个外挂设备接入系统时,win8相机预览、拍照、录像为normal. 故是否可以理解win8 相机对于内置camera有不同的behavior.
    另外win8下如果使用g-sensor进行旋转,内置camera 可以做到同步旋转,而外置camera不能。
    类似情况在samsung 701T 上有看到类是情况。
    故我的疑惑是:
    1. win8 系统 在内置、外置相机的处理机制上倒底有什么behavior不一样?
    2. win8 系统是否知道前置、后置camera? 如果知道,需要camera module FW或bios上如何定义?

    3. 如果要做到内置的前后camera在使用win8 相机进行预览、拍照、摄像均为normal输出时,需要camera module FW或bios上如何配合?

    win8 system WHQL测试要求内置的camera必须设定为不可移除设备。

    2012年10月11日 5:12

答案

  • 有Windows 8认证的系统都要求正确设置Webcam的Locaiton信息。此位置信息写在系统的firmware中(即传统所说的BIOS, 但Windows 8系统都用UEFI了)。

    ACPI table中该Webcam设备的_PLD值要正确设置。得以让windows 8可以正确识别到webcam的正确位置。


    http://msdn.microsoft.com/zh-cn/windows/hardware/default.aspx http://whqlcn.wordpress.com

    2012年10月21日 17:42
    版主

全部回复

  • 有Windows 8认证的系统都要求正确设置Webcam的Locaiton信息。此位置信息写在系统的firmware中(即传统所说的BIOS, 但Windows 8系统都用UEFI了)。

    ACPI table中该Webcam设备的_PLD值要正确设置。得以让windows 8可以正确识别到webcam的正确位置。


    http://msdn.microsoft.com/zh-cn/windows/hardware/default.aspx http://whqlcn.wordpress.com

    2012年10月21日 17:42
    版主
  • Hi,

    你这个疑惑现在解决了吗?

    确实,在RTM上,微软自带么metro preview APP会判断当前camera是否是内置,若内置,预览画面会自动水平翻转,而非内置的不会旋转画面。按照device app for camera 相关文档,对于最

    新预装win8电脑才会要求在bios中对于内置camera进行设置,否则通不过WHQL测试的,而我测试计算机非最新通过win8WHQL的计算机,说明在AP层存在简单的API 来判断当前camera是否内

    置,可惜还没有找到。

    2012年10月26日 2:48
  • Hi,

    你这个疑惑现在解决了吗?

    确实,在RTM上,微软自带么metro preview APP会判断当前camera是否是内置,若内置,预览画面会自动水平翻转,而非内置的不会旋转画面。按照device app for camera 相关文档,对于最

    新预装win8电脑才会要求在bios中对于内置camera进行设置,否则通不过WHQL测试的,而我测试计算机非最新通过win8WHQL的计算机,说明在AP层存在简单的API 来判断当前camera是否内

    置,可惜还没有找到。

    是内置摄像机,也并不能确定摄像机的方向。 虽然大多数内置摄像机都是朝向使用者的,但是越来越多的平板电脑会配置朝向使用者视线方向的摄像机,所以Win8应该不会简单按照是否内置摄像机就进行镜像处理。Windows判断摄像机是否内置的方法,微软有篇谈论container ID的文档提到过。不同总线的设置不太一样,但大多都需要硬件上的配置来配合。


    http://msdn.microsoft.com/zh-cn/windows/hardware/default.aspx http://whqlcn.wordpress.com

    2012年10月29日 6:37
    版主
  • 谢谢你的解答。

    之前尝试用containID 来区分内外摄像头,但用这个思路去解决,我不不清楚是在Metro应用下没找到正确Api还是微软提供API不好。

    利用Windows::Devices::Enumeration::CreateWatcher();来创建一个实时监控usb camera 热插拔,该API重载了多种形式入参。

    1. 在不考虑获知containID 时,设置该API的入参为Device::VideoCapture

    能实现对插拔camera的Add和remove,不论该camera以前是否插到过该计算机上存留信息在了注册表。

    2. 然而要获知containID,我知道的方法是入参是,一个是WebCam的确定InterfaceClassGuid,第二个是需要搜索webcam硬件信息的字符串集合,如"System.Devices.ContainerId".

    测试发现,该入参形势下,watcher初始化时,会Add所有计算机中存留注册表信息的camera,尽管可能当前该camera当前connected,同时当该camera再次connected时,触发的event不像第一种情况那样是Added,而是Updated。

    因此这样的方式,对于我设计一个可切换当前已连接计算机camera的预览软件而言。第一个API无法获知containID ,第二个API尽管可以获知containID ,但还需要从中检测到的camera中挑选出已connected的,似乎有点麻烦。

    有更好的API吗?或者对于第一个API检测到的camera的DeviceInformation,有方法得到其containID ?


    2012年11月2日 1:48