Camera的raw data一般都是YUV420的格式,数据的特点是:

YUV 4:2:0采样,每四个Y共用一组UV分量

YUV420格式:

先Y,后V,中间是U。其中的Y是w * h,U和V是w/2 * (h/2)

如果w = 4,h = 2,则:

yyyy

yyyy

uu

vv

内存则是:yyyyyyyyuuvv

需要占用的内存:w*h(Y占用内存大小) + w * h/4(U占用内存大小) + w * h/4(V占用内存大小)   = w*h * 3 / 2

所以YUV420 数据在内存中的长度是 width * hight * 3 / 2,YUV420包括:YUV420p和YUV420SP两种格式

假设一个分辨率为8X4的YUV图像,它们的格式如下图:

YUV420sp格式如下图                                                          

YUV420p数据格式如下图

采样规律是:每个像素点都采样Y,寄数行采样1/2个U,不采样V,偶数行采样1/2个V,不采样U

以640x480_420.yuv为例,正确的存储格式为一大片Y,跟着一大片U,最后是一大片V:
-------------------------640x480 point
Y(0,0) Y(0,1)... Y(0,639)
...
Y(479,0) Y(479,1)... Y(479,639)
-------------------------640x480 point

-------------------------320x240 point
U(0,0) U(0,1)... U(0,319)
...
U((239,0) U((239,1)... U((239,319)
-------------------------320x240 point

-------------------------320x240 point
V(0,0) V(0,1)... V(0,319)
...
V((239,0) V((239,1)... V((239,319)
-------------------------320x240 point

yuv420p 和 YUV420的区别 在存储格式上有区别

yuv420p:yyyyyyyy uuuuuuuu vvvvv yuv420: yuv yuv yuv

YUV420P,Y,U,V三个分量都是平面格式,分为I420和YV12。I420格式和YV12格式的不同处在U平面和V平面的位置不同。在I420格式中,U平面紧跟在Y平面之后,然后才是V平面(即:YUV);但YV12则是相反(即:YVU)。
YUV420SP, Y分量平面格式,UV打包格式, 即NV12。 NV12与NV21类似,U 和 V 交错排列,不同在于UV顺序。
I420: YYYYYYYY UU VV    =>YUV420P
YV12: YYYYYYYY VV UU    =>YUV420P
NV12: YYYYYYYY UVUV     =>YUV420SP
NV21: YYYYYYYY VUVU     =>YUV420SP

导出YUN420数据进行调试,先写Y(w*h),再写UV(w * h/4(U占用内存大小) + w * h/4(V占用内存大小)),分析问题:

 // dump图像数据  事列
void dump(const int width, const int height, void *yBuf, void *uvBuf)
{
char buf[] = {'\0'};
FILE* file_fd = fopen(buf, "wb");
snprintf(buf, sizeof(buf), "/data/Effect/%dx%dvideodenoiser%d.yuv",width,height,);
file_fd = fopen(buf, "wb");
if (file_fd != NULL) {
void *data = NULL;
int written_len = ;
data = (void *)((uint8_t *)yBuf);
written_len += fwrite( data, width*height, , file_fd);
if(NULL == uvBuf)
data = (void *)((uint8_t *)yBuf+ width*height);
else
data = (void *)((uint8_t *)uvBuf);
written_len += fwrite( data, width*height/, , file_fd);
fclose(file_fd);
TSLOG("%s: dump-------sucess%d",__func__,);
} else {
TSLOG("%s: fail t open file for image dumping", __func__);
}

备注:

YUV420P,Y,U,V三个分量都是平面格式,分为I420和YV12。I420格式和YV12格式的不同处在U平面和V平面的位置不同。在I420格式中,U平面紧跟在Y平面之后,然后才是V平面(即:YUV);但YV12则是相反(即:YVU)。
YUV420SP, Y分量平面格式,UV打包格式, 即NV12。 NV12与NV21类似,U 和 V 交错排列,不同在于UV顺序。
     I420: YYYYYYYY UU VV    =>YUV420P
     YV12: YYYYYYYY VV UU    =>YUV420P
     NV12: YYYYYYYY UVUV     =>YUV420SP
     NV21: YYYYYYYY VUVU     =>YUV420SP

HAL层Camera模块Dump图片--工作积累的更多相关文章

  1. 51全志R58平台Android4.4下Camera的HAL层修改

    51全志R58平台Android4.4下Camera的HAL层修改 2018/11/7 15:20 版本:V1.0 开发板:SC5806 1.系统编译: (略) 2.全志R58平台Android4.4 ...

  2. Android Hal层简要分析

    Android Hal层简要分析 Android Hal层(即 Hardware Abstraction Layer)是Google开发的Android系统里上层应用对底层硬件操作屏蔽的一个软件层次, ...

  3. 〖Android〗OK6410a的Android HAL层代码编写笔记

    一.编写LED灯的Linux驱动程序代码 之所以使用存在HAL层,是为了保护对硬件驱动过程的逻辑与原理: 所以,残留在Linux驱动层的代码,只保留了基本的读写操作,而不含有关键的逻辑思维: 1. l ...

  4. ZT Android4.2关于bluetooth在HAL层的分析(1)

    我的电子杂烩饭 http://blog.sina.com.cn/wuchuchu2012 [订阅][手机订阅] 首页 博文目录 图片 关于我 正文 字体大小:大 中 小 Android4.2关于blu ...

  5. 基于深度学习和迁移学习的识花实践——利用 VGG16 的深度网络结构中的五轮卷积网络层和池化层,对每张图片得到一个 4096 维的特征向量,然后我们直接用这个特征向量替代原来的图片,再加若干层全连接的神经网络,对花朵数据集进行训练(属于模型迁移)

    基于深度学习和迁移学习的识花实践(转)   深度学习是人工智能领域近年来最火热的话题之一,但是对于个人来说,以往想要玩转深度学习除了要具备高超的编程技巧,还需要有海量的数据和强劲的硬件.不过 Tens ...

  6. 如何在 kernel 和 hal 层读取同一个标志

    很多时候我们需要从 HAL 层(Hardware Abstract Layer)传一个标志给 kernel 层.一般这种传递是不能直接通过定义全局变量来实现的. 此时可以通过读写文件来实现该标志. 譬 ...

  7. 【转】android camera(二):摄像头工作原理、s5PV310 摄像头接口(CAMIF)

    关键词:android  camera CMM 模组 camera参数  CAMIF平台信息:内核:linux系统:android 平台:S5PV310(samsung exynos 4210) 作者 ...

  8. [2013.9.8网络首发]导入Android4.2源码里的Gallery2和Camera模块至Eclipse全过程

    [2013.9.8网络首发]导入Android4.2源码里的Gallery2和Camera模块至Eclipse全过程   google的android自带的apps写的是相当牛逼的,将其导入到ecli ...

  9. 高通HAL层之Sensor HAL

    高通的HAL层其实分为两种,一种是直接从kernel这边报数据上来的,由sensor HAL层来监听,另一种是走ADSP的模式,HAL层是通过qmi的形式进行监听的: 走ADSP架构的可以看下面的博客 ...

随机推荐

  1. HDU2243 考研路茫茫——单词情结(AC自动机+矩阵快速幂)

    与POJ2778一样.这题是求长度不超过n且包含至少一个词根的单词总数. 长度不超过n的单词总数记为Sn,长度不超过n不包含词根的单词总数记为Tn. 答案就是,Sn-Tn. Sn=26+262+263 ...

  2. ACM-ICPC国际大学生程序设计竞赛北京赛区(2015)网络赛 B Mission Impossible 6

    #1228 : Mission Impossible 6 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 You must have seen the very famou ...

  3. BZOJ3799 : 字符串重组

    从大到小枚举答案与T串的lcp,然后贪心 #include<cstdio> #include<cstring> char s[5010],t[5010],ans[5010]; ...

  4. Android环境搭建要点

    1.JDK环境变量配置 在环境变量的path变量中加入jdk安装目录的bin路径字符串(C:\Program Files\Java\jdk1.8.0\bin). 配置好后,在命令提示符界面输入&quo ...

  5. 实现自己的Linq to Sql

    之前写过一篇<统一的仓储接口>,为了方便使用不同的仓储.在我们的项目中使用的是EF4.0,但是这个版本的EF有一些性能问题没有解决,又不想升级到EF6,具体EF6有没有解决暂时不清楚.我们 ...

  6. Mock模拟后台数据接口--再也不用等后端的API啦

    ok,在开发中经常需要从后台获取数据,那么有时候后台的数据接口并没有写好,所以这时候,就需要自己模拟数据接口,来实现前端逻辑, 今天数的就是阿里巴巴的一款mock产品,很好用的哦!!!! ok!这是我 ...

  7. 冒泡排序:一百以内十个随机数放入数组排序并打印<

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. cookie 用户第一次访问时执行

    <script type="text/javascript" src="/js/jquery.Cookies.js"></script> ...

  9. Sublime之旅

    安装 http://www.sublimetext.com/3          常用操作  window版本 CTRL + P 打开文件搜索 Ctrl+K+B 打开目录树 Ctrl+Shift+[ ...

  10. 微博开发平台java SDK demo学习之examples(demo)

    本文介绍demo中函数的功能分块 账号 评论 收藏 关系/好友分组 地理信息 OAuth2(开发指南) 位置服务(开发指南)