HAL层Camera模块Dump图片--工作积累
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,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图片--工作积累的更多相关文章
- 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 ...
- Android Hal层简要分析
Android Hal层简要分析 Android Hal层(即 Hardware Abstraction Layer)是Google开发的Android系统里上层应用对底层硬件操作屏蔽的一个软件层次, ...
- 〖Android〗OK6410a的Android HAL层代码编写笔记
一.编写LED灯的Linux驱动程序代码 之所以使用存在HAL层,是为了保护对硬件驱动过程的逻辑与原理: 所以,残留在Linux驱动层的代码,只保留了基本的读写操作,而不含有关键的逻辑思维: 1. l ...
- ZT Android4.2关于bluetooth在HAL层的分析(1)
我的电子杂烩饭 http://blog.sina.com.cn/wuchuchu2012 [订阅][手机订阅] 首页 博文目录 图片 关于我 正文 字体大小:大 中 小 Android4.2关于blu ...
- 基于深度学习和迁移学习的识花实践——利用 VGG16 的深度网络结构中的五轮卷积网络层和池化层,对每张图片得到一个 4096 维的特征向量,然后我们直接用这个特征向量替代原来的图片,再加若干层全连接的神经网络,对花朵数据集进行训练(属于模型迁移)
基于深度学习和迁移学习的识花实践(转) 深度学习是人工智能领域近年来最火热的话题之一,但是对于个人来说,以往想要玩转深度学习除了要具备高超的编程技巧,还需要有海量的数据和强劲的硬件.不过 Tens ...
- 如何在 kernel 和 hal 层读取同一个标志
很多时候我们需要从 HAL 层(Hardware Abstract Layer)传一个标志给 kernel 层.一般这种传递是不能直接通过定义全局变量来实现的. 此时可以通过读写文件来实现该标志. 譬 ...
- 【转】android camera(二):摄像头工作原理、s5PV310 摄像头接口(CAMIF)
关键词:android camera CMM 模组 camera参数 CAMIF平台信息:内核:linux系统:android 平台:S5PV310(samsung exynos 4210) 作者 ...
- [2013.9.8网络首发]导入Android4.2源码里的Gallery2和Camera模块至Eclipse全过程
[2013.9.8网络首发]导入Android4.2源码里的Gallery2和Camera模块至Eclipse全过程 google的android自带的apps写的是相当牛逼的,将其导入到ecli ...
- 高通HAL层之Sensor HAL
高通的HAL层其实分为两种,一种是直接从kernel这边报数据上来的,由sensor HAL层来监听,另一种是走ADSP的模式,HAL层是通过qmi的形式进行监听的: 走ADSP架构的可以看下面的博客 ...
随机推荐
- HDU2243 考研路茫茫——单词情结(AC自动机+矩阵快速幂)
与POJ2778一样.这题是求长度不超过n且包含至少一个词根的单词总数. 长度不超过n的单词总数记为Sn,长度不超过n不包含词根的单词总数记为Tn. 答案就是,Sn-Tn. Sn=26+262+263 ...
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2015)网络赛 B Mission Impossible 6
#1228 : Mission Impossible 6 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 You must have seen the very famou ...
- BZOJ3799 : 字符串重组
从大到小枚举答案与T串的lcp,然后贪心 #include<cstdio> #include<cstring> char s[5010],t[5010],ans[5010]; ...
- Android环境搭建要点
1.JDK环境变量配置 在环境变量的path变量中加入jdk安装目录的bin路径字符串(C:\Program Files\Java\jdk1.8.0\bin). 配置好后,在命令提示符界面输入&quo ...
- 实现自己的Linq to Sql
之前写过一篇<统一的仓储接口>,为了方便使用不同的仓储.在我们的项目中使用的是EF4.0,但是这个版本的EF有一些性能问题没有解决,又不想升级到EF6,具体EF6有没有解决暂时不清楚.我们 ...
- Mock模拟后台数据接口--再也不用等后端的API啦
ok,在开发中经常需要从后台获取数据,那么有时候后台的数据接口并没有写好,所以这时候,就需要自己模拟数据接口,来实现前端逻辑, 今天数的就是阿里巴巴的一款mock产品,很好用的哦!!!! ok!这是我 ...
- 冒泡排序:一百以内十个随机数放入数组排序并打印<
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- cookie 用户第一次访问时执行
<script type="text/javascript" src="/js/jquery.Cookies.js"></script> ...
- Sublime之旅
安装 http://www.sublimetext.com/3 常用操作 window版本 CTRL + P 打开文件搜索 Ctrl+K+B 打开目录树 Ctrl+Shift+[ ...
- 微博开发平台java SDK demo学习之examples(demo)
本文介绍demo中函数的功能分块 账号 评论 收藏 关系/好友分组 地理信息 OAuth2(开发指南) 位置服务(开发指南)