Android facing front camera and facing back camera setting in HAL

本文介绍在Freescale MX6 SabreSD平台上移植新摄像头模组的过程,包括驱动层和HAL层的具体实现步骤,并提供了设置前后置摄像头的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Freescale平台的Android摄像头移植参考

http://blog.sina.com.cn/s/blog_54aa47930102vc6m.html

Freescale MX6 sabresd平台默认使用的摄像头模组是ov5640。
那么如何在基于Freescale MX6 sabresd的Android平台上移植一个新的摄像头模组呢?
其实只要参照ov5640的代码,还是比较容易的,我把新的摄像头模组暂时命名为demo。
一、driver层
(1)复位管脚,数据管脚的复用配置
(2)参考kernel_imx\drivers\media\video\mxc\capture\ov5640.c实现demo.c
(3)根据自己的板把模组信息填到mxc_i2c_board_info中,及一些复位操作
二、HAL层
(1)参考hardware\imx\mx6\libcamera2目录下的Ov5640Csi.cpp,Ov5640Csi.h实现DemoCsi.cpp,DemoCsi.h
(2)在hardware\imx\mx6\libcamera2\CameraUtil.h中加入
#define DEMOCSI_SENSOR_NAME "demo_camera"
这个名字要跟驱动代码demo.c的ioctl_g_chip_ident中得到的名字一致。
(3)在hardware\imx\mx6\libcamera2\DeviceAdapter.cpp的Create方法中加入:
else if (strstr(info.name, DEMOCSI_SENSOR_NAME)) {
        FLOGI("DeviceAdapter: Create demo csidevice");
        devAdapter = new DemoCsi();
    }
三、启动脚本
在device\fsl\sabresd_6dq\init.rc中加入
setprop back_camera_name demo_camera

2.设置Androidfacing front camera facingback camera

(修改处见下文红色字体部分,已测试OKandroid录像需要)

属性设置/freescaleandroid5.1/device/fsl/sabresd_6dq/init.i.MX6Q.rc


  #set back camera.

    setpropback_camera_name max9286_mipi # setprop back_camera_nameov5640_mipi

  #set front camera.

    setpropfront_camera_name ovmax9286_mipi # setprop front_camera_nameuvc,csi,ov5642_camera,ov5640_camera

此处设置的name必须参考drivers/media/platform/mxc/capture/max9286_mipi.c文件中


staticint ioctl_g_chip_ident(struct v4l2_int_device *s, int *id)

{

((structv4l2_dbg_chip_ident *)id)->match.type =

V4L2_CHIP_MATCH_I2C_DRIVER;

strcpy(((structv4l2_dbg_chip_ident *)id)->match.name,

"ovmax9286_mipi_deseiralizer");


return0;

}


即必须为"ovmax9286_mipi_deseiralizer"的子串。

HAL层源码位于/freescaleandroid5.1/hardware/imx/mx6/libcamera2

相关代码讲解

CameraModule.cpp

intcamera_get_number_of_cameras()

此函数主要用于获取CameraInfo信息

intGetDevPath(const char  *pCameraName,

              char       *pCameraDevPath,

              unsignedint pathLen)

此函数是获取CameraInfo信息的主要实现方法,主要是匹配namedevpath

本次修改的主要地方便在此:


      //sprintf(dev_node,"/dev/%s", dir_entry->d_name);

    if(strstr(pCameraName, "max9286_mipi")) // added

     strcpy(dev_node,"/dev/video0"); // added


    if(strstr(pCameraName, "ovmax9286_mipi")) // added

     strcpy(dev_node,"/dev/video1"); // added


源码是采用遍历的方式去查找可用的video,如果找到一个可用的便就不在继续了。所以我们的问题就在此,无论是前还是后摄像头,都只会打开video0;所以此处我就强行指定了属性为“max9286_mipi”时,对应video0;属性为"ovmax9286_mipi"时,对应video1;

DeviceAdapter.cpp 

DeviceAdapter::Create(constCameraInfo& info)

根据setprop匹配不同的文件,根据我们的实际情况,我并没有单独写出MAX9286的配置文件,而是使用通用的ovdevice配置,此文件主要是初始化数据格式及相应转换。

status_tDeviceAdapter::initialize(const CameraInfo& info)

设备初始化


更新camera.imx6.so库文件

sudocp out/target/product/sabresd_6dq/system/lib/hw/camera.imx6.so /media/XXX/system/lib/hw/ 

更新ramdisk.img初始化启动

mkimage-A arm -O linux -T ramdisk -C none -a 0x1080080 -n "Android RootFilesystem" -d out/target/product/sabresd_6dq/ramdisk.img /media/XXX/boot/uramdisk.img




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值