湖南动物总动员电视图:android中支持双camera问题 - 移动平台 / Android

来源:百度文库 编辑:中财网 时间:2024/04/30 05:29:05

android中支持双camera问题[问题点数:100分,结帖人:zhang19871112]

  • zhang19871112
  • (zhang19871112)

  • 等 级:
  • 结帖率:

楼主发表于:2011-04-22 16:04:15 各 位大侠,小弟最近尝试在 android2.2上实现支持双camera,因为实在是太菜了,于是乎在网上搜索一番,找到了Wangxiaozhe的一篇《Android2.2平 台上支持多camera》,这篇文章对我帮助很大,但是我的情况还不太一样,先说下我现在的思路:
1:在Settings.apk中添加一个选项,选择是前置还是后置camera, 将这个index保存在java/android/provider/Settings.java中。
2:修改camera.apk,在camera.apk初始化的时候获取java/android/provider/Settings.java中的index值,通过frramework层,一路下去告知camera hal层选择了哪个camera.
这 种情况,我已经可以实现了,但是这样做有个问题,其余类似camera的apk就没法去打开正确的camera。也就是说,如果在Settings中选择 了另外一个camera,在打开别的camera apk时,是不会有效果的。所以我在想,应该把通知camera hal层是哪个camera 被选中的代码加在framework层,即Framework/base/core/java/android/hardware /camera.java中,因为所有的camera apk都会调用到这个文件,但是问题来了,在这里面怎么去获得java/android/provider/Settings.java中的值呢?用
ContentResolver resolver = getContentResolver();
mCameraId = Integer.parseInt(String.valueOf(Settings.System.getInt(resolver, CAMERA_INDEX, DEFAULT_CAMERA_INDEX)));;
会报错,但这两行代码在camera.apk中是可以用的。

各位大侠有什么建议意见,或者更好的解决办法吗,在此谢过了!!



  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
回复次数:18
  • qminglin
  • (bang)

  • 等 级:

#1楼 得分:0回复于:2011-04-22 23:37:18 前后摄像头是2.3官方才开始支持的啊。
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:3G版iPhone的八大未解之谜
  • lincyang
  • (Alex)

  • 等 级:

#2楼 得分:0回复于:2011-04-23 08:21:15 这个。。。
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:在局域网内如何解决网上邻居的互访问题
  • zhang19871112
  • (zhang19871112)

  • 等 级:

#3楼 得分:0回复于:2011-04-23 13:56:16 没错,不过毕竟是开源的嘛,还是可以自己去加点东西的
引用 1 楼 qminglin 的回复:

前后摄像头是2.3官方才开始支持的啊。

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:(转)我给同事配的实用型的家庭多媒体影院系统 -- 3.音响选择篇:
  • aomandeshangxiao
  • (傲慢的上校)

  • 等 级:

#4楼 得分:0回复于:2011-04-23 14:16:35

该回复于2011-04-25 09:33:07被版主删除

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:手机和手机不能不通过基站直接用GSM通信?
  • majaw
  • (majaw)

  • 等 级:

#5楼 得分:5回复于:2011-04-23 14:39:46 2.2是支持的,我现在定制的2.2系统就可以,不过camera不是我负责的那块,这二天组长叫我改下camera的声音,camera真够复杂的
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:"超越时空的紫禁城"——见证中国视觉计算和互联网历史
  • yongyuandeni


  • 等 级:

#6楼 得分:0回复于:2011-04-23 15:48:05 来学习的
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • zxpcomeon
  • (浪子想家)

  • 等 级:

#7楼 得分:5回复于:2011-04-23 20:52:41 等android2.3吧,否则得用c++修改底层camera实现代码
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • YKDSea
  • (SkFo)

  • 等 级:

#8楼 得分:0回复于:2011-04-23 21:19:45 你的程序会报什么错误?

我之前做过多摄像头,也是在camera.java的api中做了改动,没有使用provider,使用的是prop来保存camera的index,这个prop是很独立的一个结构,使用也比较方便。



  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • yiyaaixuexi
  • (茜妞?vim+ctags )

  • 等 级:

#9楼 得分:0回复于:2011-04-23 21:53:15 你是说,你现在可以实现的是,camera1 或者camera2 ,无论先选择index几 ,另一个都无法再被选择。

什么叫

ContentResolver resolver = getContentResolver();
mCameraId = Integer.parseInt(String.valueOf(Settings.System.getInt(resolver, CAMERA_INDEX, DEFAULT_CAMERA_INDEX)));;
会报错,但这两行代码在camera.apk中是可以用的。

什么意思?你难道不重新另外定义一个变量来标识吗
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • lightsoure
  • (lightsoure)

  • 等 级:

#10楼 得分:10回复于:2011-04-23 22:05:33 可能你的CAMERA HAL层不完整吧。因为只要上层确定是前还是后摄像头,CAMERA HAL层会根据不同ID 分别从/dev/video 0或者/dev/video 2类似的通道来利用标准的V4L2控制具体某个摄像头。

从你的情况看很可能hal层不完整了哦。可以利用完整的那个摄像头,重新添加另外一个。同时保证底层CAMERA两路OK
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • zhang19871112
  • (zhang19871112)

  • 等 级:

#11楼 得分:0回复于:2011-04-26 21:41:15 我修改了android自带的camera.apk,启动的时候会从Settings中拿到index然后通 知到HAL,但是如果我自己下载的一个apk就可以了,因为我不可能动他的代码,他只是去到被动的去hal层拉数据,在Setting菜单中选择哪个 camera中是没用。其实我想问的是如何在Framework/base/core/java/android/hardware /camera.java中拿到java/android/provider/Settings.java中的我新加的CAMERA_INDEX?
引用 9 楼 yiyaaixuexi 的回复:

你是说,你现在可以实现的是,camera1 或者camera2 ,无论先选择index几 ,另一个都无法再被选择。

什么叫

ContentResolver resolver = getContentResolver();
mCameraId = Integer.parseInt(String.valueOf(Settings.System.getInt(resolver, CAM……

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • zhang19871112
  • (zhang19871112)

  • 等 级:

#12楼 得分:0回复于:2011-04-26 21:42:54 我最想知道的是如何在Framework/base/core/java/android/hardware /camera.java中拿到java/android/provider/Settings.java中的我新加的CAMERA_INDEX,这个值 是我在Setting菜单中添加的,是可以设置的
引用 10 楼 lightsoure 的回复:

可能你的CAMERA HAL层不完整吧。因为只要上层确定是前还是后摄像头,CAMERA HAL层会根据不同ID 分别从/dev/video 0或者/dev/video 2类似的通道来利用标准的V4L2控制具体某个摄像头。

从你的情况看很可能hal层不完整了哦。可以利用完整的那个摄像头,重新添加另外一个。同时保证底层CAMERA两路OK

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • zhang19871112
  • (zhang19871112)

  • 等 级:

#13楼 得分:0回复于:2011-04-26 21:44:50 我的错误是在Framework/base/core/java/android/hardware/camera.java中用如下的代码会报错:ContentResolver resolver = getContentResolver();
mCameraId = Integer.parseInt(String.valueOf(Settings.System.getInt(resolver, CAMERA_INDEX, DEFAULT_CAMERA_INDEX)));;
因为在这个camera.java中不可能调用到getContentResolver函数,这是在activity中才可以调用的吧
引用 8 楼 ykdsea 的回复:

你的程序会报什么错误?

我之前做过多摄像头,也是在camera.java的api中做了改动,没有使用provider,使用的是prop来保存camera的index,这个prop是很独立的一个结构,使用也比较方便。

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • yiyaaixuexi
  • (茜妞?vim+ctags )

  • 等 级:

#14楼 得分:20回复于:2011-04-26 22:28:19
引用 11 楼 zhang19871112 的回复:
我修改了 android自带的camera.apk,启动的时候会从Settings中拿到index然后通知到HAL,但是如果我自己下载的一个apk就可以 了,因为我不可能动他的代码,他只是去到被动的去hal层拉数据,在Setting菜单中选择哪个camera中是没用。其实我想问的是如何在 Framework/base/core/java/android/hardware/camera.java中拿到ja……


嗯,懂你的意思了。想要在framework层和app层增加一个camera选项,工作量很大。
需要修改:
frameworks/base/Android.mk 把你的camera 加进去
frameworks/base/core/java/android/provider/Settings.java 
frameworks/base/core/jni/Android.mk 
frameworks/base/core/jni/AndroidRuntime.cpp 
frameworks/base/core/res/res/values/arrays.xml 
frameworks/base/core/res/res/values/config.xml 
packages/apps/Settings/AndroidManifest.xml 
build/core/pathmap.mk
等等
还有你的camera 文件

还需要根据你的情况 修改init.rc 创建相关目录 或者启动相关service ==

真不是件容易的事



  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • YKDSea
  • (SkFo)

  • 等 级:

#15楼 得分:30回复于:2011-04-26 22:37:10
引用 13 楼 zhang19871112 的回复:

我的错误是在Framework/base/core/java/android/hardware/camera.java中用如下的代码会报错:ContentResolver resolver = getContentResolver();
mCameraId = Integer.parseInt(String.valueOf(Settings.System.getInt(resolver, CA……


恩,所以用prop去试验一下,persist.prop是可以保存的prop,在setting中保存的是把数据写入到prop里面而不写到数据库里面。
这样,在camera.java中去读取这个prop的值,prop的操作可以直接使用的。
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • YKDSea
  • (SkFo)

  • 等 级:

#16楼 得分:30回复于:2011-04-26 23:04:28 Prop的介绍参考下http://my.unix-center.net/~Simon_fu/?p=957
在java中使用android.os.SystemProperties来操作prop(参考的文章中说的是错误的)
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • zhang19871112
  • (zhang19871112)

  • 等 级:

#17楼 得分:0回复于:2011-04-27 13:55:35
引用 16 楼 ykdsea 的回复:

Prop的介绍参考下http://my.unix-center.net/~Simon_fu/?p=957
在java中使用android.os.SystemProperties来操作prop(参考的文章中说的是错误的)

谢谢YKDSea,我试了一下,成功了!在Settings.apk中将cameraIndex通过android.os.SystemProperties的get和set方法存储到文件系统里面:
SystemProperties sp = new SystemProperties();
String s = sp.get("persist.sys.cameraIndex");
。。。
sp.set("persist.sys.cameraIndex", "0");
之后会在/data/property/中生成persist.sys.cameraIndex,这个文件里面就是保存的值。
在camera hal层里面#include , 调用property_get("persist.sys.cameraIndex", &cameraId, "0"),就可以拿到在apk里设置的值了,这样的话就绕过了framework,service等,还挺方便的!

问题解决了开心啊,之后就要开始调试camera driver了,不知到会有什么问题等着我呢。。。总之谢谢大家了~

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • zhang19871112
  • (zhang19871112)

  • 等 级:

#18楼 得分:0回复于:2011-04-27 13:56:35
引用 14 楼 yiyaaixuexi 的回复:

引用 11 楼 zhang19871112 的回复:
我 修改了android自带的camera.apk,启动的时候会从Settings中拿到index然后通知到HAL,但是如果我自己下载的一个apk就 可以了,因为我不可能动他的代码,他只是去到被动的去hal层拉数据,在Setting菜单中选择哪个camera中是没用。其实我想问的是如何在 Framework/base/core/java/andr……

还好吧,差不多弄好了,framework层现在没动,就动了Settings.apk和camera Hal,谢谢啊