Android高通 8.1 老化apk打开摄像头花屏问题

news2024/11/27 8:48:46

1、最近由于公司VR 3D系统要做双Camera老化测试apk,同时老化4小时需要轮询切换二个摄像头,保证后面camera标定精度数据更准确。

2、一开始我尝试用之前方案移植过去然后同时打开双摄像头 突然发现花屏 如下图所示

3、于是一第一时间想到是不是分辨率不兼容或者硬件Camera问题 或者找驱动确认 驱动确认结果2D系统没有问题 ,于是我交叉验证换了一台机器 跟硬件结果还是花屏,因为之前也处理类似的case,于是我自己尝试修改固定的分辨率1280*720 (720P)代码如下(这里只是部门代码github上面也有很多camera源码以及骁龙相机源码 大家可以下载自行研究)

   private val mStateCallback2: CameraDevice.StateCallback =
            object : CameraDevice.StateCallback() {
                override fun onOpened(camera: CameraDevice) {
                    Log.i(TAG, "StateCallback! onOpened 2")
                    mCameraDevice2 = camera // 打开成功,保存代表相机的CameraDevice实例
                    val surfaceTexture = mTextureView2!!.surfaceTexture
                    surfaceTexture.setDefaultBufferSize(1280, 720) //3264X2448(800万)
                    val surface = Surface(surfaceTexture)
                    val previewList = ArrayList<Surface>()
                    previewList.add(surface)
                    try {
                        // 6.将TextureView的surface传递给CameraDevice
                        mCameraDevice2!!.createCaptureSession(
                            previewList,
                            object : CameraCaptureSession.StateCallback() {
                                override fun onConfigured(session: CameraCaptureSession) {
                                    try {
                                        val builder =
                                            mCameraDevice2!!.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW)
                                        builder.addTarget(surface) // 必须设置才能正常预览
                                        val captureRequest = builder.build()
                                        // 7.CameraCaptureSession与CaptureRequest绑定(这是最后一步,已可显示相机预览)
                                        session.setRepeatingRequest(captureRequest, null, null)
                                        mHandler.removeMessages(CAMERA_RELEASE)
                                        mHandler.sendEmptyMessageDelayed(CAMERA_RELEASE,delayTwoSeconds)


                                    } catch (e: CameraAccessException) {
                                        Log.e(
                                            TAG,
                                            "createCaptureRequest error = " + e.message
                                        )
                                    }
                                }

                                override fun onConfigureFailed(session: CameraCaptureSession) {
                                    Log.e(TAG, "onConfigureFailed")
                                    LogUtils.e("Camera2异常")
                                    Toast.makeText(requireContext(),"Camera2异常,请检查设备!", Toast.LENGTH_LONG).show()
                                }
                            },
                            null
                        )
                    } catch (e: CameraAccessException) {
                        Log.e(TAG, "createCaptureSession error = " + e.message)
                    }
                }

                override fun onDisconnected(camera: CameraDevice) {
                    Log.e(
                        TAG,
                        "StateCallback! onDisconnected camera.getId() = " + camera.id
                    )
                    releaseCamera()
                }

                override fun onError(camera: CameraDevice, error: Int) {
                    Log.e(
                        TAG,
                        "StateCallback camera.getId() = " + camera.id + " , error = " + error)
                    LogUtils.e("Camera2异常")
                    Toast.makeText(requireContext(),"Camera2异常,请检查设备!", Toast.LENGTH_LONG).show()
                    releaseCamera()
                }
            }

4、一开始花屏抓的logcat 错误如下

5、最后花屏问题解决了 同时为了确认 adb shell dumpsys media.camera 查看当前系统支持输出分辨率列表  如下图所示

6、安装一个骁龙相机源码 大多数分辨率都是支持的,所以再次确认花屏是分辨率问题导致。

7、大家如果实在没有办法可以先从大的分辨率 跟小的去试 这样可能验证更快一些,其他不啰嗦了。就是简单记录下自己踩的坑而已。

转载请注明出处,谢谢!

8 、总结:

1、camera 8.1 架构与Camx有很大差异

2、遇到问题学会交叉编译验证 尤其是这种花屏问题 首先想到硬件或者分辨率的问题(这个需要经验积累)

 

3、网上查资料以及adb shell dumpsys media.camera确定camera sensor是否正常挂载

4、多尝试 多修改

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/979758.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

个人信息保护专业人员认证(CCRC-PIPP)

数据已成为重要的生产要素&#xff0c;是国家基础性战略资源&#xff0c;个人信息是数据的核心和基础。保障公民个人信息权益&#xff0c;促进个人信息数据依法合理有效利用&#xff0c;已经成为政府和企业推动数字经济持续健康发展的首要任务。为促进个人信息保护领域人才队伍…

LeetCode127. 单词接龙

题目 力扣题目链接(opens new window) 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列&#xff1a; 序列中第一个单词是 beginWord 。序列中最后一个单词是 endWord 。每次转换只能改变一个字母。转换过程中的中间单词必须是字典 wo…

AJAX学习笔记8 跨域问题及解决方案

AJAX学习笔记7 AJAX实现省市联动_biubiubiu0706的博客-CSDN博客 跨域:指一个域名的网页去请求另外一个域名资源.比如百度页面去请求京东页面资源. 同源与不同源三要素:协议,域名,端口 协议一致,域名一致,端口一致.才算是同源.其他一律不同源 新建项目测试: 1.window.open();…

VIRTIO-BLK代码分析(2)VIRTIO驱动分析

QEMU模拟的VIRTIO设备同时也是PCIE设备&#xff0c;Guest中VIRTIO PCIE驱动与之匹配&#xff0c;根据设备驱动模型&#xff0c;最终触发probe函数virtio_pci_probe()。该probe函数使能PCIE设备&#xff0c;并注册VIRTIO设备&#xff0c;并与VIRTIO-BLK匹配&#xff0c;触发VIRT…

手把手教你搭建园林园艺小程序商城

现如今&#xff0c;随着互联网的快速发展&#xff0c;小程序成为了企业和个人展示产品和服务的新方式。在园林园艺行业&#xff0c;构建一个园林园艺小程序能够更好地推广和销售自己的产品和服务。那么&#xff0c;如何构建一个园林园艺小程序呢&#xff1f;下面我们来详细介绍…

conda和Python的虚拟环境如何结合使用,以及二者之间到底有什么区别?

问题描述 今天在复现streamlit的代码时&#xff08;参考Streamlit 讲解专栏&#xff08;一&#xff09;&#xff1a;安装以及初步应用&#xff09;&#xff0c;根据这篇博文指导&#xff0c;要先用以下指令创建一个虚拟环境&#xff1a; # 创建虚拟环境&#xff08;使用venv&a…

游戏软件报错d3dx9_43.dll丢失怎么解决?这5个解决方法可以修复

我想和大家分享一个关于电脑问题的话题——d3dx9_43.dll丢失怎么解决。这个话题对于很多使用电脑的朋友来说&#xff0c;可能是一个非常棘手的问题。d3dx9_43.dll是 DirectX中非常重要的一部分&#xff0c;许多游戏和应用程序都需要它来正常运行。如果丢失了这个文件&#xff0…

RDMA 相关bug记录

对于 Client 来讲&#xff0c;setupConnection 中的 cm_id 应该是本地的&#xff0c;意味着后续 create pd \ cq \ qp 等等传入的 cm_id 都是本地 id。但是对于 Server 来讲&#xff0c;收到 client 的链接请求时将 client 的 cm_id 传入 setupConnection&#xff0c;意味着后续…

RunnerGo怎么做性能测试

RunnerGo是一个功能强大&#xff0c;使用简单的性能测试平台&#xff0c;它基于go语言开发&#xff0c;支持接口管理、自动化测试、性能测试等功能。 RunnerGo有什么特点 支持并发模式、错误率模式、阶梯模式、每秒请求数模式、响应时间模式等多种压测模式&#xff0c;支持自…

软考高级之系统架构师之项目管理

今天是2023年09月06日&#xff0c;距离软考高级只有58天&#xff0c;加油&#xff01; 概念 临时性&#xff1a;是指每一个项目都有一个明确的开始时间和结束时间&#xff0c;临时性也指项目是一次性的。 风险 风险具有以下特性&#xff1a;客观性、偶然性、相对性、社会性…

【探索Linux】—— 强大的命令行工具 P.8(进程优先级、环境变量)

阅读导航 前言一、进程优先级1. 优先级概念2. Linux查看系统进程3. PRI&#xff08;Priority&#xff09;和NI&#xff08;Nice&#xff09; 二、环境变量1. 概念2. 查看环境变量方法3. 环境变量的组织方式4.通过代码获取环境变量5. 环境变量的特点 总结温馨提示 前言 前面我们…

MySQL主从复制读写分离

读写分离 读写分离&#xff0c;基本的原理是让主数据库处理事务性增、改、删操作&#xff08;INSERT、UPDATE、DELETE&#xff09;&#xff0c;而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库 读写分离的好处 因为数据库的“写…

在Linux系统启动java程序(jar包)

文章目录 1. mvn install生成jar包2. 利用ftp工具将jar包上传到linux服务器3. 在linux服务器上启动jar包3.1 直接启动jar包3.2 后台启动jar包3.3 后台不挂断启动jar包3.4 后台不挂断启动jar包并输出日志到指定文件3.5 其他 1. mvn install生成jar包 2. 利用ftp工具将jar包上传到…

小程序中如何查看会员的积分和变更记录

​积分是会员卡的一个重要功能&#xff0c;可以用于激励会员消费和提升用户粘性。在小程序中&#xff0c;商家可以方便地查看会员卡的积分和变更记录&#xff0c;以便更好地了解会员的消费行为和积分变动情况。下面将介绍如何在小程序中查看会员卡的积分和变更记录。 1. 找到指…

Android Ble蓝牙App(七)扫描过滤

Ble蓝牙App&#xff08;七&#xff09;扫描过滤 前言目录正文一、增加菜单二、使用MMKV① 添加依赖② 封装MMKV③ 使用MMKV 三、过滤空设备名四、过滤Mac地址五、过滤RSSI六、源码 前言 在上一篇文章中了解了MTU的相关知识以及对于设备操作信息的展示&#xff0c;本篇文章中将增…

uniapp 在 onLoad 事件中 this.$refs 娶不到的问题

现象 本人想在主页面加载的时候调用子组件的方法。示例代码如下&#xff1a; 运行&#xff0c;发现 this.$refs 取不到。如下图所示&#xff1a; 解决方法&#xff0c;把onLoad 换为 onReady 就可以了。

存储过程报Illegal mix of collations错误的解决方法

CREATE PROCEDURE maxAgeStudent(IN _gender CHAR) BEGINDECLARE maxage INT DEFAULT 0;SELECT max(age) INTO maxage FROM student where gender _gender;SELECT * from student WHERE age maxage and gender _gender; END; 在调用的时候 call maxAgeStudent(1) 产生了报…

MySQL数据库的增删改查(进阶)

目录 数据库约束 约束类型 NULL约束 UNIQUE&#xff1a;唯一约束 DEFAULT&#xff1a;默认值约束 PRIMARY KEY&#xff1a;主键约束 FOREIGN KEY&#xff1a;外键约束 表的设计 一对一关系 一对多关系 多对多关系 查询 聚合查询 聚合函数 GROUP BY子句 HAVING …

LeetCode 1123. 最深叶节点的最近公共祖先:DFS

【LetMeFly】1123.最深叶节点的最近公共祖先 力扣题目链接&#xff1a;https://leetcode.cn/problems/lowest-common-ancestor-of-deepest-leaves/ 给你一个有根节点 root 的二叉树&#xff0c;返回它 最深的叶节点的最近公共祖先 。 回想一下&#xff1a; 叶节点 是二叉树…

2023年09月在线IDE流行度最新排名

点击查看最新在线IDE流行度最新排名&#xff08;每月更新&#xff09; 2023年09月在线IDE流行度最新排名 TOP 在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的 在线IDE被搜索的次数越多&#xff0c;人们就会认为它越受欢迎。原始数据来自谷歌Trends 如果您相…