- 博客(280)
- 资源 (4)
- 问答 (3)
- 收藏
- 关注
原创 Android屏幕旋转流程(2)
在Framework中,屏幕旋转功能主要是由WMS模块中的DisplayRotation对象来完成,在启动WindowManagerService过程中,创建DisplayContent对象时,会创建一个对应的DisplayRotation负责屏幕旋转逻辑,一个DisiplayContent对象对应一个DisplayRotation对象,或者说DisplayContent对象中持有一个DisplayRotation对象。否则设置成USER_ROTATION_LOCKED,由user_rotation决定。
2024-10-10 14:40:15
2397
2
原创 Android屏幕旋转流程(1)
SensorService通过SystemServer启动,后调用到hal kernel。I2C -->App过程:通过JNI调用到SystemSensorManager中的SensorEventQueue.dispatchSensorEvent,然后通过App向SensorEventQueue注册的mListener,来回调数据到App的onSensorChanged()方法。应用注册使用,通过enable和disable来控制注册和取消注册。后续文章所提及的屏幕旋转方向等都和这里事件分发相关。
2024-06-15 17:24:46
627
原创 新增节点增加权限
Linux 系统中采用三位十进制数表示权限,如0755, 0644。ABCDA-0, 表示十进制B-用户C-组用户D-其他用户0755->即用户具有读/写/执行权限,组用户和其它用户具有读写权限;0644->即用户具有读写权限,组用户和其它用户具有只读权限;
2024-06-04 14:12:01
1194
原创 MTK平台修改为横屏的常规改法
MTK原生代码一般都是为了手机做定制的,所以代码基本上都是竖屏手机使用的,如果现在有一个平台需要做横屏适配使用,如果不做横屏竖用的情况下,会发现相机这方面存在很多问题,比如三方相机会出现各种预览画面旋转,拍照画面旋转,视频通话旋转等。因为平板一般是横屏项目,而其屏幕也是横屏刷新展示的,但是绝大部分的三方Camera基本都是竖屏应用,并且没有做横屏兼容。既然我们无法修改三方应用的横竖屏配置,那我们只能从平台下手,我们可以将平台配置成横屏竖用状态,从而兼容三方应用。
2024-03-05 15:27:56
2187
1
原创 Camera 4Cell(Remosaic)简介
曝光数(EV)是由感光度和光圈大小共同决定的。EV,即Exposure Value,是反映摄影中曝光量的一个参数。在ISO为100、光圈系数为F1、曝光时间为1秒的条件下,曝光量被定义为0。如果曝光量减少一档(快门时间减少一半或者光圈缩小一档),EV值就会增加1;反之,如果曝光量增一档(快门时间增加一倍或者光圈增加一档),EV值就会减少1。当光圈大小保持不变时,ISO值的改变会直接影响到照片的亮度。ISO值越大,感光度越高,照片就会越亮,相应的EV值就越小。
2024-01-02 20:26:03
4018
1
原创 dumpsys相关解析
在新起的线程中,执行某个service的dump函数,如此我们就只要看某个service的dump函数实现就好了,注意我们这些处理逻辑目前都是在native层,但是我们知道安卓是建立在Binder通信的CS架构,该dump()函数的声明是在Binder类中的,也就是我们需要找到服务端的dump()函数的真正实现哪里,如果是dumpsys activity a,那么真正实现是在java层的ActivityManagerService中,其他服务同理。
2023-11-30 20:16:45
1277
原创 MTK平台电池信息查询
Android系统默认可通过dumpsys获取如下的电池信息:adb shell dumpsys battery。以上也可通过节点来查看信息:/sys/class/power_supply/battery,等其他属性值。当以上两者相乘是会得到其充电功率,上层软件以此基础确定当前是否为慢/快速充电。
2023-10-25 17:21:29
1083
原创 MTK平台闪光灯相关信息
如下修改为闪光灯校准:vendor/mediatek/proprietary/custom/mt6761/hal/flashlight/flash_tuning_custom_cct.cpp。可通过如上Code中的bStrobeBVTrigger字段来查看当前环境值和打闪阈值。这里我们以普通的mt6761为例,可以查看部分代码的设置。(B)kernel Log查看(3次打闪)(A)main Log查看(3次打闪)打闪几次可通过如下Log判断。另可通过如下源码查看调用过程。
2023-10-11 17:04:01
2516
原创 人脸解锁设备时出现相机报错
那引起发送request失败的原因是什么?从上面的Log可以看到,当超过7 frames之后,P1并不是真正的在出帧了,而是P1在做垫帧,我们在来看一下P2是否有接收到数据。现在问题的现象是:刚亮屏大概在2s以内对着人脸一般是能解锁的,但是超过2s之后在对着人脸,是无法解锁成功的。可以看出,相机的Hal P2流程也是有正常走的,而我们看一下P2是否有接收到数据。可以看出,相机的Hal P1流程是有正常走的,而我们看一下P1是否有接收到数据。从Log来看,相机模组是有正常上电的,表示相机是有正常启动的。
2023-09-21 09:39:58
1303
原创 MTK平台关机流程和原因(二)
将TARGET_AAPT_CHARACTERISTICS的值赋予ro.build.characteristics,而这个属性在Android编译完成后最终写入到/system目录下的build.prop文件。从上一篇可以看到,最终会调用此类的shutdown以及reboot等函数,我们来看一下这些函数的实现。而具体是如何区分phone,TV,tablet等平台的,因为会根据系统的如下属性。由于这段代码融合了phone,TV,tablet等平台,所以字符串有不同的区分。
2023-08-01 14:47:52
1415
原创 MTK平台关机流程和原因(一)
可以看到调用的是GlobalActionsManager接口的方法,而GlobalActionsManager接口在如下接口中定义。上面通过SystemUI后最终会调用到StatusBar Service这边,接下来看一下Service这边如何调用。长按电源键会弹出如上界面,点击按钮会触发到SystemUI当中的如下逻辑。可以看到,进而就调用到ShutdownThread相关的类中。最终调用到远程服务StatusBarService的方法。并最终调用到了如下实现。
2023-07-04 10:11:40
1418
1
原创 MTK平台的SWT异常的简单总结(3)——常见SWT/ANR类型
线程状态为"Native",确认callstack中有"Process.zygoteSendArgsAndGetResult",对于Zygote fork进程时卡住的问题,一般是由于底层memory问题引起的,请检查是否有memory不足或者memory leak的问题。线程状态为"Native",根据native方法找到对应模块,进一步确认该native方法为何执行时间过长,例如是否等待硬件返回或者硬件本身存在问题等。无论是通过Tid来查找,还是通过locked锁来定位,都可以最终定位到问题代码的部分。
2023-06-15 10:32:02
1940
原创 MTK平台的SWT异常的简单总结(2)——SWT原理和分析
Android user/userdebug版本因受Security限制,导致在M版本之后打开mtklogger也只能抓到fatal db,不能抓普通的ANR db,O版本开始默认不会抓取第三方APP的ANR db。当SWT的两次有效trace打印的call stack完全一样时,才认为是block issue,重点从call stack来入手分析,常规分析流程如上图。SWT —— (swt_time – swt_timeout – 10s)~ (swt_time + 10s),之间的两次trace。
2023-06-05 16:39:19
1887
原创 Android跨进程通信(二)——应用服务(2)
本篇文章介绍如何通过App添加一个系统服务,服务端的App通过Android.mk编译进系统,来完成同Client端的跨进程通信。
2023-03-20 19:37:19
1619
原创 Android跨进程通信(二)——应用服务(1)
本篇文章介绍如何通过App添加一个系统服务,服务端的App作为正常应用使用,来完成同Client的跨进程通信。
2023-03-16 20:58:03
1259
原创 Android跨进程通信(一)——RemoteCallbackList的使用
在做FW时,经常用到RemoteCallbackList,是线程与线程之间交流的的重要工具,他的主要作用就是把多个callback保存到列表里,在合适的时机同时回调,也可以防止重复的调用相同的任务,只保证你需要的一个结果回调。
2023-03-16 20:51:54
1706
原创 Camera/Lens流程(三)——Sensor Driver Check
如上打印的是从sensor driver中query出来的配置信息,sensor index:0代表是main camera,Scenario id:0代表preview mode,grab window size为2096*1552。其中mipi_pixel_rate代表sensor实际的mipi_pixel_rate,请check是否与sensor driver中配置的一致,同时确认sensor吐data的实际Vertical_blanking是否满足平台要求。
2023-03-14 15:54:49
2408
原创 Android事件拦截(3)——系统拦截和应用拦截
本文主要分析触摸事件和按键事件在不同阶段被拦截的流程,总结在不同阶段不同方法中返回值的含义。
2023-03-06 09:39:28
4502
原创 动态隐藏导航栏和状态栏
通过以上属性来隐藏状态栏和导航栏,发现上下拉还是会出现状态栏和导航栏,现在的需求是不要出现状态栏和导航栏。可从如上回调函数位置屏蔽相关滑动事件,从而实现不在出现状态栏和导航栏。
2023-02-23 09:54:36
2089
原创 Framework阻止应用安装
在系统开发中,如果不需要某个应用,最好的情况下就是将应用不参与编译,但是这样修改有时候需要修改的代码较多,这里有一个便捷的方法可以让应用不进行安装。系统在开机时会在PMS当中遍历和解析所有应用并进行安装,此时我们可以对其进行过滤操作。
2023-02-01 14:52:11
1349
原创 Android监听UEvent之UEventObserver分析
初始化完之后,进入一个while的死循环,不停的调用native层的nativeWaitForNextEvent()函数来获取Event事件,然后将Event事件转换成message,再通过sendEvent()将message事件传递给外设对应的Observer。
2022-12-13 10:46:47
3726
1
原创 CTS测试中SurfaceViewPreviewTest#testPreviewFpsRange项
本题主要还是sensor曝光时间问题,可调整tuning效果中和曝光相关的参数来进行修正。
2022-12-08 15:14:04
1637
原创 MTK平台如何通过adb动态读写sensor寄存器的值
本篇文章实作环境是:调试效果或debug sensor register时需要动态读写sensor寄存器应该怎样修改代码?目前参考的代码是Kernel-4.19,具体每个kernel版本可能都差不多,这里我们只看Main Sensor。
2022-12-06 16:36:40
1877
原创 MTK平台设置不同的预览Size
这边文章记录的是1280x800=1.6屏幕分辨率预览窗口大小,sensor预览实际出图为4656x3496。
2022-11-24 17:38:10
2221
原创 MTK平台Camera人脸识别算法灵敏度参数
当我们在使用MTK平台的相机时,如果默认使用MTK自带的人脸算法,可能会出现人脸识别不准确或者误识别等情况,这个问题MTK也提供了部分参数可供修改,我们接下来看一下应该如何修改。以上介绍的参数是允许调整的,其它参数一般不建议去调整。
2022-11-22 14:47:46
2006
原创 Camera ITS当中的test_lens_shading_and_color_uniformity测试
Color Shading测试原理:拍摄一张大图,把整幅图像等分成若干区域,然后算出这些区域中R/G和B/G的值,以中间区域为基准,用其他区域的比值和中间区域的比值相比,得到一个比值,这个比值越接近1越好,最大差异不能超过20%,否则判定失败。Lens Shading测试原理:拍摄一张大图,把整幅图像等分成若干区域,然后算出这些区域的亮度值,以中间区域为基准,用其他区域的亮度值和中间区域的亮度值相比,得到一个比值,这个比值越接近1越好,最大差异不能超过20%,否则判定失败。我们先看两种测试失败保存的图片。
2022-11-04 16:30:56
1587
1
原创 MTK平台Metadata的加载(四)—Q版本后
该目录下的文件结构如下所示,除了config_static_metadata_project.h 这支文件,其他文件都是 STATIC_METADATA2_BEGIN(DEVICE,TYPE,COMMON)类型,以 DEVICE 开头的都是 Android P 的Metadata加载方式,只有Android Q的加载方式没有加载到数据时才会使用。impBuildStaticInfo_v1_overwrite()提供强制修改 metadata 的接口,加载的类型是[MOD_OVERWRITE]。
2022-09-29 13:59:00
2519
原创 MTK平台Metadata的加载(三)——其他Static和Request加载
(1)加载其他Static Metadata在 MetadataProvider.cpp 中的 constructStaticMetadata()进行 static metadata 加载。(A)MetadataProvider::onCreate()//vendor/mediatek/proprietary/hardware/mtkcam/utils/metastore/metadataprovider/MetadataProvider.cppstatus_tMetadataProvider:
2022-09-28 20:40:22
1800
1
原创 MTK平台Metadata的加载(二)——Sensor和3A相关Static加载
Camera static metadata 在 camerahalserver 进程启动时就会进行加载。(1)CameraService的启动camerahalserver: 透过 init service 启动。(A)Android.mk文件ifneq ($(MYKCAM_USE_LEGACY_HAL_API),yes)#-----------------------------------------------------------ifeq ($(MTK_CAM_LAZY_HAL),
2022-09-28 20:00:16
4025
原创 MTK平台Metadata的加载(一)——Metadata介绍
(1)Metadata的分类Camera API2/HAL3 的核心为 per-frame control,为了达成这个目标产生了 metadata 的机制,metadata一共分成三类 constrol、dynamic 以及 static。Control(request):当APK query出static metadata 后,可以从中作自己想要的控制。(每一帧都可以设定,会绑定对应的 image callback)。Dynamic(result):当 Hal层收到 control metad
2022-09-28 17:27:48
2801
8
原创 Android中几种常见的播放声音组件
这里要说到MediaPlayer和AudioTrack之间的联系,MediaPlayer在framework层也实例化了AudioTrack,其实质是MediaPlayer在framework层进行解码后,生成PCM流,然后代理委托给AudioTrack,最后AudioTrack传递给AudioFlinger进行混音,然后才传递给硬件播放。比较常见使用AudioTrack,CPU占用率低,内存消耗也比较少。适合播放比较短的音频片段,比如游戏声音,按键声音,铃声片段等,并且可以同时播放多个音频。...
2022-08-17 20:56:38
2763
1
Eclipse 反编译插件
2013-03-23
Android的GridView滚动速度计算
2015-09-17
有没有人可是实现以下图片中红框的效果,图片可以滚动
2015-08-06
关于Android方面的json解析问题
2014-01-13
TA创建的收藏夹 TA关注的收藏夹
TA关注的人