调研小结

标题一不小心写成了调研小姐,汗。值此天上人间都被灭的当儿,去调研小姐大概只能是死路一条。

最近在 Symbian 上接触到了 CCamera 这个类,起因是原来发现有个软件叫“终极相机”,可以打开我的前置摄像头拍照,而我使用 Forum Nokia 上的带自动对焦的相机示例程序就不行,稍一接触才发现,那个例子把 CCamera 这个家伙又包装了起来,而且还不提供源代码,只发布了一个叫 CameraWrapper 的库(有供开发人员使用的静态导入库和供随产品分发的动态链接库安装包),据说是为了弥合若干版本的系统之间的差异。诡异的是,我无法用它来操控前置摄像头。

在网上搜了一下相关资料,发现 Nokia 对 Camera 的支持比较混乱,除了上述的 CameraWrapper 之外,还有:一篇 Wiki,演示了如何捕获图像,把 CCamera 封装了一个 CCameraEngine 类;一个所谓的摄像头引擎:Camera Application Engine API。甚至在搜索过程中发现有人提到,前置摄像头没有提供现成的捕获静态图像的功能(我没有测试)。由于 CameraWrapper 的使用经验,我一点也不想试用这两个被包裹之后的东西,于是决定自行使用 CCamera 开始工作。Nokia 官方的资料里几乎没有任何直接使用这个类的例子,历经少许艰辛,老汉在 SourceForge 上找到了两个程序,里面用到了 Camera,一个叫 Movino,一个叫 SmartCam,事实上,后者在一定程度上直接使用了前者的部分代码。由于我要操控的是前置摄像头,而且又由于我之前说的那个有人说起的系统功能缺陷,我没有试图采用 CCamera 本身的捕获静态图像功能,甚至避开了直接使用现成的 ViewFinder(我一直以为使用 ViewFinder 是要求调用方有界面的——当然我仍然没有测试——而我将来的拍照动作我不希望有预览界面)。我采取了进入摄像模式,把单帧保存为图像的思路。

这绝对是可行的,但是也有麻烦。起先是不知道回调接口里返回的数据格式。查阅资料并在初步的代码测试后发现(一个 UIQ 平台的示例程序给了我较大帮助),大概是以 CCamera::EFormatYUV420Planar 和 CCamera::EFormatYUV420SemiPlanar 居多(我的 E66 是前者)。于是就猛找 YUV 转换到 RGB 的代码(顺便说一句,YUV 的编码格式可真够多的),没有合适的;我不死心,觉得如果 Nokia 自己做相机功能如果连这个都不涉及的话,也实在是太说不过去了,于是到 S60 代码里找,还真找到了。精简了一下后放到测试程序里,在模拟器里编译通过后开始真机测试,一举成功。还原后的彩色图像颜色偏绿,比对我精简前后的代码,发现原来代码里有个地方 Nokia 对图像进行了一定的修饰处理,虽然没有验证,但我基本确定差异就是那个导致的。有时间把修正代码也拿出来切进去测试看看。

其实我的原始需求是,我的 DMU 想增加一个键盘锁打开时能够自动利用前置摄像头拍摄使用者的功能。而且利好消息包括,使用相机的能力是 UserEnvironment,是可以由用户赋予的,不需要 Symbian 签名。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注