![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android Camera开发【小驰私房菜系列】
文章平均质量分 74
全网最具价值的Android Camera开发系列资料~
作者:8年Android Camera开发,从Camera app一直做到Hal和驱动~
欢迎订阅,相信能扩展你的知识面,提升个人能力~
【全网同名,小驰行动派,该资料针对知识星球成员免费,欢迎咨询加入知识星球】
优惠券已抵扣
余额抵扣
还需支付
¥199.90
¥299.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
小驰行动派
@公众号:小驰行动派。 Android开发,专注camera领域。分享互联网打工人工作和生活的点滴~
【目前所有订阅内容针对知识星球成员免费,欢迎咨询加入自身星球】
展开
-
小驰私房菜系列-目录
14_mm-camera_查看stream流配置、选择的sensor分辨率。17_mm-camera_Camera 打开、切换速度日志分析。25_Qcom_Camera 稳定性、性能问题 debug手段。15_mm-camera_高通HDR dump分析。30_MTK平台Camera基本流程,日志信息打印。11_mm-camera 添加客制化分辨率。24_MTK平台修改camera数据方向。12_mm-camera 必知必会01。13_mm-camera 必知必会02。18_qcom_camx 日志系统。原创 2023-03-28 23:17:16 · 403 阅读 · 0 评论 -
041_小驰私房菜_MTK Camera yuv旋转90度方案
做旋转可以在app层接收到数据后,自行做旋转,也可以在hal层,针对yuv format这路流进行旋转。那我们做旋转也可以采用类似的方式。预览和录像是正常的,这个是因为预览和录像有方向相关属性可以调整,系统会根据摄像头mount的角度已经当前设备的方向,进行对应的旋转。这个下面这个文件,可以修改摄像头的mount角度。,可以看到前摄的Orientation是270,所以原始出图是做了90度的旋转。这个方案,思路就是在配流信息中,将rotation信息进行修改。注:本文章所用权归:小驰成长圈,禁止转载宣传!原创 2023-12-23 23:05:00 · 204 阅读 · 0 评论 -
041_小驰私房菜_MTK平台添加支持通过原生Camera API接口调用UsbCamera
从下面的日志里面可以看到,由于还有其它的selinux权限问题,导致camera error。:通过调用Android Camera API去调用UsbCamera,需要做哪些修改?setenforce 0来确认,解决selinux问题是否就正常。后面再根据实际的avc异常信息,添加selinux权限。注:本文章所用权归:小驰成长圈,禁止转载宣传!-------这里遇到的问题,是在。需要把自己的app包名,写到。中添加如下内容,问题解决。修改目录/device/修改目录/system/原创 2023-12-23 23:01:16 · 254 阅读 · 0 评论 -
040_小驰私房菜_MTK平台,添加camera客制化size
另外需要确认的是,目前驱动配置的寄存器里面,是否已经配置了大于我们我们自定义size的size配置,如果已经有了,那么可以选择继续使用当前sensor配置就好。如果想要sensor直出支持的自定义size,则sensor相关寄存器需要重新配置。首先,这个添加的size,是在sensor支持的最大size范围内的。sensor这边配置完成后,还需要在metadata中添加我们自定义的size,app才能获取到该组size。这篇文章的例子,是需要sensor这边配置一组2560 * 1600的配置。原创 2023-09-23 22:24:57 · 241 阅读 · 0 评论 -
039_小驰私房菜_Camera perfermance debug
针对不同的性能问题,可以添加不同的参数来针对抓取,否则抓取出来的文件过大,会导致打不开文件。作者:8年Android Camera开发,从Camera app一直做到Hal和驱动~KERNEL_DEFCONFIG改成xxx-perf_defconfig。在chrome浏览器里输入地址 chrome://tracing/文件就可以查看到trace信息,根据trace信息来分析性能。5、用 chrome 浏览器打开trace file查看。欢迎订阅,相信能扩展你的知识面,提升个人能力~原创 2023-09-23 22:19:03 · 229 阅读 · 0 评论 -
038_小驰私房菜_Camx添加自定义vendorTag
Camx添加自定义vendorTag。原创 2023-08-13 23:21:21 · 357 阅读 · 0 评论 -
037_小驰私房菜_Qcom Camx,使用GPU Node做Flip
高通CamX框架下,官方给我们提供了GPU Node,使用这个Node,可以做Memcpy、Rotate、DownScale以及Flip。一、Add “NodePropertyGPUCapsMaskType ” to Flip。原创 2023-08-13 23:17:09 · 243 阅读 · 0 评论 -
036_小驰私房菜_MTK-Camera驱动配置项winsize信息
在camera sensor驱动代码里面,我们会看到 winsize相关的模块需要填写。那这部分内容,具体对应的应该填写哪。我们来看下 SENSOR_WINSIZE_INFO_STRUCT结构体的定义,就可以看到上面每组数据所代表的意义。那 SENSOR_WINSIZE_INFO_STRUCT 结构体的每个变量又该如何去理解呢?原创 2023-08-13 23:16:00 · 359 阅读 · 0 评论 -
camera hal|如何学习一个新平台
hal层的工作,需要对camera有个整体的熟悉了解。很多东西是相通的,而且比较好的模式应当是,要学会去平台化,要学习的是平台的设计模式,而不是具体的平台。比如高通的camx框架,就有一套自己的日志打印规则,mtk的当然也有自己的一套。我自己目前从事的是android camera hal 的工作,工作上接触到的芯片平台要么是高通的,要么是mtk的。今天想聊聊的是,接触一个新的平台,我们怎样才能快速的入门?接触一个新平台,我个人比较推荐的方式也是,先对这个平台有个大体的了解,然后再细分模块去了学习了解。原创 2023-08-13 23:14:14 · 424 阅读 · 2 评论 -
035_小驰私房菜_Qualcomm账号注册以及提case流程
4) Cases下,可以查看已经提交的case,也可以提交新的case.1) 登陆个人账号后,点击Support → Cases。3) Home下可以查看到已经添加的case。, 采用公司邮箱注册个人账号;2) 点击 Cases。原创 2023-08-13 23:12:16 · 786 阅读 · 0 评论 -
034_小驰私房菜_[问题复盘] Qcom平台,某些三方相机拍照旋转90度
如果设置 overrideGPURotationUsecase = 1,相当于直接底下出图就给它旋转个90度,这个时候生成的jpeg exif信息是不会携带方向的。这样图片查看软件显示图片的时候就不会再去做旋转了。下面的截图内容我们可以看到,如果m_IsGpuNodePresent为false的时候,才会写orientation相关信息。Gallery这些图片浏览软件,在显示的时候,会去拿图片的exif信息的方向值来参考,来决定显示的时候是否需要做旋转。通过设置下面属性,可对jpeg编码方向做旋转。原创 2023-08-13 23:08:37 · 567 阅读 · 0 评论 -
033_小驰私房菜_Qcom平台8系列-Dump Jpeg & Jpeg Exif信息修改
里面,把JPEG_DUMP_TO_FILE 打开即可。dump生成的jpeg文件生成在 /data/vendor/camera/如果想客制化Jpeg 的exif信息,比如Jpeg的方向这些信息,可以在下面相关代码里面进行修改。有时我们想把hal这边拍照的jpeg格式数据直接dump出来对比看下。该怎么打开dump开关呢?jpeg相关代码逻辑在camx/src/swl/jpeg/ 路径下。原创 2023-08-13 23:05:43 · 241 阅读 · 0 评论 -
032_小驰私房菜_MTK平台拍照相关JpegNode Dump
输入上面命令之前,设备需要root和remount。命令输入后,需要把camerahalserver kill 掉才生效,设备重启后,命令实效。dump 完后,dump 出来的 buffer 都放到 /data/vendor/camera_dump 这个目录下了。setenforce 0 (注意:这里一定得setenforce 0,不然写文件没权限)192*144 是缩略图,2448 * 3264 是输入的buffer。在/data/vendor/目录下,创建JpegYuv文件夹。原创 2023-08-13 23:00:36 · 250 阅读 · 0 评论 -
031_小驰私房菜_MTK平台Camera基本流程,日志信息打印
Camera Device Manager 的 LOG TAG 是: mtkcam-devicemgr。//4)这个地方可以看到配流情况,分别是format 33和format 35,也就是拍照流和yuv流。Camera Devive Hal3 的 LOG TAG 是: mtkcam-dev3。然后更细节的日志打印,每个模块可能都有一些属性开关,这个需要以实际代码为准来确认。日志tag mtkcam-dev3,我们看下CameraDevice相关的日志。//1) camera 开始打开。原创 2023-08-13 22:59:36 · 413 阅读 · 0 评论 -
小驰私房菜_30_qcom根据关键日志信息,快速排查问题
全网最具价值的Android Camera开发资料。欢迎订阅~原创 2023-07-01 18:03:37 · 215 阅读 · 0 评论 -
小驰私房菜_29_app设置帧率相关接口
全网最具价值的Android Camera开发资料。欢迎订阅~原创 2023-07-01 17:59:00 · 197 阅读 · 0 评论 -
小驰私房菜_28_Qcom Camx相关名词
全网最具价值的Android Camera开发资料。欢迎订阅~原创 2023-07-01 17:57:09 · 241 阅读 · 0 评论 -
小驰私房菜_27_MTK 录像分辨率修改相关
全网最具价值的Android Camera开发资料。欢迎订阅~原创 2023-07-01 17:53:15 · 403 阅读 · 0 评论 -
小驰私房菜_26_YUV数据存在数据对齐,工具打开花图时如何处理?
全网最具价值的Android Camera开发资料。欢迎订阅~原创 2023-07-01 17:53:10 · 340 阅读 · 0 评论 -
小驰私房菜_25_Qcom_Camera 稳定性、性能问题 debug手段
在堡机测试中,遇到过一些问题,是由于当前系统性能问题,导致camera hal层直接触发了signal abort,然后出现so库crash。”,如果出现大量的frameMessage:requestId=0,则极大可能是驱动已经出现丢帧,这时需要抓kernel日志进一步确认。在堡机、压力测试等测试环境下,我们会遇到一些camera相关的稳定性问题,例如出现so库crash等,具体的问题,需要根据具体问题分析,这篇文章仅记录遇到的情况。注:本文章所用权归公众号:小驰成长圈,禁止转载宣传!原创 2023-06-26 22:45:25 · 447 阅读 · 0 评论 -
小驰私房菜_24_MTK平台修改camera数据方向
不过这个地方的 .dir和.orientation,会影响camera预览数据的方向。驱动这边,可以直接修改相关的寄存器,控制sensor输出的方向,类似的翻转和filp,都可以修改sensor寄存器实现。如上图所示,.port信息在最新的v4l2框架下,应该是没有用的,实际使用的port口是在dts文件中进行配置。上层的修改,只能是修改预览的方向。IMGSENSOR_SENSOR_IDX_MAIN 对应的是camera id 0,注:本文章所用权归公众号:小驰成长圈,禁止转载宣传!原创 2023-06-26 22:44:19 · 280 阅读 · 0 评论 -
小驰私房菜_23_Android Camera体系结构学习(一)
Android的启动包括linux内核的启动和android系统架构的启动。android系统里面有一个很重要的进程叫做init进程,init进程是linux系统中用户空间的第一个进程,进程号为1。当bootloader启动后,启动kernel,kernel启动完后,在用户空间启动init进程,再通过init进程,来读取。adb shell ps 看下camera相关的进程,可以看到有cameraserver和provider 2个进程(provider是Android 8.0之后才有的)。原创 2023-06-26 22:41:10 · 249 阅读 · 0 评论 -
小驰私房菜_22_Camera问题debug搜索关键日志信息
如下面日志打印所示,我们还可以看到是调用的Camera API 1还是Camera API 2.如下面日志所示,可以当前sensorMode是0,feature1是3,feature2是6.根据关键日志信息,能帮忙我们快速的定位和分析问题。我想查看当前sensor支持的size,那可以在dump 的信息中搜索。可以看到配了3路流,分别是format 33、34、35.里面的信息其实非常的丰富,可以专门找介绍。fornat 35 表示的是yuv流;2) framework层 日志。logcat 日志关键字“原创 2023-06-26 22:39:21 · 156 阅读 · 0 评论 -
小驰私房菜_21_高通AF对焦软件的基本流程
目前的super PD可以支持Advanced对焦模式,当conf满足需求时,只需要初次搜索就可以满足搜索流程。TOF + CAF由于距离是根据AF table计算的距离,有一点的误差,所以必须的存在fine search。4) 数据经过算法处理后将输出我们此时的对焦状态,根据此时的对焦状态进行操作马达进行对焦状态。3) camx软件流程会统计所需要的值,将算法所需要的信息输出给算法。2)如下面日志所示,我们可以看到STATS_AF 相关日志。中添如下内容,打开af debug日志。原创 2023-06-26 22:38:08 · 626 阅读 · 0 评论 -
小驰私房菜_20_fwk/hal 过滤分辨率
举个例子:比如我不想 APP选择到低于480P的分辨率,那我们上报给APP的分辨率里面,就把低于480P的分辨率过滤掉就好。(大部分的第三方APP,目前其实还是用的Camera1的API接口,类似扫一扫的功能,采用Camera1 API已经足够)我们知道,正常的app请求相应的预览/拍照等分辨率的时候,首先是会通过相关的API先查找相机本身支持的分辨率的。那针对上面的问题,我们能做的就是,给app反馈相机支持的分辨率的时候,对支持的分辨率进行过滤。实际开发过程中,我们可以会遇到类似的场景。原创 2023-06-26 22:35:59 · 108 阅读 · 0 评论 -
小驰私房菜_19_打印实时frame number 以及fps
在定位分析问题的时候,有些时候需要确认是否掉帧?到 vendor/etc/camera/下,然后重启设备,或者kill camera相关进程。里面就有个CalculateResultFPS 的方法,里面间隔10s会打印当前实时预览帧率。里面,process_capture_request就有打印。查看下vendor/etc/camera目录下,是否有。有时遇到预览卡顿的问题,我们想看下当前预览帧率。number的打印,很多地方都会有,如下代码所示,文件,没有就创建一个,然后在。原创 2023-06-26 22:34:57 · 179 阅读 · 0 评论 -
小驰私房菜_18_qcom_camx 日志系统
对应上面的表格,CamxLogGroupISP 对应的值是 1原创 2023-06-26 22:33:51 · 190 阅读 · 0 评论 -
小驰私房菜_17_mm-camera_Camera 打开、切换速度日志分析
------------------------------ 下面是日志片段分析 ---------------------------------在做性能分析的时候,摄像头打开、关闭、出图速度,这些都会是关键的点。PROFILE_CLOSE_CAMERA 是camera关闭。PROFILE_OPEN_CAMERA 是camera打开,// Camera 0 打开耗时0.564s。// Camera 1关闭耗时 0.062s。//Camera 0 关闭耗时0.057s。原创 2023-06-26 22:32:37 · 110 阅读 · 0 评论 -
小驰私房菜_16_高通设备开机模式
Android Camera开发。原创 2023-06-26 22:29:03 · 262 阅读 · 0 评论 -
小驰私房菜_12_mm-camera 必知必会01
这个针对不同的平台,路径也会有所不一样,有些平台是在/android/vendor/qcom/proprietary/devicetree-4.19/qcom/ 下 ,更旧一点的平台则是在 /android/kernel/msm-4.9/arch/arm64/boot/dts/qcom/下。这边修改的内容,编译版本后,内容对应的就是设备里面 /vendor/etc/camera/ 路径下的camera_config.xml,这个camera_config.xml文件。ii、isp 预览yuv dump;原创 2023-04-02 11:22:14 · 647 阅读 · 0 评论 -
小驰私房菜_15_mm-camera_高通HDR dump分析
如何dump,一般的思路是这样的,高通的文档基本都会有介绍相应模块的dump命令,文档里面会直接给出对应的dump命令。在应用界面找到hdr模式的开关,然后打开。(下图所示是google camera go apk 的hdr模式开关界面,不同的apk界面会不同,视实际情况而定)(选择了hdr模式后,google的camera go apk,预览界面的右上角,会出现如下图所示的HDR图标)//选择了hdr模式后,mode 值会设置为8,也就是hdr模式,这时拍照,会走这边的流程。4)hdr dump 命令。原创 2023-04-02 11:27:19 · 500 阅读 · 1 评论 -
小驰私房菜_14_mm-camera_查看stream流配置、选择的sensor分辨率
我们前面搜索logcat | grep "STREAM INFO"的时候,其实还会看到下面的日志输出。通过上面的日志,我们可以看到上层是配置了3路流,分别是 1024 * 768 、480 * 320 、320 * 240,那对应的format又是分别表示的什么呢?日志上很清楚的就可以看到,当前是选的res_idx 1这组分辨率。res_idx 1对应的就是驱动里面配置的Res 1这组分辨率(如下图所示)。关于查看走的sensor哪组分辨率配置,我们可以搜索关键字“Matched”,可以搜索到如下信息。原创 2023-04-02 11:26:36 · 580 阅读 · 0 评论 -
小驰私房菜_13_mm-camera 必知必会02
2).逐行曝光:Sensor通电后,感光二极管是一行一行开始工作的,你必须控制是哪一行曝光,然后计算总的曝光时间。因为一秒能接收的像素点以及一行存储的像素点是固定的,那接收到的像素点占的行数就可以体现曝光时间的长短,max_linecount越大,说明接收到的像素点越多,也就说明曝光时间越长。1).全帧曝光:Sensor通电后,所有的感光二极管是同时开始工作的,只要控制Sensor加电时间的长短,就能控制曝光时间了。这个可能在过its的时候,ltm会有影响,所以过its的时候,一般都是建议关闭。原创 2023-04-02 11:25:34 · 295 阅读 · 0 评论 -
小驰私房菜_11_mm-camera 添加客制化分辨率
简单来说,就是找一个和自己需要添加的新分辨率相近的分辨率。根据这个相近的分辨率的stall duration值计算出我们新添加的分辨率的stall duration值(如下图所示)。所以一般新添加了一组分辨率后,我们需要重新过下cts,然后应用上也需要确认下,能否选择到新添加的分辨率并正常出图。新添加的分辨率,如果stall duration值设的不对,会影响cts测试。2) 新添加分辨率的stall duration如何计算?#小驰私房菜# #mm-camera# #客制化分辨率#原创 2023-04-02 11:21:14 · 607 阅读 · 0 评论 -
小驰私房菜_10_camx Otp Dump
otp我们简单理解,就是sensor的寄存器里面,保存了sensor的一些信息,这些信息包括 af、awb、lsc、还有关于sensor 其它的一些基本信息。lsc 的第一张图,里面的 0x01CF,地址是0xFF,手册上规定了,0xFF是无效值。然后我们软件调试的时候,再按照模组厂的指导文档,把这些数据读出来。高通代码里面,otp dump是有开关的,mm-camera和camx框架的开关命令还不一样。可以根据下面特点做初步的判断,具体的最好给tuning的同事确认。1、otp dump的目的?原创 2023-04-02 11:20:30 · 697 阅读 · 1 评论 -
小驰私房菜_09_应用集成Raw域算法流程
4)目前在高通平台上,通过上面的map.getInputFormats() 接口,打印可以看到目前只支持 yuv420_888和private格式,没有我们想要的raw格式,咋办?这个PRIVATE格式不是raw格式的,那是什么格式的呢?1)从下面的代码段,我们可以看到,系统这边回去check input的配置信息,不过有个点得注意,如果是privilegedApp,则是可以跳过判断。算法处理的是camera的流数据,camera流比较常见的有yuv流,还有从sensor直接出来的raw流。原创 2023-04-02 11:19:29 · 1090 阅读 · 0 评论 -
小驰私房菜_08_camx 帧率相关问题如何debug
其实,高通代码里面,还有一些日志是根据特定的属性来控制的,代码路径是在camx/src/settings/common/下,比如下面这篇文章要介绍的和帧率相关问题的debug的时候,就会涉及到设置一些特定的属性来输出一些日志,这些日志等帮我们快速的排查定位问题。前面的一篇文章Camx 日志控制 主要介绍了camx下,如何打开各个模块的日志。,本来想翻译成中文的,不过试了下,还是英文的看着好理解一点,就照搬过来了。[小驰私房菜] [camx] [frame rate] [debug]好了,下面文章内容来自。原创 2023-04-02 11:17:28 · 574 阅读 · 0 评论 -
小驰私房菜_07_camx EIS使能
具体代码实现,可以参考高通晓龙相机app 代码来,这里只列出涉及到的关键内容。当然效果有没生效的,eis效果是需要tuning同事单独调试的。3) eisv2.0、eisv3.0分别是什么时候采用?如果eis使能了,我们会看到类似下面的日志打印信息。2)app打开eis,需要设置哪些request?预览是走的eisv2.0,录像走的eisv3.0。4)相关日志分析,日志上如何确认eis已经使能?#小驰私房菜# #Qcom Cax#//录像结束前,需要下发。原创 2023-04-02 11:19:09 · 590 阅读 · 0 评论 -
小驰私房菜_06_camx Camera facing、orientation信息
这样的话,很容易想到,同样的一个三维向量,代表了绕x,y,z的旋转值,先进行那个旋转是否对结果有影响呢?【扩展】其实在航空领域,pitch、yaw、roll的表述和在camera上的表述是不同的,至少从前面的代码上分析,我们可以看到,在camera上,pitch,yaw,roll在这里并不是常见的代表绕x,y,z的旋转值。绕三个轴的旋转值pitch,yaw,roll来自航空界的叫法,翻译为俯仰角,偏航角,翻滚角,非常形象。可以看到,pitch,yaw,roll在这里并不是常见的代表绕x,y,z的旋转值。原创 2023-04-02 11:18:18 · 368 阅读 · 0 评论 -
小驰私房菜_05_camx 添加水印信息
方式二:采用node的方式,将水印处理逻辑封装成独立的node,找到对应的usercase,在usercase里面添加水印处理的node。这时在代码这边 打印的pImageFormat->width、pImageFormat->height的值是1280、720。下面来介绍下,camx代码里面,其实已经给我们提供了添加水印的代码例子,具体代码逻辑在。比如:1280* 720的数据,因为字节对齐,实际上数据是1292 * 720,如果不转换成实际的对齐后的数据来处理,会发现水印信息是错乱的。原创 2023-03-28 23:36:17 · 599 阅读 · 0 评论