Android Camera系统

Android Camera app开发 阅读详情

1. Overview

1.1 物理架构

1.2 Android架构

2. CameraService

3. HAL

4. Overlay

5. Video for Linux


1. Overview

 本文以Freescale IMX为例剖析camera摄像头的系统架构。

1.1 物理架构

 硬件方面,camera系统分为主控制器和摄像头设备,功能上主要有取景,拍照和摄影。

1) IPU - Image Process Unit 图像处理单元,用于控制摄像机和显示屏。

2)图像采集 - 由camera采集的图像数据信息通过IPU的ICS接口控制。

3)DMA映射到内存 - IPU将采集到得数据通过DMA映射到一段内存。

4)队列机制 - 为了更高效地传送数据,将内存中的数据取出加入一队列,并传送到另一队列。

5)视频输出 - 将视频数据从队列中取出,通过IPU控制这段独立显存,最终将视频显示出来。

1.2 Android架构

Android的camera系统架构自上而下分别为应用层-框架层-硬件抽象层-linux驱动层。

1) APP - Framework

应用层与java框架层的间主要由Binder机制进行通信。

系统初始化时会开启一个CameraService的守护进程,为上层应用提供camera对的功能接口。

2) Framework - HAL

框架层与硬件抽象层间通过回调函数传递数据。

3) Overlay

Overlay层由ServiceFlinger和OverlayHal组成,实现视频输出功能,只有camera框架层或者视频框架层能调用它,上层无法直接调用。

4) HAL - driver

抽象层位于用户空间,通过系统调用如open(),read(),ioctl()等与内核空间进行数据传递。

2 CameraService

 Camera的主要功能有取景Preview,拍照takePicture和摄影Recording,下文以取景为例,剖析camera系统架构。

 

要实现取景Preview功能,主要须调用CameraService::Client::startPreview()和 CameraService::Client::setOverlay(),前者通过mHardware->startPreview();调用 cameraHal硬件抽象层以实现取景的整个流程,后者通过mSurface->createOverlay();调用 surfaceFlinger层创建overlay_object对象。

3 HAL

startPreview主要完成三项任务,配置图象,配置内存,开启两个存取buf队列的线程。

1) cameraPreviewConfig()配置预览图象参数

CameraOpen() - 通过打开设备节点/dev/video0得以由系统接口与设备驱动交互。

S_FMT - ioctl()的指令,设置图象像素格式,将数据由硬件抽象层传递至Linux驱动,这里也就是v4l2。

G_FMT - 得到图象像素格式,将数据由底层驱动v4l2返回至硬件抽象层。

S_PARM - 设置模式的指令,这个指令传到底层后,将会实现对camera硬件的控制。

2) cameraPreviewStart()开启预览,实际上配置了内存

REQBUFS - 申请内存,通过dma_alloc_coherent()为camera申请一端连续的dma内存。

QUERYBUF - 询问内存,将申请到内存的物理地址,虚拟地址等数据从内核空间传递到用户空间。

QBUF - 加入队列,将通过询问得到的buf加入一个队列。

3) PreviewShowFrameThread()和PreviewShowFrameThread()

PreviewCaptureFrameThread()捕捉一帧数据的线程,通过DQBUF,从队列中取出一个buf数据,这里,一个buf即一帧数据即一张图片。注意,如果camera没有采集到图片,这个线程会在DQBUF阻塞。

PreviewShowFrameThread()显示一帧数据的线程。

mDataCb() - 回调函数,将采集到的图象数据传回CameraService,再由CameraService传递给上层应用。

mOverlay->dequeueBuffer() - 调用Overlay层,从Overlay层得到一个空闲的overlaybuffer,将图象数据拷贝到这个buffer里。至于这个buffer后续的工作,即视频输出,则交给了Overlay去完成。

QUERYBUF & QBUF - 由于已经从队列里取出了一个buf,需要再询问并加入另一个buf到队列里。

4) Overlay

CameraService::Client::startPreview()完成mHardware->startPreview();后 便去执行CameraService::Client::setOverlay(),如果没有任何overlay,则创建一个新的,通过 mHardware->setOverlay(new Overlay(mOverlayRef))调用到SurfaceFlinger层,再由 overlay_dev->createOverlay();调用到overlay的硬件抽象层,抽象层创建并初始化overlay对象,与 cameraHal类似,通过ioctl()指令与底层v4l2通信,配置视频参数和内存空间。随后开启一个overlay线程,用于存取队列中的视频数 据。

注意,SurfaceFlinger里也会开启一个处理overlay的surfaceFlinger线程,用于等待用户事件,作相应的overlay控制。

5 Video for Linux

v4l2 - video for linux 2是linux为视频驱动抽象出的一层统一的接口,数据结构如下,

v4l2作为master主设备由(*attach)与camera从设备进行绑定。

初始化函数probe()如下,

1) init_camera_struct()初始化v4l2主设备的数据结构,实现open(), read(), ioctl(), mmap()等操作。

2) v4l2_int_device_register(),注册v4l2主设备,绑定camera从设备。

3) video_register_device()注册linux video设备,建立/dev/video0设备节点。

 

http://blog.youkuaiyun.com/zjc0888/archive/2011/05/18/6428993.aspx

Android Camera 架构 二、 Camera App层简述三、Camera Framework层简述四、Camera Hal3 子系统五、下面需要梳理的重点-正在进行一.Android Camera整体架构简述自Android8.0之后大多机型采用Camera API2 HAL3架构,先盗改谷歌的一张图,读完整部代码后再看这张图,真的是很清晰,很简洁,很到位.原图:https://source.android.google.cn/devices/camera。 阅读详情

相关推荐

【FW】【Camera】Android系统开机Camera初始化流程

本流程是Android Camera模块在设备启动阶段的核心初始化过程,主要完成传感器检测、硬件参数获取及服务注册等关键操作。

qq_56394739的博客 1267

Android Camera开发入门

Android Camera开发入门:目录 第一篇: 前景  一、Android Camera开发前景;      1)camera相关应用的领域      2)相关岗位介绍;      3)市场招聘介绍;      4)发展前景介绍;  二、学习这门课的重要性;      1)适合的人群;      2)熟悉和了解Android Camera 应用开发流程的重要性 第二篇: 开发环境安装  一、jdk、sdk的配置;  二、android studio的安装介绍;  三、adb命令的使用; 第三篇: Camera 常用api和最新框架介绍  一、android camera api介绍      1)camera1、camera2 区别;      2)camera 1、camera2 常用api介绍;      3)android camerax;  二、android camera最新框架介绍 第四篇:Camera api1实现预览、拍照、录像功能  一、预览  二、拍照  三、录像  四、获取实时预览流 第五篇: Camera2相机 打开功能实现第六篇: Camera2相机 预览功能实现  1)surfaceview、textureview 第七篇: Camera2相机 拍照功能实现 1)单拍; 第八篇:Camera2相机 录像功能实现1)正常录像 第九篇:Camera2预览方向、拍照方向设置     1) 预览变形问题如何处理? 第十篇:YUV流处理  1)如何获取实时预览流?  2)  思考:双码流方案如何实现?一边本地录像,一边后台推流 第十一篇:dumpsys media.camera 第十二篇:Camera2 Zoom变焦第十三篇:人脸识别(android 原生 & 三方人脸识别算法)第十四篇:Uvc UsbCamera第十五篇:Android Camera2拍摄RAW图第十六篇: Android Camera2同时打开前后摄 并 录像第十七篇: Android Camera2 视频慢动作  附:1)提供android开发相关资源      软件工具、Android相关学习书籍、学习相关网站博客等链接2)提供课程讲解中设计到的App 源码    * Camera API1使用源码    * Camera API2使用源码    * 调用三方算法人脸识别源码    *  录像慢动作源码    * Uvc UsbCamera相关源码3)课件

Android拍照的方式:调用系统相机、自定义 Camera

相机、相册、拍照

this_is_bug的博客 7416

Camera Android架构(基于Q)

Android Camera

weixin_39839293的博客 1160

虚拟摄像头之五: 详解 android8 的 Camera 子系统框架

由于 android 版本差异、 camera子系统框架也有不同调整,本文是采用 android8 源码作为参考对象,对 camera 子系统进行框架梳理,建立起框架性认知后、在进一步分析各模块实现时、就如同有了地图和指南针功用。...

weixin_38387929的博客 4185

Android Camere开发入门(2):Camera2的使用

这些只是Camera2 API的基本用法,它还提供了更多的功能和选项,如自动对焦、闪光灯控制、镜头切换等。你可以在官方文档中进一步了解这些功能。通过上述步骤,我们可以实现相机的预览、拍照和录制视频等基本功能。在下一篇博客中,我们将继续探索Camera2 API的高级功能和技巧。

挨T工作室的博客 3777

Android系统中的Camera系统

Android系统中的Camera系统 一、Android中camera简介 1.Camera 1.1camera初识 摄像头模组,全称CameraCompact Module ,以下简称CCM,是影像捕捉至关重要的电子器件。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vcXEN9B3-1582610015231)(E:\Users\ZhangZhilu\D...

阿路 2794

Claude Code启动失败解决方案,执行文件不兼容一键修复

Claude Code命令行工具突然报错,显示"不支持的16位应用程序"。作者排查Node版本无果后,发现是Anthropic更新导致Windows兼容性问题。解决方法很简单:卸载旧版、切换npm镜像源、重装最新版即可恢复。经验教训:遇到类似问题应先搜索社区反馈,避免无谓排查,同时注意npm源使用后及时还原。整个踩坑过程虽折腾,但最终只是简单的重装问题。

1456

Android 11 camera系统调试总结

camera2 debug ServiceManager: Permission failure: android.permission.SYSTEM_CAMERA from uid=10134 pid=3155 原因: 在搭载 Android 11 或更高版本的设备上,Android 框架支持系统相机,这些相机设备仅对具有 android.permission.SYSTEM_CAMERA 权限和常规相机权限的进程可见。Android 11 中引入了 android.permission.SYSTEM_C

岩之有理的博客 8257

TouchGFX在STM32上的移植全过程:超详细版指南

深入讲解将TouchGFX集成到STM32开发环境的每一步,涵盖配置、驱动适配与UI调试。无论是初学者还是进阶开发者,都能快速掌握TouchGFX在嵌入式平台的应用技巧。

weixin_42443533的博客 600

ESP32驱动GC9A01圆形屏实战:Arduino平台LVGL移植与图像显示优化

本文详细介绍了在Arduino平台上使用ESP32驱动GC9A01圆形屏的实战指南,包括硬件连接、LVGL移植与图像显示优化。通过SPI配置、LVGL库安装和双缓冲机制等技巧,帮助开发者快速实现高效显示效果,适用于智能家居控制面板等应用场景。

weixin_29182481的博客 735

Android P 通过系统属性来禁止打开系统Camera和第三方Camera

1.禁止第三方APP打开Camera frameworks/base/core/java/android/hardware/Camera.java public static Camera open(int cameraId) { // add if(SystemProperties.get("persist.sys.disablecamera").equals...

逆风飞翔 5336

camera android 版本,Android Camera系统

1. Overview1.1 物理架构1.2 Android架构2. CameraService3. HAL4.Overlay5. Video for Linux1. Overview本文以Freescale IMX为例剖析camera摄像头的系统架构。1.1 物理架构硬件方面,camera系统分为主控制器和摄像头设备,功能上主要有preview预览,takePicture拍照和recordin...

weixin_33274610的博客 348

【SOC 芯片设计 DFT 学习专栏 -- DFT DRC规则检查】

在现代半导体设计中,DFT(Design for Test)技术的重要性不言而喻。它确保了芯片在制造完成后能够进行高效和可靠的测试。DFT设计规则检查(DRC)作为DFT流程中的一个关键环节,通过一系列自动化工具检测设计中的潜在问题,从而保证设计的可测试性和整体质量。在本文中,我们将详细探讨DFT DRC的概念、重要性、检查流程以及具体的规则和应用。Tessent是业界领先的DFT解决方案之一,其DRC工具通过一系列自动化检查,确保设计符合DFT要求。

CodingCos的博客 4167

CycloneDDS(C++版本)开源代码在Linux(X86平台)系统上编译生成可执行文件的详细步骤

cyclonedds里面已经有现成的实例供我们参考,在根目录下的example目录下面,我们打开此目录,此目录下有CMakeLists.txt文件以及一些其他的文档,我们需要在此目录(example目录)下编译构建出。我们可以看到cyclonedds-cxx-master包下的example目录下有很多文件,包括CMakeLists.txt等,其中我们要构建的可执行文件所需要的源文件等就在。此过程会稍微慢一点。之后会报错,如下:(图片中是c版本出现的问题截图,不影响,c++也是这个影响,问题是一样的)

qq_42595610的博客 1251

Android源码之Camera系统架构

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34116110的博客 139

IMEI引起的无法驻网问题

问题不复杂,场景很简单,如上图,UE在进行LTE attach过程时,在送完NAS security mode complete后,就立刻收到了网络attach reject 带cause 6 Illegal ME,根据协议描述这个cause 代表ME不被网络可接受,例如ME在禁止名单或者黑名单中就会有这种cause。然而前方在报这个问题的时候,也是知道SIM卡和手机IMEI在运营商那边没能成功绑定,然后才报的问题,要查看手机是不是有问题...... 告诉前方原因后,还认为是手机问题,告知要继续查。

asd199086的博客 1426

Android Camera 系统框架分析

一、在android中开发人员可以做那些工作?         应用程序开发:利用android提供的强大的sdk,开发出各种各样新颖的应用。         系统开发:在android中Google实现了与硬件无关的所有代码,但是与硬件密切相关的硬件抽象层却没有也无法提供,对于移动设备不同的设备提供商底层硬件是千变万化的,不可能提供统一的硬件驱动以及接口实现,只能提供标准的接口,因此硬件提供

清闲老窝的专栏 2万+

【Ellisys】【使用技巧】【二】

支持所有常见的编码器和协议实时播放或保存(无线和HCI)循环播放导出与其他视图协同(OverView 和 Spectrum)可以通过下面的位置看 重传的包。

奔跑吧 android 的博客 135

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Android的Camera系统结构

<br />  Android的Camera系统结构分成客户端和服务器两个部分,它们建立在Android的进程间通讯Binder的结构上。<br /> <br /> Camera系统的java类:frameworks/base/core/java/android/hardware/Camera.java<br /> Camera的JAVA本地调用部分(JNI):frameworks/base/core/jni/android_hardware_Camera.cpp<br />                

chenzhencz的专栏 1290

数学建模模型总结

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

Android Camera系统架构

随着Android系统的不断升级,Camera子系统框架也在不断进化 由最初的API1和HAL1到现在的API2和HAL3,由最初简单的拍照,录制到现在的连拍,AI人像;可以说是架构上变动最大最频繁的子系统。 很多设备仍然依赖相机 HAL1,因此 Android 7.0 继续支持该模块。此外,Android 相机服务还支持同时实现两种 HAL(1 和 3), 如果您希望通过相机 HAL1 支持性能...

|~~~热爱生活、努力学习的小伙汁~~~| 3223

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

WINCC7.3破解文件

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

Android Camera子系统之源代码View

本文基于Android 4.2.2+Linux3.6.9+SAMA5D3 SoC从源代码的角度审视Android Camera子系统。     应用层 Androd原生Camera应用 /system/app/LegacyCamera.apk  http://androidxref.com/4.2.2_r1/xref/packages/apps/LegacyCamera/   Ca

3837

Android15 Camera系统调试操作

注:这里以Android15版本,Google参考AIDL HAL实现为例。

hongyeying的专栏 384
上一篇: Android 2.3 Overlay
下一篇: 关于标准android中视频播放器中的快进和快退的步长时间设置
eustoma
博客等级 码龄18年 79粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值