【Android Camera】 之 SmoothZoom

     头疼  最近忙于项目中Camera的种种,由于大多数热衷于交流的Android开发者是在模拟器上进行开发,在涉及到硬件相关的实践内容上,(例如此刻我将记录的有关于Camera的变焦问题),网上可查询和借鉴的资料真是少的可怜。不过想想也是,项目中具体硬件的相关信息调试过程也不便公之于众。我不写细节,说说思路吧。

 

  


         

        我所遇到的camera的变焦问题是这样的:

 

        zoom value 满足于区间:[0,28],平均对应smooth zoom的效果是放大1倍到8倍。

我将smoothzoom 从*1 拖到 *8 的Log:

 

V/camera  (30714): Zoom changed: value=1. stopped=true
D
/camera  (30714):  ^_^ ZOOM_STOPPING
V
/camera  (30714): Zoom changed: value=2. stopped=true

D
/camera  (30714):  ^_^ ZOOM_STOPPING
V
/camera  (30714): Zoom changed: value=3. stopped=true

D
/camera  (30714):  ^_^ ZOOM_STOPPING
V
/camera  (30714): Zoom changed: value=4. stopped=true

D
/camera  (30714):  ^_^ ZOOM_STOPPING
V
/camera  (30714): Zoom changed: value=5. stopped=true

D
/camera  (30714):  ^_^ ZOOM_STOPPING
V
/camera  (30714): Zoom changed: value=7. stopped=false

D
/camera  (30714):  ^_^ ZOOM_START
V
/camera  (30714): Zoom changed: value=8. stopped=false

D
/camera  (30714):  ^_^ ZOOM_START
V
/camera  (30714): Zoom changed: value=10. stopped=false

D
/camera  (30714):  ^_^ ZOOM_START
V
/camera  (30714): Zoom changed: value=12. stopped=false

D
/camera  (30714):  ^_^ ZOOM_START
V
/camera  (30714): Zoom changed: value=15. stopped=false

D
/camera  (30714):  ^_^ ZOOM_START
V
/camera  (30714): Zoom changed: value=18. stopped=false

D
/camera  (30714):  ^_^ ZOOM_START
V
/camera  (30714): Zoom changed: value=21. stopped=false

D
/camera  (30714):  ^_^ ZOOM_START
V
/camera  (30714): Zoom changed: value=24. stopped=false

D
/camera  (30714):  ^_^ ZOOM_START
V
/camera  (30714): Zoom changed: value=28. stopped=true

D
/camera  (30714):  ^_^ ZOOM_START

(注意:value=28不代表是28倍,而是8倍)

 

 按上面的Log分析看来,逻辑十分错乱,按道理说stopped参数为true时,zoom为停止。value 1-5的true值让我费解。这个在真机上实际效果就是,在取景画面中看到是a倍的场景,但是拍出的照片确实b倍的效果……

555

 

 

 

 

 

更为可怕的是,当自动测试zoom N个来回后,重复启动camera,满屏的I2C ERROR 告诉我camera挂掉了……如果找不出问题所在,我也要挂掉了……


 

   Camera部分文件量较大,同名也多,不得不先做个梳理,理清思路。

 

 

camera

 

 

 

Camera.cpp的路径我没有写,是有原因的。

对于上层应用来说,camera.cpp是最为直接的函数调用和实现,可以参考阅读framework/base/libs/camera/Camera.cpp ,但是在硬件设备确定的情况下,是根据硬件的功能具体实现整合到实际项目中的某一路径的,习惯上来讲放在hardware/下,至于怎么编译进来那是另外一方面的内容了。

 

启动camera,首先对zoom进行初始化,如果硬件不支持zoom,那么直接return了。

支持,使mSmoothZoomSupported置为true。

 
 
对zoom状态的监听由class ZoomListener
  implements android.hardware.Camera.OnZoomChangeListener {
包办,不同的zoom状态标致也是传值给底层如何进行下一步的标致

 

 

 当接到zoom改变信号的时候

 

 

其实抛开I2C的问题,仅仅明确这几个操作就足以解决问题。今天实在太累了,下回接着写好了 —_—||

欢迎驱动牛人多多交流camera I2C 方面的经验。

 

 

作者:yiyaaixuexi 发表于2011-5-21 17:04:00 原文链接
阅读:507 评论:14 查看评论
posted @ 2011-05-21 09:04  .net|C#|js|jquery|css|div|html  阅读(1100)  评论(0编辑  收藏  举报