Camera_API2_notes

Camera API2 使用说明 Camera API2 开发介绍 阅读详情

Camera API 2 学习记录

本文是学习camera API 2 过程一些的记录。文档大部分来自官网,代码基本上来自Google Camera2Basic。
在这里插入图片描述

1. 几个主要部分

CameraManager - 枚举,查询camera 数量,open camera 设备

CameraDevices - 代表单个相机,创建会话或请求

CameraCaptureSession - 要从摄像头拍照或是预览图像,应用程序必须首先使用createCaptureSession(List outputs, CameraCaptureSession.StateCallback callback, Handler handler) 创建一个带有一组输出Surface 的camera capture session。
@param outputs The new set of Surfaces that should be made available as targets for captured image data.
mCameraDevice.createCaptureSession()

CaptureRequest - 应用需要构建一个CaptureRequest, 它定义了所有拍照参数,同时这个Request 还列出了哪些配置的输出Surface 应该用作此capture 的目标。
@param outputTarget Surface to use as an output target for this request
每个Surface必须预先配置适当的大小和格式(如果适用),以匹配摄像机设备可用的大小和格式。 目标Surface可以从各种类中获得,包括SurfaceView,SurfaceTexture via Surface(SurfaceTexture),MediaCodec,MediaRecorder,Allocation和ImageReader。
(后面单独写一篇介绍Surface 的)。

CaptureResult - 包含capture 的部分配置信息,sensor 焦距闪光灯信息和最终的输出buffer。

2. 添加额外的预览

2.1 复制一个主摄的预览

在createCaptureSession(List outputs, CameraCaptureSession.StateCallback callback, Handler handler) 的第一个参数,添加一个surface 到list,这个surface 直接由view 上的TextureView 而来,同时这个surface 需要通过到CaptureRequest.Builder 的addTarget 方法添加到preview 的request 中去,之后预览内容将会直接显示到该控件上。
在这里插入图片描述
参考代码: https://github.com/hcz017/android-Camera2Basic/tree/add_another_main_preview

2.2 添加另一个格式的预览数据并显示

上一种情况我们直接从view 种拿到surface,并没有对这一路预览数据的格式做设置(默认为PRIVATE 格式),如果我们有格式的要求,就需要通过ImagerReader 来设置。

mSecImageReader = ImageReader.newInstance(secLargest.getWidth(),
                            secLargest.getHeight(), imageFormat, /*maxImages*/2);
                    mSecImageReader.setOnImageAvailableListener(
                            mOnSecImageAvailableListener, mBackgroundHandler);

之后要把这个ImagerReader 的surface 添加到preview 的request.builder 和createCaptureSession 的surface list 中去 mPreviewRequestBuilder.addTarget(mSecImageReader.getSurface()); 之后通过onImageAvailable 的回调就可以取得实时预览的数据,通过格式转换把数据转换成bitmap 就可以draw 到TextureView 上(从性能上考虑这不是最优方案)。
在这里插入图片描述
如果添加到拍照的request 中去,则会在拍照时候回调onImageAvailable,同时拍两种格式的照片就是这样做到的。
参考代码: https://github.com/hcz017/android-Camera2Basic/tree/sec_format_preview

3. 水平镜像翻转前置摄像头预览

在API 1 上,调用setFlip() 防范传入想翻转的方向就可以了,在API 上没有对应的方法,在系统源码中系统会根据摄像头的朝向决定在屏幕上渲染时是否翻转图像内容
SurfaceTextureRenderer.java

drawFrame(mSurfaceTexture, holder.width, holder.height,
                            (mFacing == CameraCharacteristics.LENS_FACING_FRONT) ?
                                    FLIP_TYPE_HORIZONTAL : FLIP_TYPE_NONE);

那么在API 2 上我想到的一个方法便是,在渲染到屏幕上之前截取预览数据,把图像内容变换后再渲染显示。

这里就用到了自定义的 GLSurfaceView,把GLSurfaceView 作为显示预览的控件,GLSV 的surface 添加到builder 和createCaptureSession 的surface list,之后通过修改映射点的位置,把左右调换顺序实现预览图象的水平翻转。这里没有用到ImageReader,如果需要其他格式或者二次处理需求可以使用ImageReader 获得数据后再绘制到GLSurfaceView 上。
在这里插入图片描述
参考代码: https://github.com/hcz017/android-Camera2Basic/tree/mirror_flip_front_camera_preview

4. 问题

在onImageAvailable 回调中,用完image 后及时close image。另外如果时多线程的话,注意view destory 和停止渲染预览的先后关系。有可能会出现view 已经销毁了但是还在试图渲染新的图像,此时会报错。

参考链接

android.hardware.camera2

CameraCaptureSession

CameraDevice

Android Camera旋转角度总结 开发过Android自定义相机的朋友们估计都被相机的各种乱七八糟的旋转角度适配坑过,本文将对Camera的各种角度进行解析。 一、适配目标 根据相机旋转角度以及屏幕显示旋转角度选择相机预览数据显示到View上的预览数据显示旋转角度,使眼睛直接看到的真实画面和手机屏幕中显示的画面效果相同。 **相机旋转角度:**相机成像相对于手机的旋转角度,若设备已经安装上了相机,那么该相机相对于设备的旋转角度... 阅读详情

相关推荐

Langchain4j 文档处理实战:从加载到分割的完整流程解析

本文详细解析了使用Langchain4j进行文档处理的完整流程,涵盖从文档加载、解析到分割的核心步骤。通过实战代码示例,重点介绍了如何利用文档分割器将大文档切割为适合大语言模型处理的片段,并提供了参数调优与避坑指南,帮助Java开发者高效构建AI应用的数据处理基础。

smartcontract5的博客 542

【Android Camera2】玩转图像数据 -- NV21图像旋转,镜像,转rgba代码分析,性能优化

【Android Camera2】玩转图像数据 -- NV21图像旋转,镜像,转rgba代码分析,性能优化

weixin_41937380的博客 5238

RM机器人麦轮底盘实战:从零搭建到PID调参全记录(附避坑指南)

本文详细记录了RM机器人麦轮底盘从零搭建到PID调参的全过程,涵盖硬件组装、开发环境搭建、底盘解算和PID调参等关键步骤,并附有实用的避坑指南。特别针对麦轮控制、底盘解算和电机调试等核心问题提供了专业解决方案,帮助开发者快速提升机器人性能。

bush的博客 372

Android Camera API2架构和流程介绍

Camera API2架构和关键流程

qq_37695230的博客 2852

详述字符集与汉字编码

字符集与字符编码是文本处理的基础概念。字符集定义字符集合(如ASCII、GB2312、Unicode),字符编码则规定字符如何存储为二进制数据。汉字编码经历了从区域化(GB2312、GBK、BIG5)到全球化(Unicode)的演进,Unicode通过UTF-8、UTF-16等编码方案实现跨语言兼容。UTF-8因兼容ASCII、节省空间且无乱码风险,成为中文互联网的主流编码。正确处理编码问题需统一标准、明确声明格式,并注意生僻字的特殊处理。

零零发不爱ai的博客 805

欧姆龙PLC EIP通讯配置方法

欧姆龙EIP通讯配置方法

weixin_59671695的博客 6137

Camera API2 基础流程_openCamera(frameworks)

Camera API2 openCamera流程

qq_37695230的博客 1421

工业组态软件Intouch(单机版)入门{第一篇}

通俗来讲Intouch就是一个能将PLC里的信号显示在画面上的软件。

weixin_41571357的博客 1万+

Android Notes(06) - Camera

写在http://hukai.me/blog/android-notes-06-camera/

迁移到http://hukai.me 7681

BIDS数据存储格式介绍与dcm2bids安装与使用

BIDS格式&dcm2bids安装与使用

machinelearning_er的博客 7317

海思Hi3519A开发:DSP开发指南

通过创建DSP项目、实现算法、编译调试等步骤,开发者可以充分利用Hi3519A芯片集成的DSP,实现各种音视频处理功能。通过以上示例,我们可以看到在Hi3519A开发平台上进行DSP开发是一项强大而灵活的任务。在调试过程中,可以使用调试工具提供的功能,如断点设置、变量查看等,以便更好地理解和优化DSP算法的执行过程。在Hi3519A开发平台上,我们可以利用DSP的高性能计算能力来加速这些算法的执行。在实际的DSP开发中,算法的实现可能更加复杂,需要结合具体的项目需求进行。3.2 DSP算法实现。

QoTypescript的博客 1495

高通Camera升级基线全解析:驱动、HAL与Tuning适配实战指南

在移动平台Camera开发中,基线(Baseline)不仅是代码分支,更是一套经过验证的软件栈行为契约,涵盖kernel驱动、HAL层逻辑、效果库、Tuning参数与固件。升级新基线意味着将整个Camera子系统从旧契约迁移到新契约,过程涉及驱动适配、配置迁移、算法兼容与效果回归。理解基线变更的原理,能帮助工程师快速定位问题。这项技术在手机、平板及物联网设备的高通平台Camera项目中有广泛需求,尤其在多摄像头、三方算法集成和功耗优化的场景下,规范升级流程可显著降低开发风险。本文从概念拆解到实操步骤,梳理了

weixin_34242509的博客 338

手机VPN的连接方法分享

6、返回到VPN页面,可以看到刚刚新添加的VPN,点击开启VPN后面的开关。5、在打开的添加VPN的页面中输入VPN的信息后点击右上角的“保存”按钮。7、待VPN开关开启后,可以看到添加的VPN正在连接的提示信息了。2、在打开的小米手机设置页面中点击“更多连接方式”的菜单项。3、然后在打开的更多连接方式页面中点击VPN的菜单项。4、在打开的VPN设置页面中点击“添加VPN”的按钮。1、首先在手机屏幕左右的滑动,找到手机的设置图标。

惠惠软件 3万+

Autopilot-Notes:CARLA仿真平台入门到精通的6个步骤

想要掌握自动驾驶仿真技术吗?CARLA仿真平台是学习自动驾驶算法的最佳工具!🚗 作为开源自动驾驶仿真平台,CARLA提供了完整的仿真环境,支持从传感器模拟到算法测试的全流程开发。本文将带你从零开始,通过6个简单步骤快速掌握CARLA仿真的核心技能。 ## 为什么选择CARLA仿真平台? CARLA(Car Learning to Act)是由英特尔实验室开发的开源自动驾驶仿真平台,已成为学术

gitblog_00129的博客 370

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Qwen 3.6-Max-Preview:API层上下文与多模态协议重构实战

大语言模型的上下文窗口与多模态理解能力,是企业级RAG、工业图纸分析和医疗报告生成等场景的核心瓶颈。其技术原理不仅依赖模型参数规模,更取决于API层的token调度策略、图像语义对齐机制及OpenAI兼容性深度。Qwen 3.6-Max-Preview并非传统模型升级,而是通过动态上下文管理、多角度图像特征提取(multipleangles)和响应格式熔断等协议级重构,显著提升长文档处理稳定性与结构化输出可靠性。它适用于需零改造迁移OpenAI生态、高精度解析PDF/工程图/分子结构等复杂输入的工程实践场景

weixin_30788239的博客 368

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

手工银饰定制微距影像工坊:鸿蒙 Camera Kit 影随人动讲解跟拍与三档手动对焦落地

本文介绍了基于 HarmonyOS 的银器工坊应用,采用 ArkUI 声明式框架与 Camera Kit,实现影随人动跟拍与手动对焦功能,结合四 Tab 界面和深色主题,解决银饰拍摄中的跟拍与对焦痛点。

kathy_tan的博客 463

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

《Training:Permissions Usage Notes》

注:本人非专业翻译人员,编写此博客只是为了自学使用,如有疑问,请参考官方文档。 一个应用程序很容易淹没拥有权限请求的用户。 如果用户发现应用程序令人沮丧,或者用户担心应用程序可能在使用该用户的信息,那么用户可能会避免使用该应用程序或将其完全卸载。 以下最佳做法可以帮助您避免这样糟糕的用户体验。 一、考虑使用意图 在许多情况下,您可以通过两种方式为应用程序执行任务。

一世豁然的专栏 465

foobox-cn:foobar2000 皮肤主题与播放器界面美化完整指南

foobox-cn 是 foobar2000 的 DUI 皮肤配置包,一次安装即得到带播放列表、艺人信息、歌词和频谱面板的现代三栏界面,适合想改善播放器观感、又不想手动拖面板的用户。 ## 为什么需要 foobox-cn:原生 DUI 的界面痛点 foobar2000 的性能口碑一直不错,但原生默认用户界面(DUI)停留在功能优先的年代:面板要自己拖出来摆位置,配色陈旧,曲库大了之后界面显得简

gitblog_00088的博客 476

插件如何自救:dsh-bili-scroll的uv自动下载与依赖自动修复机制

**dsh-bili-scroll**(中文名「刷B站」)是一个 DSH 插件:每天替你刷一轮 B站,读字幕挑出值得看的视频、写一份日报,特别值得的还会 @ 你。新手装它最大的坎往往不是插件本身,而是环境——没装 Python、GitHub 连不上、宿主 profile 差异导致依赖缺失。这篇文章带你拆解 dsh-bili-scroll 的两套**自救机制**:**uv 自动下载**与**依赖自动

gitblog_00531的博客 352

GPT-Image-2로 UI·소셜 미디어 목업을 만드는 프롬프트 가이드 — awesome-gpt-image-2-API-and-Prompts 90+ 실전 사례 완전 해설

본 가이드는 오픈소스 저장소 **awesome-gpt-image-2-API-and-Prompts**의 [UI 및 소셜 미디어 목업 사례 문서](https://link.gitcode.com/i/7fc2f066b7ee3bafcedceee46f065c29)에 수록된 90여 개 실전 프롬프트를 유형별로 정리·해설한 기술 문서입니다. UI 디자인 시스템 생성, 라이

gitblog_00022的博客 464

MiniMax H3 视频提示词规范:T2VA 到 L2VA 四类任务从规则到成稿的完整写法

本文是 MiniMax H3 的最终提示词写作规范,覆盖 T2VA、I2VA、FL2VA、L2VA 四类任务的固定指令行、三核心字段结构、镜头运镜与对话声音写法,并给出四个可逐字提交的完整案例。MiniMax H3 会同时生成画面与声音,提示词必须把可见与可听两侧都写清楚,这份规范回答的正是"写什么、按什么格式写、写完如何自检"三个问题。 ## 1 为什么提示词必须同时交代画面与声音 H3 输

gitblog_00637的博客 433

GPT-Image-2 角色设计提示词实战指南:从官方设定资料卡到多角色一致性(基于 awesome-gpt-image-2-API-and-Prompts)

> 本文以 [cases/character_pt.md](https://link.gitcode.com/i/f663cb61d00b999b402046326d11aef5)(葡萄牙语角色设计案例合集)为主体,结合 [README_pt.md](https://link.gitcode.com/i/0bb4c8a9f51516c8cc751c50e840e116) 中的 API 说明与仓库的

gitblog_00297的博客 431

Omarchy 完整安装指南:从刻录 ISO 到加密首启,4 条安装路径全解

Omarchy 是一套基于 Arch Linux 的现代 Linux 发行版,官方定位为 "Beautiful, Modern & Opinionated Linux"——美观、现代、且有自己的主见。这篇文章带你完成一次完整的 Omarchy 安装:如何刻录引导盘、如何回答配置向导、默认全盘加密到底由哪些脚本支撑,以及代他人装机、关闭加密、Windows 双启动、VM 无人值守部署四条进阶路径。读

gitblog_00062的博客 229

MiniMax H3 视频生成 Prompt 怎么写:3 类输入场景拆解 + 5 个翻车点对照

画面糊、动作抽帧、嘴型和台词对不上,新手用 MiniMax H3 出片翻车,多半卡在 Prompt 没写到位。MiniMax H3 能生成最高 2K、15 秒、带原生立体声音频的视频,下面按输入场景把视频生成 Prompt 的写法拆开讲。 ## 先立边界:Prompt 里能"喂"进什么 给 H3 写 Prompt,像给导演提需求:不是丢几个形容词,而是把景别、运镜、动作时间点、声音一层层交代清

gitblog_00407的博客 975

Rustrak结构化日志追踪:只需2行代码接入Sentry SDK日志能力

Rustrak 是一个自托管的超轻量错误追踪服务器,原生兼容 Sentry 协议。除了错误追踪,Rustrak 还提供了**结构化日志追踪**能力:只要在你现有的 Sentry SDK 里加一行 `enableLogs: true`,再用 `Sentry.logger` 打出一条日志,应用的运行轨迹就会以独立日志流的形式出现在 Rustrak 的 Logs 页面中。不需要新装 Agent、不需要换

gitblog_00118的博客 241

GTA5-Stand-LuaAIO 的 natives 库详解:调用 GTA5 原生函数的正确姿势

GTA5-Stand-LuaAIO 是一款将快捷任务、崩溃、人物/车辆/地图模组与娱乐玩法合而为一的 GTA5 Stand Lua 脚本合集,而其 lib/natives-1681379138 目录正是调用 GTA5 原生函数(Native Functions)的核心入口。本文将带你快速读懂 natives 库的 8 个文件、45 个命名空间和 `util.require_natives` 的三种

gitblog_00925的博客 694
上一篇: Android Studio 系列(五)debug android 系统 java 源码
下一篇: Camera API 1 和API 2 设置获取实时预览的回调数据的格式
十橙
博客等级 码龄24年 312粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值