第27讲 Camera Native FW API1和API2调用HAL3流程介绍

https://deepinout.com/android-camera-native-framework/camera-native-fw-api1-api2-to-hal3-flow-intro.html

在这里插入图片描述在这里插入图片描述

1 API1->HAL3 参数设置流程

在这里插入图片描述

  1. 上层App调用Camera2Client的setParameters将参数送下来
  2. Camera2Client会将参数送给StreamingProcessor完成Parameters到CaptureRequest的转换
  3. 转换后的CaptureRequest (mPreviewRequest和mRecordingRequest)保存在StreamingProcessor中

2 API1->HAL3 startPreview流程

启动数据流 sensor不停采图
在这里插入图片描述

  1. 调用StreamingProcessor和JPEG/Callback/ZSL Processor的update Stream,创建Stream
  2. 再次更新Preview/Recording Request
  3. 调用StreamingProcessor的startStream,将Repeating request送给Camera3Device,Camera3Device执行ConfigureStream并submit request给HAL

3 API1->HAL3 参数回调流程

processFaceDetect 和 process3aState 通过 binder 通知上层
在这里插入图片描述

  1. FrameProcessorBase有一个线程不停问CameraDeviceBase是否有可用的CaptureResult
  2. 拿到可用的CaptureResult后送给FrameProcessor执行processSingleFrame,处理Face Detect回调和向Parameters更新3A State。

4 API1 -> HAL3 图像数据回调流程

4.1 API1 -> HAL3 图像数据回调流程 – 预览/录像

  • StreamingProcessor(预览/录像)
    通过 调用 StreamingProcessor的 onFrameAvailable 通知 上层的Consumer 去取 buffer queue 信息。
    在这里插入图片描述
  • CallbackProcessor
    这里讨论非setPreviewCallbackTarget方式回调预览Data,PreviewCallbackTarget方式跟上面StreamingProcessor流程一样

在这里插入图片描述

4.2 API1 -> HAL3 图像数据回调流程 – 拍照

Google创建了一个CaptureSequencer来维护拍照的状态机转换。
在这里插入图片描述

  • API1->HAL3 Non-ZSL && Non-AE Precapture 流程

在这里插入图片描述非ZSL且不带AE Prepare Trigger的拍照流程如上图所示,整个拍照过程由CaptureSequencer来驱动,JpegProcessor收到拍照图像后,通知给CaptureSequencer负责回调给App。

HAL 层采到照片时会回调 JpegProcessor的onFrameAvailable

4.3 API2->HAL3 控制流程与参数回调

在这里插入图片描述

  1. CameraDeviceClient收到上层的调用后,会对应调用到Camera3Device,进而调用到HAL层的接口
  2. FrameProcessorBase拿到Result Metadata后会回调给CameraDeviceClient,CameraDeviceClient再通过onResultReceived接口回调给上层

4.4 API2->HAL3 数据流回调

在这里插入图片描述
API2中,所有数据流都走BufferQueue,Camera3Device通知Camera3Stream buffer处理完毕后,会直接queueBuffer给BufferQueue,进而Consumer就会被通知到有Buffer上来了。

Consumer的 onFrameAvailable回调会被调用

相机API2是Android系统中用于控制相机硬件的标准接口,它提供了更灵活、更高效的相机控制功能。而app-fw-hal是Android系统中的相机HAL模块,它是应用程序和相机驱动程序之间的接口。在使用相机API2拍摄RAW照片时,其流程如下: 1. 打开相机:应用程序使用相机管理器(CameraManager)打开相机设备。 2. 创建相机会话:应用程序使用相机设备的创建会话方法(createCaptureSession)创建一个用于拍摄的会话。在创建会话时,需要指定输出目标,例如预览或拍照。 3. 配置相机:应用程序使用相机设备的创建请求方法(createCaptureRequest)创建一个请求对象,并通过该对象配置相机的参数。例如,设置相机的曝光时间、ISO等参数。 4. 配置输出目标:应用程序通过请求对象的addTarget方法将输出目标与请求对象关联起来。对于RAW照片,需要将输出目标设置为ImageReader。 5. 开始预览:应用程序通过会话对象的setRepeatingRequest方法开始预览。 6. 拍照:应用程序通过请求对象的capture方法拍摄照片。 7. 获取RAW数据:当拍摄完成后,ImageReader会回调onImageAvailable方法,应用程序可以在该方法中获取RAW数据。 8. 处理RAW数据:应用程序可以将RAW数据转换为JPEG格式并保存到文件系统中,或者进行其他的处理操作。 9. 关闭会话:应用程序使用会话对象的close方法关闭会话。 10. 关闭相机:应用程序使用相机设备的close方法关闭相机。 以上就是使用相机API2拍摄RAW照片的流程,其中app-fw-hal作为相机HAL模块提供了应用程序和相机驱动程序之间的接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值