首页 > 其他分享 >Android系统、图像格式、Android Camera简介

Android系统、图像格式、Android Camera简介

时间:2022-12-02 23:04:41浏览次数:52  
标签:图像格式 MIPI color UV RAW Camera adb Android


Android架构简析

Android 操作系统是基于linux内核的软件栈,由C/C++/JAVA等语言开发,其层次结构如下所示:

软件层

功能描述

组件描述

内核层

进程管理,内存管理,文件管理等操作系统核心功能

打过大量patch的linux内核

C程序库


为Android应用提供底层的程序库

Libc、SQLite、Webkit、SSL等

Android程序库

为 Android 开发的基于 Java 的程序库

  1. android.app
  2. android.content
  3. android.database
  4. android.opengl
  5. android.os
  6. android.text
  7. android.view
  8. android.widget
  9. android.webkit

Android运行时


使JAVA程序使用linux核心功能

  1. Dalvik 虚拟机
  2. 其他核心库

应用框架

以 Java 类的形式为应用程序提供许多高级的服务

  1. 活动管理者
  2. 内容提供者
  3. 资源管理器
  4. 视图系统

Android 应用程序

Android APP

  1. APP
  2. Manifest
  3. Res文件等

QNX架构简析

QNX是一个分布式、可扩展、遵从POSIX规范的类Unix硬实时操作系统,它采用微内核的架构,即微内核只提供进程调度、进程间通信、底层网络通信和中断处理四种服务,驱动程序、协议栈、文件系统、应用程序等都在微内核之外内存受保护的安全的用户空间内运行,组件之间能避免相互影响,在遇到故障时也能重启。

功能层

功能描述

组件描述

底座层

支持X86、PowerPC、ARM board

相关硬件

微内核层


提供进程调度、进程间通信、底层网络通信和中断处理四种服务

  1. 进程调度
  2. 进程间通信
  3. 底层网络通信
  4. 中断处理

保护内存层

除微内核之外的网络通信、设备驱动等程序

  1. 文件系统
  2. POSIX能力
  3. 网络通信
  4. 设备驱动

高级运行时


提供无线网络、fast boot等功能

  1. fast boot
  2. Wireless Networking
  3. Adaptive partitioning
  4. Multi-core

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)表示。

  1. 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的水平取样,垂直完全采样,这种方式非常少采用。

  1. YUV存储格式

(1)YUV444类型

每个像素点都存储对应的YUV值,单个像素需要3个字节,在1080x1920的图像中,需要1080x1920x

(1Y + 1U + 1V)(字节)≈ 0.7MB来存储。

存储YUV444时先存8位Y,在存8位U,最后存8位V。

Android系统、图像格式、Android Camera简介_Android

(2)YV24类型

与YUV444类似,但存储YV24时先存8位Y,在存8位V,最后存8位U。

Android系统、图像格式、Android Camera简介_java_02

(3)YUV422类型

每两个像素点共用一对UV值,所以,在1080x1920的图像中,需要1080x1920x(1Y+ 0.5U + 0.5V)(字节)≈ 0.5MB来存储。

Android系统、图像格式、Android Camera简介_android_03

Android系统、图像格式、Android Camera简介_android studio_04

如上图所示,1个像素使用2个字节表示,Y占8位,U和V分别占半个字节,即4位。

(4)YUV420类型

每四个像素点共用一对UV值,所以,在1080x1920的图像中,需要1080x1920x(1Y+ 0.25U + 0.25V)(字节)≈ 0.3MB来存储。

Android系统、图像格式、Android Camera简介_Android_05

YUV420采用4:2:0表示,一个像素占12比特位,8bit的Y + 2bit的U+ 2bit的V,Y,U,V存储采用三平面格式,如下所示:

Android系统、图像格式、Android Camera简介_数据_06

从上图可看出,U、V 平面的每行字节数(strides)、高(height)都是 Y 平面的一半,YUV420 是音视频开发中常用的一种格式。

(5)YV12类型

YV12 与 I420 几乎一样,仅改变了 U, V 平面的顺序。内存排列如下图所示:

Android系统、图像格式、Android Camera简介_android studio_07

(6)NV12和NV21类型

Android系统、图像格式、Android Camera简介_java_08

NV12 属于 YUV420SP 格式,两个平面,分别存储 Y 分量 和 UV 分量。其中 UV 分量共用一个平面并且以 U, V, U, V 的顺序交错排列。每四个 Y 分量共享一组 UV 分量。UV 平面的 strides, width 与 Y 平面一样长,但 height 仅为 Y 平面的一半。因此一个像素 12 bits,内存排列如下图所示:

Android系统、图像格式、Android Camera简介_数据_09

NV21 属于 YUV420SP,与 NV12 几乎一致,区别是 UV 平面中 U 与 V 的排列顺序颠倒,以 V, U, V, U 的顺序交错排列,内存排列如图所示:

Android系统、图像格式、Android Camera简介_android studio_10

(7)YU16、I422和YV16类型

Android系统、图像格式、Android Camera简介_android studio_11

Android系统、图像格式、Android Camera简介_android studio_12

(8)YUV422SP类型

Android系统、图像格式、Android Camera简介_java_13

(9)UYVY类型

UYVU采用4:2:2格式,每个像素占16比特位,UYVY 与 YUYV 类似,只是亮度(Y)分量与色度(UV)分量排列顺序颠倒,如下图所示:

Android系统、图像格式、Android Camera简介_android studio_14

RGB与YUV互相转换

进行颜色数据运算时使用的是YUV颜色编码,而对图像经过后期处理进行显示时则用的是RGB编码。

Android系统、图像格式、Android Camera简介_数据_15

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数据,按照大端对齐存储方式如下所示:

Android系统、图像格式、Android Camera简介_android studio_16

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就可以看到图像了。

Android系统、图像格式、Android Camera简介_android studio_17

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

  1. 基本概念

3A是动曝光AE(Atuo Exposure)、自动对焦AF(Auto Focus)、自动白平衡AWB(Auto White Balance),它们是 Camera 功能中非常重要的三个部分。

  1. 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

相关文章

  • Android studio的基本使用--基础篇
    一、新建项目其实跟IDEA新建项目的流程基本一致,File->New->Newproject,这样就能够新建出来一个项目啦!一般情况下,我们都会选择EmptyActivity,之后我们会涉及到设置项目名......
  • 展锐Android平台增加gadget 虚拟usb串口
    方案一:需要修改展锐现有Windows端驱动,增加一组MI接口。由于无法推动展锐修改Windows驱动,该方案不推荐。SL8541E/device/sprd/sharkle/common/rootdir/root/init.common.us......
  • 跳一跳 Python小程序 小白指南 Android和iOS都可以用
    小白一枚,最近网上比较火的微信“跳一跳”小程序,刷爆了朋友圈,之后怀着好奇心在网上看到有大神自己写了一个python脚本,于是打算借来玩一下,倒腾了半天,各种配置,下面记录一下出现......
  • Android 开发中脚本 提高效率工具
    在安卓开发中我们常常需要获取日志,通常我们可以通过adblogcat命令获取日志。同样,我没有可以通过脚本获取。其实质也是通过adb命令实现,只是把命名写入bat文件中,在win系统......
  • iTOP3588开发板Android固件编译-修改成hdmi显示
    打开安卓12源码kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588-evb7-lp4.dtsi中的设备树文件。注释掉#include"iTop-3588-mipi0.dts既配置为hdmi屏幕显示。如......
  • Android packages常见APP对应包名
    美团外卖com.sankuai.meituan.takeoutnew饿了么me.ele摩拜单车com.mobike.mobikeappOFOso.ofo.labofo今日头条com.ss.android.article.news新浪微博......
  • Android ViewPager2 + Fragment + BottomNavigationView 联动
    AndroidViewPager2+Fragment+BottomNavigationView联动本篇主要介绍一下ViewPager2+Fragment+BottomNavigationView,上篇中把ViewPager2和Fragment联动起......
  • android中的menu和子menu小结
    menu.xml<?xmlversion="1.0"encoding="utf-8"?><menuxmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:id="@+id/Menu1"android:tit......
  • android中的震动
     在android中,可以控制手机进行震动,先是在配置文件中对权限进行配置:<uses-permissionandroid:name="android.permission.VIBRATE"/>public......
  • android tips:从资源文件中读取文件流显示
    在android中,假如有的文本文件,比如TXT放在raw下,要直接读取出来,放到屏幕中显示,可以这样: privatevoiddoRaw(){InputStreamis=this.g......