1. 常用对象

  1. CameraManager 相机服务。用于获取相机对象和相机信息。
  2. CameraDevices 相机设备。负责连接相机、创建会话、生成拍摄请求,管理相机生命周期。
  3. CameraCaptureSession 相机拍摄会话。用于预览和拍摄。一个相机只能有一个活跃会话。打开新会话时,旧会话自动关闭。
  4. SessionConfiguration 拍摄会话配置。
  5. CaptureRequest 拍摄请求。通知相机进行拍摄。每个请求产生一个CaptureResult对象,并为目标Surface产生帧。请求可以通过addTarget关联若干个Surface,但它们必须是创建拍摄会话时使用的Surface的子集。
  6. CameraCharacteristics 相机信息。
  7. CaptureResult 部分拍摄结果信息。
  8. TotalCaptureResult 完整拍摄结果信息。
  9. ImageReader 图片读取器。接收图片的对象。
  10. Surface 底片。接收或展示原始影像的对象,是数据管道终点。可以绑定到SurfaceView(预览)、ImageReader(获取图像)或MediaRecorder(录制视频)。

2. 监听器

  1. CameraDevice.StateCallback 相机状态监听器。
  2. CameraCaptureSession.StateCallback 相机拍摄会话状态监听器。
  3. CameraCaptureSession.CaptureCallback 拍摄结果监听器。CaptureCallback只通知结果,图片需要从ImageReader.OnImageAvailableListener中获取。CaptureCallback和OnImageAvailableListener不保证发生顺序。
  4. ImageReader.OnImageAvailableListener 图片监听器。
  5. SurfaceTexture.OnFrameAvailableListener 帧就绪监听器。
  6. MediaRecorder.OnInfoListener​ 录制状态监听器。
  7. MediaRecorder.OnErrorListener 录制错误监听器。

3. 使用Camera2 API时涉及的线程/进程

  1. 相机服务进程 cameraserver系统进程(用户态服务),负责管理相机硬件资源、处理底层传感器控制和图像处理流水线。包括打开/关闭相机设备、配置会话、处理捕获请求和返回元数据,通过Binder与应用进程通信。
  2. 图像渲染线程 处理预览画面和拍照结果的渲染,通常与显示界面(如 SurfaceView/TextureView)绑定。
    1. SurfaceView 由系统单独创建渲染线程(非主线程),通过双缓冲机制高效更新预览画面。
    2. TextureView 依赖主线程或 OpenGL 线程渲染,需开启硬件加速,但更灵活(支持缩放、旋转)。
    3. 数据接收 通过ImageReader的OnImageAvailableListener在子线程中异步接收图像数据。
  3. 应用主线程 管理UI交互、权限请求、生命周期回调,并协调其他线程的工作。所有Camera2耗时操作(如打开相机、创建会话)需在后台线程执行,避免阻塞UI。通常使用HandlerThread配合Handler处理回调。通过Handler将相机事件(如 onCaptureCompleted)从后台线程转发到主线程更新UI。

4. CaptureRequest分类

  1. 重复请求。通过setRepeatingRequest()提交的请求会持续执行,形成一个持续请求链,直到被手动停止(stopRepeating())或被新请求覆盖。主要用于预览等需连续输出图像流的场景,例如实时显示摄像头画面。重复请求不阻塞后续请求,系统自动按帧率持续处理。但优先级较低,可被单次请求(如拍照)中断。中断后需要手动恢复预览。
  2. 单次请求。通过capture()或captureBurst()提交,执行后自动清除。适用于拍照、手动对焦锁定等需即时触发的操作。单次请求优先级高,会中断重复请求运行。请求提交后立即返回,拍摄结果通过回调异步返回。

在CameraCaptureSession中,可以连续且不等待拍摄完成就发送新CaptureRequest。但要注意避免请求过多超出流水线容量,导致帧丢弃或延迟。可以通过CaptureCallback监听状态,控制请求频率。通过CameraCharacteristics的REQUEST_PIPELINE_MAX_DEPTH可以得到流水线容量。

5. 拍摄一张照片需要确认下列资源或状态就绪

  1. 资源就绪。
    1. 获得授权。
    2. 相机CameraDevice就绪。
    3. 相机拍摄会话CameraCaptureSession就绪。
    4. 图像阅读器ImageReader就绪(提供Surface)。
  2. 3A状态就绪。
    1. 自动曝光AE收敛(AE_STATE_CONVERGED)或锁定(AE_STATE_LOCKED)。否则可能过曝/欠曝。
    2. 自动对焦AF锁定(AF_STATE_FOCUSED_LOCKED)。连续对焦模式下可以容忍ACTIVE_SCAN状态。否则可能主体模糊或焦点偏移。
    3. 自动白平衡AWB收敛(AWB_STATE_CONVERGED)。否则可能产生色偏。
  3. 其他状态
    1. 闪光灯充电完成(FLASH_STATE_READY)。否则可能导致闪光失败或亮度不足。
    2. 光学防抖OIS镜片稳定(LENS_STATE_STATIONARY)。否则可能防抖不生效。
    3. 降噪模式(NOISE_REDUCTION_MODE_HIGH_QUALITY)。否则可能降噪算法不生效。
    4. 传感器稳定性(SENSOR_SENSITIVITY)。

6. 中断3A算法的操作

  1. 切换控制模式CONTROL_MODE。
  2. 切换场景模式SCENE_MODE。
  3. 触发3A操作。
  4. 锁定或解锁3A参数。
  5. 停止预览流stopRepeating()。
  6. 请求中包含与当前3A参数冲突的3A参数。
  7. 重启相机或会话。
  8. 光线剧烈变化。

7. 拍摄请求处理路径

CameraCaptureSessionImpl.captureCameraDeviceImpl.captureCameraDeviceImpl.submitCaptureRequest检查Target和Surfacethrow "Each request must have at least one Surface target"throw "Null Surface targets are not allowed"stopRepeating() // 中断重复请求。ICameraDeviceUserWrapper.submitRequestList()ICameraDeviceUser.submitRequestList()// 通过ICameraDeviceUser.aidl调用C++代码。CameraDeviceClient::submitRequestListCamera3Device::captureListCamera3Device::submitRequestsHelperif (repeating) Camera3Device::RequestThread::setRepeatingRequestsList<sp<CaptureRequest>> mRepeatingRequests.push_back// 后续由Camera3Device::RequestThread异步处理。elseCamera3Device::RequestThread::queueRequestListList<sp<CaptureRequest>> mRequestQueue.push_back// 后续由Camera3Device::RequestThread异步处理。

8. 后台线程主循环

Camera3Device::RequestThread::threadLoop() {waitForNextRequestBatch();prepareHalRequests();sendRequestsBatch();Camera3Device::HalInterface::processBatchCaptureRequestsCameraDeviceSession::processCaptureRequestCameraDeviceSession::processOneCaptureRequestcamera3_device_t->ops->process_capture_requestcamera3_device_ops.process_capture_request// 通用实现。Camera::processCaptureRequestCamera::processCaptureBuffer
}

9. 使用DngCreator保存RAW_SENSOR影像的条件

  1. 拍摄完成,已经得到TotalCaptureResult结果。
  2. ImageReader.OnImageAvailableListener已经收到图片。

10. CaptureCallback用于跟踪拍摄请求处理进度

  1. onCaptureStarted 相机开始拍摄(曝光)
  2. onReadoutStarted 相机开始读取传感器数据
  3. onCapturePartial 拍摄获得部分结果
  4. onCaptureProgressed 拍摄获得进展
  5. onCaptureCompleted 单次拍摄完成
  6. onCaptureFailed 拍摄失败
  7. onCaptureSequenceCompleted 拍摄序列全部完成
  8. onCaptureSequenceAborted 拍摄序列中断
  9. onCaptureBufferLost

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

触控屏gt1947

比较器判断是否翻转&#xff0c;周期控制器负责控制周期&#xff08;period&#xff09;。sample采器有多个影子&#xff0c;每次采样查看是否到了翻转的时候。

DNS和ICMP

域名介绍在网络通信中&#xff0c;需要用到ip加port&#xff0c;但是ip并不方便记忆&#xff0c;于是我们常用域名来对应一个ip例如&#xff1a;www.baidu.com 对应 156.36.56.98&#xff08;随便写的&#xff09;com: 一级域名. 表示这是一个企业域名. 同级的还有 "…

2022 年 12 月青少年软编等考 C 语言六级真题解析

目录 T1. 电话号码T2. 区间合并T3. 扑克牌排序T4. 现代艺术思路分析T1. 电话号码 题目链接:SOJ D1137 此题为 2021 年 12 月六级第一题原题,见 2021 年 12 月青少年软编等考 C 语言六级真题解析中的 T1。 T2. 区间合并 题目链接:SOJ D1112 此题为 2021 年 9 月六级第三…

无锁队列:从零构建生产者-消费者数据结构

高性能无锁队列&#xff1a;从零构建生产者-消费者数据结构 问题的本质 生产者-消费者问题的核心挑战不在于数据传输&#xff0c;而在于协调。传统的锁机制虽然简单&#xff0c;但带来了三个致命问题&#xff1a; 性能瓶颈&#xff1a;线程阻塞和上下文切换优先级反转&#xff…

JAVA面试宝典 -《Spring IOC核心:Bean生命周期全解析》

文章目录&#x1f331; 《Spring IOC核心&#xff1a;Bean生命周期全解析》1️⃣ 引言&#xff1a;Bean 生命周期为什么重要&#xff1f;2️⃣ Bean 生命周期概览&#xff08;图示 简要说明&#xff09;3️⃣ 每一步详细解析&#xff08;源码理解 示例&#xff09;3.1 &#…

Python 类型注解实战:`Optional` 与安全数据处理的艺术

Python 类型注解实战&#xff1a;Optional 与安全数据处理的艺术 在 Python 开发中&#xff0c;类型注解&#xff08;Type Hints&#xff09;已经成为现代 Python 项目的标配。本文将通过一个真实的认证令牌获取函数 get_auth_token()&#xff0c;深入解析 Optional 类型的应用…

深入MyBatis:CRUD操作与高级查询实战

引言 在上一篇文章中&#xff0c;我们介绍了Mybatis的基础使用。 如有需要请移步查看&#xff1a; MyBatis入门&#xff1a;快速掌握用户查询实战https://blog.csdn.net/qq_52331401/article/details/149270402?spm1001.2014.3001.5502 今天&#xff0c;我将通过一个完整的…

Flink DataStream API详解(二)

一、引言 咱两书接上回&#xff0c;上一篇文章主要介绍了DataStream API一些基本的使用&#xff0c;主要是针对单数据流的场景下&#xff0c;但是在实际的流处理场景中&#xff0c;常常需要对多个数据流进行合并、拆分等操作&#xff0c;以满足复杂的业务需求。Flink 的 DataS…

Unity3D游戏线上崩溃排查指南

前言 排查Unity3D线上游戏崩溃是个系统工程&#xff0c;需要结合工具链、日志分析和版本管理。以下是详细的排查指南和关键步骤&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&#xff0c;希望大家可以点击进来一起交流一下开发经验呀&#xff01; 一、崩溃信息收…

DPDK性能优化实践:系统级性能调优的方法论与实战(一套通用的方法论)

性能优化的挑战与现实困境 在高性能网络处理领域&#xff0c;性能优化往往被视为一门“玄学”而非科学。许多开发者在面对性能瓶颈时&#xff0c;要么盲目追求单一指标的极致优化&#xff0c;要么采用"试错法"进行零散的局部调优&#xff0c;结果往往是投入大量精力却…

Docker的/var/lib/docker/目录占用100%的处理方法

文章目录 一、问题描述 二、解决措施 三、可能遇到的问题 问题1、问题描述&#xff1a;执行 sudo systemctl stop docker 命令时&#xff0c;提示 Warning: Stopping docker.service, but it can still be activated by: docker.socket 问题2、问题描述&#xff1a;执行 s…

【UE教程/进阶】Slate链式编辑原理

目录链式编辑操作" . "操作" "操作" [ ] "链式编辑 SNew().&#xfeff;[] 操作" . " SLATE_ARGUMENT(ArgType, ArgName) 宏 调用宏 SLATE_PRIVATE_ARGUMENT_VARIABLE(ArgType, ArgName) &#xff0c;在FArgument结构体中添加了变量…

将手工建模模型(fbx、obj)转换为3dtiles的免费工具!

文章目录1、工具下载2、使用说明3、详细说明命令行格式示例命令参数说明4、源码地址1、工具下载 百度网盘下载链接 选择最新版本下载即可&#xff0c;支持Linux和Windows系统 2、使用说明 1&#xff09;按住键盘winr键&#xff0c;在弹出的窗口中输入cmd 2&#xff09;点击…

FreeRTOS源码学习之内核初始化

目录 前言 一、主函数内容 二、osKernelInitialize ()内核初始化函数内容 三、IS_IRQ()宏定义中断检测函数内容 四、如果这篇文章能帮助到你&#xff0c;请点个赞鼓励一下吧ξ( ✿&#xff1e;◡❛)~ 前言 使用STM32CubeMX添加FreeRTOS进入工程之后&#xff0c;会自动在ma…

Docker—— 镜像构建原因

在现代软件开发和运维中&#xff0c;Docker已成为一种非常流行的工具&#xff0c;它通过容器化应用程序来简化部署过程。然而&#xff0c;默认的官方镜像往往只能满足基础需求&#xff0c;无法涵盖所有特定项目的具体要求。原因说明系统级改动无法通过 volume 实现修改用户、删…

锂电池自动化生产线的现状与发展

锂电池自动化生产线的概述锂电池自动化生产线是指采用自动化设备和控制系统&#xff0c;实现锂电池从原材料到成品的全流程自动化生产过程。随着新能源产业的快速发展&#xff0c;锂电池作为重要的储能元件&#xff0c;其生产制造技术也在不断进步。自动化生产线通过减少人工干…

java底层的native和沙箱安全机制

沙箱安全机制沙箱&#xff08;Sandbox&#xff09;安全机制是一种将程序或代码运行在隔离环境中的安全技术&#xff0c;旨在限制其对系统资源&#xff08;如文件系统、网络、内存、其他进程等&#xff09;的访问权限&#xff0c;从而降低潜在恶意代码带来的风险。其核心思想是“…

【分享】文件摆渡系统适配医疗场景:安全与效率兼得

根据国家信息安全相关法规要求&#xff0c;医院为了网络安全&#xff0c;大多会采用网闸等隔离手段&#xff0c;将网络隔离为内网和外网&#xff0c;但网络隔离后&#xff0c;医院的内外网间仍存在较为频繁的文件摆渡需求。文件摆渡系统则是可以解决跨网络或跨安全域文件传输中…

vscode 中的 mermaid

一、安装软件 Mermaid preview Mermaid support 二、运行命令 创建.md 文件右键选择 ​Open Preview​&#xff08;或按 CtrlShiftV&#xff09; 三、流程图 注意&#xff1a; 要md 文件要保留 mermaid 1. #mermaid-svg-nchqbvlWePe5KCwJ {font-family:"trebuchet ms"…

微服务引擎 MSE 及云原生 API 网关 2025 年 6 月产品动态

点击此处&#xff0c;了解微服务引擎 MSE 产品详情。