添加camera后摄,导致前摄无法打开,现象是没有camera切换图标

问题描述:添加camera后摄,导致前摄无法打开,现象是没有camera切换图标
问题现象:MTK平台需要添加一个客户的后摄,看起来如此简单,但是添加OK后,后摄可以点亮切拍摄OK,但是发现前摄无法切换了。
问题分析过程:
看了一下修改的文件,并没有误操作,修改前摄相关的东西,修改文件如下图:

相关的文件也只有ProjectConfig.mk文件了,那么就继续查看这个文件是不是有什么异常,
CUSTOM_HAL_IMGSENSOR = ov5649_mipi_raw s5k4h5yx_mipi_raw ov13850_mipi_raw
 
CUSTOM_HAL_MAIN2_IMGSENSOR = 
 
CUSTOM_HAL_MAIN_IMGSENSOR = ov13850_mipi_raw
 
CUSTOM_HAL_MAIN_BACKUP_IMGSENSOR = s5k4h5yx_mipi_raw 
 
CUSTOM_HAL_SUB_BACKUP_IMGSENSOR = ov5649_mipi_raw
 
CUSTOM_HAL_SUB_IMGSENSOR = 
 
CUSTOM_KERNEL_IMGSENSOR = ov5649_mipi_raw s5k4h5yx_mipi_raw ov13850_mipi_raw
 
CUSTOM_KERNEL_MAIN2_IMGSENSOR = 
 
CUSTOM_KERNEL_MAIN_BACKUP_IMGSENSOR = s5k4h5yx_mipi_raw 
 
CUSTOM_KERNEL_MAIN_IMGSENSOR = ov13850_mipi_raw
 
CUSTOM_KERNEL_SUB_BACKUP_IMGSENSOR = ov5649_mipi_raw
 
CUSTOM_KERNEL_SUB_IMGSENSOR= 

跟之前的文件对比了一下,好像没有什么问题,但是
CUSTOM_KERNEL_SUB_BACKUP_IMGSENSOR = ov5649_mipi_raw,而
CUSTOM_KERNEL_SUB_IMGSENSOR = 
为空了,但是这个好像不应该导致camera没有加载吧,然后就先尝试的改了一下吧,改为
CUSTOM_HAL_IMGSENSOR = ov5649_mipi_raw s5k4h5yx_mipi_raw ov13850_mipi_raw
 
CUSTOM_HAL_MAIN2_IMGSENSOR = 
 
CUSTOM_HAL_MAIN_IMGSENSOR = ov13850_mipi_raw
 
CUSTOM_HAL_MAIN_BACKUP_IMGSENSOR = s5k4h5yx_mipi_raw 
 
CUSTOM_HAL_SUB_BACKUP_IMGSENSOR =
 
CUSTOM_HAL_SUB_IMGSENSOR = ov5649_mipi_raw
 
CUSTOM_KERNEL_IMGSENSOR = ov5649_mipi_raw s5k4h5yx_mipi_raw ov13850_mipi_raw
 
CUSTOM_KERNEL_MAIN2_IMGSENSOR = 
 
CUSTOM_KERNEL_MAIN_BACKUP_IMGSENSOR = s5k4h5yx_mipi_raw 
 
CUSTOM_KERNEL_MAIN_IMGSENSOR = ov13850_mipi_raw
 
CUSTOM_KERNEL_SUB_BACKUP_IMGSENSOR =
 
CUSTOM_KERNEL_SUB_IMGSENSOR= ov5649_mipi_raw

重新编译了一下kernel(是new了一遍),刷进去还是无效;
想了想再编译了一下hal层,push进去还是无效;
仔细分析其实就是没有改动什么,觉得肯定就是这个文件导致的,就把android重新编译了一遍(remake),结果很失望,还是没有前摄,郁闷啊,
心恨了就new了一把,奇迹出现了,前摄居然可以正常打开了。

问题的根本原因分析:
        分析了问题为什么new一遍就OK了,为什么new kernel都没有用,就搜了一下CUSTOM_KERNEL_SUB_IMGSENSOR 这个变量,居然在
mediatek/platform/mt6592/hardware/mtkcam/core/drv/imgsensor/Android.mk 文件里边
63 ifneq ($(CUSTOM_KERNEL_SUB_IMGSENSOR),)
64     LOCAL_CFLAGS += -DMTK_SUB_IMGSENSOR
65 endif
也就是说如果CUSTOM_KERNEL_SUB_IMGSENSOR 不为空是定义MTK_SUB_IMGSENSOR,那么我们再继续分析哪里会用到MTK_SUB_IMGSENSOR宏。
在文件:mediatek/platform/mt6592/hardware/mtkcam/core/drv/imgsensor/imgsensor_drv.cpp
函数ImgSensorDrv::impSearchSensor(pfExIdChk pExIdChkCbf)里面有用到,如下:
174     // search main/main_2/sub 3 sockets
175    #ifdef MTK_SUB_IMGSENSOR 
176     for (SensorEnum = DUAL_CAMERA_MAIN_SENSOR; SensorEnum <= DUAL_CAMERA_SUB_SENSOR; SensorEnum <<= 1)  {
177         LOG_MSG("impSearchSensor search to sub\n");
178    #else
179     for (SensorEnum = DUAL_CAMERA_MAIN_SENSOR; SensorEnum < DUAL_CAMERA_SUB_SENSOR; SensorEnum <<= 1)  {
180         LOG_MSG("impSearchSensor search to main\n");
181    #endif
很显然,如果MTK_SUB_IMGSENSOR定义了,那么我们SensorEnum就是<=DUAL_CAMERA_SUB_SENSOR,
DUAL_CAMERA_MAIN_SENSOR 值为1, DUAL_CAMERA_SUB_SENSOR值为2,那么就是有两颗camera,
归根结底的说就是如果CUSTOM_KERNEL_SUB_IMGSENSOR如果为空,那么就只有后摄一个camera。
     再来分析一下为什么编译不到,我们只有更改了ProjectConfig.mk但是里面的变量却被hardware层用到,所以必须编译
mm mediatek/platform/mt6592/hardware/mtkcam/core/才可以。
编译方法及push为文件如下:
./mk -t mm mediatek/platform/mt6592/hardware/mtkcam/core/

adb remount
adb push out/target/product/huaqin92_wet_b2a_tdd/system/lib/libfeatureio.so /system/lib/
adb push out/target/product/huaqin92_wet_b2a_tdd/system/lib/libcam.camshot.so /system/lib/
adb push out/target/product/huaqin92_wet_b2a_tdd/system/bin/camshottest /system/bin/
adb reboot

 

### 启动设备后置像头的方法 对于不同平台和技术栈,启动后置像头的方式有所不同。 #### iOS 和 Android 原生应用开发 在iOS和Android平台上,可以通过配置`UIImagePickerController`来指定使用哪个像头。为了启动后置像头,在初始化图像选取器控制器时,可以设置其属性以指向特定的相机位置[^1]: ```swift let imagePickerController = UIImagePickerController() if UIImagePickerController.isCameraDeviceAvailable(.rear) { imagePickerController.cameraDevice = .rear } imagePickerController.sourceType = .camera ``` 这段代码检查了后置像头是否可用,并将其设为默认使用的像设备。 #### Web 应用程序中的 JavaScript 实现 在Web环境中,通过JavaScript API `navigator.mediaDevices.getUserMedia()` 可以请求媒体流并选择具体的输入源(如置或后置像头)。下面是一个获取所有连接到系统的媒体输入设备列表的例子,并从中筛选出后置像头[^3]: ```javascript async function startRearCamera() { try { const devices = await navigator.mediaDevices.enumerateDevices(); let rearCameras = devices.filter(device => device.kind === 'videoinput' && device.label.includes('back')); if (rearCameras.length > 0) { const constraints = { video: { deviceId: rearCameras[0].deviceId } }; const stream = await navigator.mediaDevices.getUserMedia(constraints); document.querySelector('video').srcObject = stream; } else { console.error("No rear camera found."); } } catch(error){ console.error(`Error accessing media devices., ${error}`); } } ``` 上述脚本尝试找到带有“back”标签的视频输入设备作为后置像头的选择标准之一;如果找到了,则创建一个新的媒体约束对象用于打开像头。 #### H5 调用微信小程序或其他移动浏览器内核特性 针对HTML5页面想要直接操作手机上的硬件资源的情况,DCloud提供了专门为此设计的小程序插件,可以直接调起像头行扫码等功能而无需额外安装SDK[^4]。不过需要注意的是这类方案通常依赖于具体厂商提供的接口支持情况以及用户的授权许可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值