Android架构简析
Android 操作系统是基于linux内核的软件栈,由C/C++/JAVA等语言开发,其层次结构如下所示:
软件层 | 功能描述 | 组件描述 |
内核层 | 进程管理,内存管理,文件管理等操作系统核心功能 | 打过大量patch的linux内核 |
C程序库 | 为Android应用提供底层的程序库 | Libc、SQLite、Webkit、SSL等 |
Android程序库 | 为 Android 开发的基于 Java 的程序库 |
|
Android运行时 | 使JAVA程序使用linux核心功能 |
|
应用框架 | 以 Java 类的形式为应用程序提供许多高级的服务 |
|
Android 应用程序 | Android APP |
|
QNX架构简析
QNX是一个分布式、可扩展、遵从POSIX规范的类Unix硬实时操作系统,它采用微内核的架构,即微内核只提供进程调度、进程间通信、底层网络通信和中断处理四种服务,驱动程序、协议栈、文件系统、应用程序等都在微内核之外内存受保护的安全的用户空间内运行,组件之间能避免相互影响,在遇到故障时也能重启。
功能层 | 功能描述 | 组件描述 |
底座层 | 支持X86、PowerPC、ARM board | 相关硬件 |
微内核层 | 提供进程调度、进程间通信、底层网络通信和中断处理四种服务 |
|
保护内存层 | 除微内核之外的网络通信、设备驱动等程序 |
|
高级运行时 | 提供无线网络、fast boot等功能 |
|
RGB
RGB是用R(red:红色)+G(green:绿色)+B(blue:蓝色)这三基色按照不同比例混合后显示人类能感知的所有颜色,其格式汇总如下:
格式种类 | 存储说明 | R G B分量获取 |
RGB555 | RGB555是一种16位的RGB格式,R、G、B分量都用5位来表示,剩下的一位不用。 | R = color & 0x7C00, (获取高字节的5个bit) G = color & 0x03E0, (获取中间5个bit) B = color & 0x001F, (获取低字节5个bit) |
RGB565(高彩色) | RGB565同样是一种16位的RGB格式,R和B分量用5位来表示,G分量用6位标志。 | R = color & 0xF800, (获取高字节的5个bit) G = color & 0x07E0, (获取中间6个bit) B = color & 0x001F, (获取低字节5个bit) |
RGB24(真彩色) | RGB24是一种24位的RGB格式,R、G、B分量都用8位来表示,每位取值范围都为0-255。 | R = color & 0x000000FF, G = color & 0x0000FF00, B = color & 0x00FF0000 |
RGB32(真彩色) | RGB32使用32位来表示一个像素,RGB分量各用去8位,剩下的8位用作Alpha通道或者不用。Alpha通道是一个8位的灰度通道,该通道用256级灰度来记录图像中的透明度信息,定义透明、不透明和半透明区域,其中白表示不透明,黑表示透明,灰表示半透明。 | R = color & 0x0000FF00, G = color & 0x00FF0000, B = color & 0xFF000000, A = color & 0x000000FF |
YUV
YUV是一种颜色编码方法,常使用在各个视频处理组件中。其中的“Y”表示明亮度(亮度通道),也就是灰阶值,即黑到白的范围值,所以只有Y值的图像,是黑白的,“U”表示色彩值,“V”表示色彩的饱和度,“U”“V”用于指定像素的颜色,UV也称色度通道。通俗得讲,一个像素点用亮度Y和色度(一组UV)表示。
- YUV的表示
YUV的表示法称为A:B:C表示法,即Y采用,UV的频率,如下所示:
(1)4:4:4表示完全取样;
(2)4:2:2表示2:1的水平取样,垂直完全采样。
(3)4:2:0表示2:1的水平取样,垂直2:1采样。
(4)4:1:1表示4:1的水平取样,垂直完全采样,这种方式非常少采用。
- YUV存储格式
(1)YUV444类型
每个像素点都存储对应的YUV值,单个像素需要3个字节,在1080x1920的图像中,需要1080x1920x
(1Y + 1U + 1V)(字节)≈ 0.7MB来存储。
存储YUV444时先存8位Y,在存8位U,最后存8位V。
(2)YV24类型
与YUV444类似,但存储YV24时先存8位Y,在存8位V,最后存8位U。
(3)YUV422类型
每两个像素点共用一对UV值,所以,在1080x1920的图像中,需要1080x1920x(1Y+ 0.5U + 0.5V)(字节)≈ 0.5MB来存储。
如上图所示,1个像素使用2个字节表示,Y占8位,U和V分别占半个字节,即4位。
(4)YUV420类型
每四个像素点共用一对UV值,所以,在1080x1920的图像中,需要1080x1920x(1Y+ 0.25U + 0.25V)(字节)≈ 0.3MB来存储。
YUV420采用4:2:0表示,一个像素占12比特位,8bit的Y + 2bit的U+ 2bit的V,Y,U,V存储采用三平面格式,如下所示:
从上图可看出,U、V 平面的每行字节数(strides)、高(height)都是 Y 平面的一半,YUV420 是音视频开发中常用的一种格式。
(5)YV12类型
YV12 与 I420 几乎一样,仅改变了 U, V 平面的顺序。内存排列如下图所示:
(6)NV12和NV21类型
NV12 属于 YUV420SP 格式,两个平面,分别存储 Y 分量 和 UV 分量。其中 UV 分量共用一个平面并且以 U, V, U, V 的顺序交错排列。每四个 Y 分量共享一组 UV 分量。UV 平面的 strides, width 与 Y 平面一样长,但 height 仅为 Y 平面的一半。因此一个像素 12 bits,内存排列如下图所示:
NV21 属于 YUV420SP,与 NV12 几乎一致,区别是 UV 平面中 U 与 V 的排列顺序颠倒,以 V, U, V, U 的顺序交错排列,内存排列如图所示:
(7)YU16、I422和YV16类型
(8)YUV422SP类型
(9)UYVY类型
UYVU采用4:2:2格式,每个像素占16比特位,UYVY 与 YUYV 类似,只是亮度(Y)分量与色度(UV)分量排列顺序颠倒,如下图所示:
RGB与YUV互相转换
进行颜色数据运算时使用的是YUV颜色编码,而对图像经过后期处理进行显示时则用的是RGB编码。
1.YUV(256 级别) 可以从8位 RGB 直接计算:
Y = 0.299 R + 0.587 G + 0.114 B
U = - 0.1687 R - 0.3313 G + 0.5 B + 128
V = 0.5 R - 0.4187 G - 0.0813 B + 128
2.RGB 也可以直接从YUV (256级别) 计算:
R = Y + 1.402 (Cr-128)
G = Y - 0.34414 (Cb-128) - 0.71414 (Cr-128)
B = Y + 1.772 (Cb-128)
RAW图像格式
1.概述
RAW格式并不是直接的照片,而是一个文件,该文件记录了CMOS或者CCD图像感应器将捕捉到的光源信号
转化为数字信号的原始数据。RAW文件也称数码底片,它记录了由相机拍摄所产生的一些元数据,如ISO的设置、快门速度、光圈值、白平衡等信息。
2.RAW与JPG
RAW文件与JPG照片有很大的关系,因为JPG照片就是RAW文件经过相机内部的处理而得。RAW文件记录的是拍照环境的原始数据,这些数据在相机的处理器中进行白平衡、锐度、饱和度、色彩等方面的处理之后,再封装就会得到JPG照片。
RAW文件比JPG照片所保留的画面细节也会更加丰富,因为RAW文件记录的都是环境的原始信息,没有细节的损失。但是JPG文件是经过压缩而得到的,另外由于比如控噪等处理之后,难免细节会有损失。
3.MIPI RAW格式
MIPI RAW是一种压缩过的RAW格式,MIPI RAW数据采用5个Byte,共40bit存储4个RAW数据,按照大端对齐存储方式如下所示:
4. 从MIPI RAW数据恢复RAW数据的方法
b1,b2,b3,b4,b5分别为连续读出的五个uint8类型的数据,p1,p2,p3,p4为四个像素点的像素值,那么
p1 = (b1 << 2) + ((b5 ) & 0x3);
P2 = (b2 << 2) + ((b5 >> 2) & 0x3);
P3 = (b3 << 2) + ((b5 >> 4) & 0x3);
P4 = (b4 << 2) + ((b5 >> 6) & 0x3);
Camera模组解析
1 Camera工作基本原理
景物通过镜头(LENS)生成的
光学图像投射到图像传感器(SENSOR)表面,然后转为电信号,经过A/D(模数转换)转换后变成数字图像信号,再送到数字信号处理芯片(DSP)中加工处理,再通过数据总线传输到手机中的System LSI进行处理,最后通过LCD就可以看到图像了。
1.CAMERA的成像关键在于SENSOR,LENS就是相当于在SENSOR前面增加一副眼镜,SENSOR的采光率不是由SENSOR的开口面积决定而是由LENS的表面积决定。
2.数字信号处理芯片DSP(DIGITAL SIGNAL PROCESSING)是通过一系列复杂的数学算法运算,对数字图像信息参数进行优化处理,并把处理后的信号通过USB等接口传到PC等设备。
2 模组结构
1.Lens镜头
2.VMC音圈马达
3.底座支架
4.Sensor感光芯片
5.Driver IC驱动芯片
6.输出接口
sensor是指包装在模组里面的sensor soc,而模组一般是由专门的模组厂购买sensor soc之后根据需求自行选择不同的材料制作出不同规格和质量的模组,因此虽然是同一个型号的sensor,如果是不同的模组厂生产的,那么电路的连接,使用方法也是各不相同,具体的电路还需要根据模组厂提供的电路图为准。
MIPI协议解析
1 概述
MIPI(Mobile Industry Processor Interface)移动行业处理器接口是MIPI联盟发起的为移动应用处理器制定的开放标准。分别定义了一系列的手机内部接口标准,比如摄像头接口CSI、显示接口DSI,其中CSI(Camera Serial Interface)是由MIPI联盟下Camera工作组指定的接口标准。CSI-2是MIPI CSI第二版,主要由应用层、协议层、物理层组成,最大支持4通道数据传输、单线传输速度高达1Gb/s。
2 分层结构
功能层 | 功能简介 |
应用层 | 处理原始图像数据的各种算法模块。 |
组包/解包层 | 负责将数据按照一定的次序,切割成 8 比特数据。 |
底层协议层 | 为新生成的数据加上包头包尾,形成符合协议要求的数据流。 |
通道管理层 | 将生成的数据流按照一定次序和要求,进行读写管理,输出数据流。 |
物理层 | 生成 MIPI 最后的信号波形。 |
工作流程概述:
1.原始的图像数据会在应用层做相应的图像处理,包括白平衡、噪声去除、色彩还原等。
2.处理过后的数据进入组包层做数据分割和重组,再传给协议层。
3.协议层根据数据类型产生包头,根据数据内容产生构成包尾的校验序列,之后将包头、数据本身、包尾组合起来发送给通道管理模块。
4.通道管理模块按照通道的选通情况,合理分配数据到每个通道,之后数据经过数模转换进入物理层传输。
5.接收端在收到物理层的数据后,再按照之前的逆序解包出原始的图像数据。
Android ADB用法概述
1 ADB概述
ADB(Andorid Debug Bridge)是一个Debug工具,采用标准的CS结构,用于开发者使用电脑调试手机或模拟器,ADB包含如下几个部分:
1.Client端, 运行在开发机器中, 即你的开发PC机. 用来发送adb命令。
2.Deamon守护进程, 运行在调试设备中, 即的调试手机或模拟器。
3.Server端, 作为一个后台进程运行在开发机器中, 即开发PC机,用来管理PC中的Client端和手机的Deamon之间的通信。
2 ADB常用命令
1. adb devices
列举当前连接的调试设备。
2. adb logcat
打印log信息。
3.adb install
安装apk。如adb install ~/Downloads/mobileqq_android.apk
4. adb uninstall
卸载apk,如adb uninstall com.tencent.mobileqq
5.adb push
拷贝本地文件到调试设备中,如adb push ~/temp/GithubApp.trace /sdcard/
6. adb pull
从调试设备中拷贝文件到本地,如adb pull /sdcard/GithubApp.trace ~/
7.adb shell
进入调试设备的shell界面, 此时可以使用调试设备中的很多指令。
Camera 3A
- 基本概念
3A是动曝光AE(Atuo Exposure)、自动对焦AF(Auto Focus)、自动白平衡AWB(Auto White Balance),它们是 Camera 功能中非常重要的三个部分。
- Android Camera2的3A设置
// 设置AE
mCaptureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
// 设置AF
mCaptureRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_AUTO);
// 设置AWB
mCaptureRequestBuilder.set(CaptureRequest.CONTROL_AWB_MODE, CaptureRequest.CONTROL_AWB_MODE_AUTO);
标签:图像格式,MIPI,color,UV,RAW,Camera,adb,Android From: https://blog.51cto.com/u_15899033/5907684