- 博客(194)
- 问答 (1)
- 收藏
- 关注
转载 第27讲 Camera Native FW API1和API2调用HAL3流程介绍
API2中,所有数据流都走BufferQueue,Camera3Device通知Camera3Stream buffer处理完毕后,会直接queueBuffer给BufferQueue,进而Consumer就会被通知到有Buffer上来了。非ZSL且不带AE Prepare Trigger的拍照流程如上图所示,整个拍照过程由CaptureSequencer来驱动,JpegProcessor收到拍照图像后,通知给CaptureSequencer负责回调给App。启动数据流 sensor不停采图。
2024-08-25 20:00:12
3
转载 第26讲 Camera Native FW Device架构介绍
上层使用API1时,Buffer送到Stream后,要么直接送给上层(Preview+Recording Stream),要么送给Processor取出Buffer回调给上层。Camera3Device 和 Camera2Device 都继承自,CameraDeviceBase ,他们的区别对 Camera2ClientBase 是透明的。从两个角度来看Camera Device架构。其实这个设计有点混乱,还有可以优化的地方。
2024-08-25 19:18:22
3
转载 第25讲 Camera Native FW Service和Client架构介绍
与CameraProviderManager交互,通过CameraProviderManager调用到底层HAL的实现(ICameraProvider/ICameraDevice)当调用 (switchToOffline) CameraDeviceClient 就会切换到 CameraOfflineSessionClient。Camera Client可以通过sCameraService静态属性访问回CameraService。实现BnCameraService接口,对外提供服务。
2024-08-25 17:41:27
4
转载 第24讲 Camera Native FW总体架构介绍
VNDK API 作用: 在vendor 分区通过自己的apk去写 camera。android 只支持 hal3。
2024-08-25 16:49:49
2
转载 第23讲 Parcel对象相关的AIDL详解
在AIDL的客户端和服务端通信的过程中,除了方法调用外,我们还需要传递一些数据,这些数据的类型都必须是parcelable的(需要实现。
2024-08-25 15:58:35
2
转载 第22讲 ICameraDeviceCallbacks.aidl详解
ICameraDeviceCallbacks是ICameraDeviceUser的回调类,通知AppCamera Device的状态每一个Capture Request的状态以及回调CaptureResult。
2024-08-24 21:44:45
1
转载 第21讲 ICameraDeviceUser.aidl详解
Camera app执行open camera后,Camera Java FW调用ICameraService的connectDevice方法获取到一个ICameraDeviceUser对象ICameraDeviceUser代表的就是一颗CameraDevice,后续的Camera操作流程就是基于ICameraDeviceUser对象。ICameraDeviceUser 就是下图中CameraDevice的一个抽象。
2024-08-24 21:30:32
1
转载 第20讲 ICameraServiceListener.aidl详解
需要注意的是,在客户端调用带有 oneway 修饰符的方法时,无法得知方法是否返回成功或失败,因为该方法会立即返回,而不会等待服务端响应。在 Android AIDL中,oneway 是一种修饰符,用于声明一个方法是单向的(one-way)。这种方式适用于客户端和服务端之间不需要进行同步通信的情况,例如通知服务端某项任务已经完成。因此,建议将 oneway 修饰符仅用于不需要接收服务端响应的方法。,而是立即返回并在后台运行,因此不需要等待方法执行完成。使用 oneway 修饰符声明的方法。
2024-08-24 20:56:45
3
转载 第19讲 ICameraService.aidl详解 - Android Camera Native Framework
ICameraService.Stub.asInterface 负责 通过 binder 建立与BnCameraService 的proxy。proxy 的构造方法,copy 了一份 BnCameraService的binder , 然后实现一些功能(通过 transact)三个模块: BnCameraService、BpCameraService、ICameraService。从ServiceManager获取到的binder是BnCameraService的实例。
2024-08-24 20:06:32
3
转载 第18讲 Camera Java Framework AIDL概述 - Android Camera Native Framework
Android 13 ICameraService.aidl代码如下。APP 可以调用java的接口也可以通过ndk 调研c++的接口。两个进程之间的 binder通信对于我们编程人员来说是透明的。
2024-08-24 17:08:07
7
转载 第17讲 初始化VendorTags, Flashlight和PerfClass - Android Camera Native Framework
VendorTagDescriptorCache是一个Manager,管理不同Provider里面的Vendor Tag Descriptor,VendorTagDescriptor维护管理所有Vendor Tags的Section、Name、Type,ID之间的关系。vendor tag discripter 的生成, 将vendor tag 转花为discripter。针对主后置和主前置,过滤掉<1080p的JPEG尺寸。针对主后置和主前置,过滤掉<1080p的JPEG尺寸。
2024-08-24 16:32:48
4
转载 第16讲 AIDL CameraProvider和CameraDevice初始化 - Android Camera Native Framework
与HIDL CameraDevice初始化逻辑一样,请参考第10-14讲的内容。
2024-08-21 00:45:22
13
转载 第15讲 cameraserver进程启动之与CameraID和CameraDevice相关变量梳理 - Android Camera Native Framework
【代码】第15讲 cameraserver进程启动之与CameraID和CameraDevice相关变量梳理 - Android Camera Native Framework。
2024-08-20 00:13:31
14
转载 第14讲 cameraserver进程启动之LogicalDeviceStatusChange详解 - Android Camera Native Framework
本讲我们介绍Logical CameraDevice的Status Callback是逻辑。新添加一个camera。
2024-08-18 20:22:20
13
转载 第13讲 cameraserver进程启动之PhysicalCameraDeviceStatusChange详解 - Android Camera Native Framework
在CameraServer初始化Provider过程中,HAL通知发生了physicalCameraDeviceStatusChange 或 cameraDeviceStatusChange。对于每个cachedstatus, 获取camera id,创建cached status, 通知camera service。什么时候会有Cache Status?
2024-08-18 19:50:13
18
转载 第12讲 cameraserver进程启动之CameraDeviceStatus概述
camera app 通过 camera service listener 接收 camera service 的消息。Case2: App能看到4颗Camera,实际有3颗物理Camera,Physical 2对App不单独可见。代码定义在:/hardware/interfaces/camera/common/1.0/types.hal。camera provider 通过callback 接收 camera HAL的的消息。Case1: App能看到5颗Camera,实际只有3颗物理Camera。
2024-08-18 18:18:56
11
转载 第11讲 cameraserver进程启动之HIDL CameraDevice初始化 修正CameraCharacteristics - Android Camera Native Framework
如果HAL不支持ANDROID_CONTROL_ZOOM_RATIO_RANGE,则通过ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM来构造一个Zoom Ratio Range,更新到ANDROID_CONTROL_ZOOM_RATIO_RANGE。如果ANDROID_SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE没有填,则获取ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE的值填进去。
2024-08-18 17:51:32
15
转载 第10讲 cameraserver进程启动之HIDL CameraDevice初始化addDevice流程
startDeviceInterface 调用provider的getCameraDeviceInterface_V3_x 获取interface的实例。第四步和第五步 主要是为了,vendor HAL是老版本system framwork 是新版本的情况。先判断是否为空、如果不为空直接返接口,否则 startDeviceInterface。
2024-08-18 16:40:32
27
转载 第9讲 cameraserver进程启动之HIDL CameraProvider初始化
调用ICameraProvider的getCameraldList方法获取到当前Proyider支持的Camera Device,解析出 Camera ID存放在mProviderPublicCameralds(解析规则解读)调用notifyDeviceStateChange通知Camera HAL进程,该功能在 Provider 2.5及之后的版本才有。原因: 有些API是新的版本才支持的,如果没有支持,调用起来就会crash。创建新的结构体变量,记录provider的信息。监听provider的通知。
2024-08-10 21:49:29
20
转载 第8讲 cameraserver进程启动之enumerateProviders概述
Android Camera HAL接口分成HIDL和AIDL两种,谷歌之后会强推AIDL。ICameraProvider管理多个ICameraDeviceICameraDevice管理和维护某一颗CameraDevice通过ICameraProvider获取到ICameraDevice通过ICameraDevice获取到ICameraDeviceSession初始化时,ICameraProvider和ICameraDevice的实例就会被创建起来,
2024-08-10 18:57:50
19
转载 第7讲 cameraserver进程启动流程概述
在TCP通信中,当通信的双方中的一方close一个连接时,若另一方接着发数据,根据TCP协议的规定,会收到一个RST响应报文,若再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不能再写入数据。new SERVICE 的时候 会创建一个binder对象并返回其指针 ,onFirstRef机制通过检查强引用计数来判断对象是否是第一次被调用。该信号的缺省行为是终止进程,因此进程必须捕获它以免不情愿的被终止。可以通过ps 命令查看有几个线程。查看服务是否注册成功。
2024-08-04 18:27:49
25
转载 第6讲 cameraserver manifest详解(下)
示例:/frameworks/av/drm/mediadrm/plugins/clearkey/aidl/android.hardware.drm-service.clearkey.xml。示例:/device/generic/goldfish/manifest.camera.xml。manifest.hal.version 用于指定使用的HAL版本,决定使用哪个版本的接口。格式: @MAJOR.MINOR::INTERFACE/INSTANCE。hal 接口的前缀 = 包名 + 接口名 + 实例名。
2024-08-04 16:59:14
21
原创 第六章 安全业务设计高级【44】Gatekeeper的介绍
CA 发送带加密的明文到TEETEE 对明文(data)加密得道密文(signature),密文填充到 password_handleTEE 返回 password_handle (含密文)给caca 将 password_handle(含密文) 保存。
2024-07-28 16:05:44
857
转载 第5讲 cameraserver manifest详解(上)
Android Vintf Manifest是用于描述Vendor(HAL) Interface对象的清单文件Vintf Manifest文件语法详解hl=zh-cnsystem 和 vendor 相互独立,Vintf Manifest 用来描述两个模块的通信方式
2024-07-14 21:10:41
35
转载 第4讲 cameraserver.rc详解(下)
使得一个task看起来像一个“大”任务,使CPU运行在高性能状态,加速任务的处理(尽量往频率高的CPU上调度),提升系统的性能表现。cpu.uclamp.min/cpu.uclamp.max 取值范围 0.00 – 100.00,Cgroup是用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘、输入输出等)。使其看起来像一个“小”任务,使CPU运行在高能效状态,以节省系统的功耗。对于一些后台任务,通过将cpu.uclamp.max设置为较小值,将cpu.uclamp.min设置为一个较大值,
2024-07-14 19:26:22
33
转载 第3讲 cameraserver.rc详解(上)
https://deepinout.com/android-camera-native-framework/cameraserver-process-rc-in-details-part1.html/system/core/init/README.md在线中文版:https://deepinout.com/android-system-analysis/android-bootloader/android-init-language.html以行为单位,空格分隔标记,通过反斜杠转义(或双引号)插入空格
2024-07-14 17:41:29
26
转载 第2讲 初识cameraserver进程
LSHAL 是一种设备端工具,可以列出向 hwservicemanager 注册的所有 HIDL HAL。Manifest文件用于定义Vendor Interface接口,供ServiceManager使用。rc(run command/run configure) 是进程启动时的配置文件。AIDL HAL可以通过dumpsys -l 或service list查看。方法1 查看bin文件属性。方法2 通过查看smaps。
2024-07-14 15:29:08
36
转载 第1讲 课程组织安排
基于Android 13持续更新讲解Android新版本的新功能。课程尽量覆盖到libcameraservice每一行Code。HwServiceHost 是华为自研的算法后处理进程。主要是讲解下图的 CameraServer。
2024-07-13 19:34:59
15
原创 第五章 安全应用开发基础【32】TEE环境:编写一个CA和TA程序
修改一下 optee_dir ,编译完成之后自动将ca/ta程序 复制到 optee打包文件夹下。添加目录,将 helloworld程序复制到 optee文件夹。进入源码目录,修改编译脚本。clone 脚本有点复杂。
2024-07-08 00:48:30
324
原创 1. Android手机大厂入职培训课介绍
2.2 对c/c++语言可以基本达到可以看懂即可,可以使用简单ubuntu命令。3.2 阅读分析源码不能要求自己每句都读懂,要先找整体轮廓主线走通。2.1 拥有Android应用开发经验,熟悉java语言。下与 native、Android Runtime交互。3.1 多思考应用层面的方法或者类,带着问题去学习框架。1.1 电脑安装Ubuntu16.04系统。1.2 电脑内存建议最少在16G。3.Framework自学建议。为什么要学Framework。1.3 硬盘200G以上。然后再重要地方抠细节。
2024-07-07 18:11:08
106
原创 第四章 软件架构(高级)【29】其它(内存管理/PSCI...)
Software Delegated Exception Interface (SDEI),即软件委托异常接口,是ARM架构中定义的一种机制,用于在非安全世界(Non-secure world)与安全世界(Secure world)之间进行系统事件的通知和处理。SDEI允许固件(通常是运行在安全世界的固件)在检测到系统级事件时,向非安全世界中的操作系统或应用软件提供通知,以便后者可以执行相应的错误处理或响应操作。通过sdei注册中断处理程序,中断在el3 secure 接收,non-secure处理。
2024-07-02 23:30:52
258
原创 ATF 快速学习
ATF( ARM Trusted Firmware) 一开始是专门为Armv-A 处理器开发的固件。分为 TF-A (Trusted Firmware-A) 、TF-M (Trusted Firmware-M)以前 不同的TEE 跑不同的 secure payload dispatcher,后来都同一跑spmd。bl1.bin、bl2.bin 为启动程序 (一些厂家使用自己的bootrom,不使用官方的)。带虚拟化的情况,SPM是一个轻量级的 hypervisor。ATF系统对应 多个bin程序。
2024-06-16 16:47:40
234
原创 armv7-trustzone
Armv7 安全模式和非安全模式使用两套寄存器,双系统切换无需使用 switch_cpu_context,不需要。user + privilege mode 一共6种模式。
2024-06-16 14:27:21
196
原创 Trustzone ARMv8/ARMv9
SCR 寄存器, 0 表示 安全,1表示非安全AXI总线, AWPROT [1] , ARPROT[1] , 0 表示安全,1表示非安全ARMv8el3 一定是secureNS=0 , EL0、EL1、EL2 是sercureNS=1 , EL0、EL1、EL2 是non-sercureARMv900 secure01 non-secureel3 root, 只有el3能操作SCR寄存器调用 switch cpu_contex一个core 有一个物理的mmu软件视角,mmu可
2024-06-02 20:03:24
238
原创 armv8&armv9基础概念
汇编指令 svc、hvc、smc (同步异常)触发异常,在各个执行状态来回切换。32和64也可以相互切换。4个安全等级来回切换。
2024-06-02 16:54:45
208
原创 4.12 Linux堆内存管理(2) 堆内存申请与释放
Linux堆内存管理(2) 堆内存申请与释放1. 学习的必要性加深对堆内存的理解系统设置与优化2. chunk通过malloc申请的内存都使用一个malloc_chunk的结构体表示Glibc/malloc/malloc.c2.1 已分配的chunk标志位:A: =0 表示从主分配区分配内存;= 1 从非主分配区分配内存M: =0 表示从Heap分配内存;=1表示从MMAP映射区分配内存P: =0 表示前一个chunk空闲2.2 空闲的chunk使用free释放掉的内存块
2024-05-19 18:48:58
661
空空如也
C++申请类对象数组内存大小的问题
2023-04-20
无终端的会话组长,如何重新申请打开一个控制终端。
2021-07-23
TA创建的收藏夹 TA关注的收藏夹
TA关注的人