Android Camera对象通过setPreviewCallback 函数,在onPreviewFrame(byte[] data,Camera camera)中回调采集的数据就是NV21格式。而x264编码的输入数据却为I420格式。

因此,当我们采集到摄像头数据之后需要将NV21转为I420。

NV21和I420都是属于YUV420格式。而NV21是一种two-plane模式,即Y和UV分为两个Plane(平面),但是UV(CbCr)交错存储,2个平面,而不是分为三个。这种排列方式被称之为YUV420SP,而I420则称之为YUV420P。(Y:明亮度、灰度,UV:色度、饱和度)

下图是大小为4x4的NV21数据:Y1、Y2、Y5、Y6共用V1与U1,......

yuv.png

而I420则是

I420.png

可以看出无论是哪种排列方式,YUV420的数据量都为: wh+w/2h/2+w/2h/2 即为wh*3/2

将NV21转位I420则为:

Y数据按顺序完整复制,U数据则是从整个Y数据之后加一个字节再每隔一个字节取一次。

手机摄像头的图像数据来源于摄像头硬件的图像传感器,这个图像传感器被固定到手机上后会有一个默认的取景方向,这个取景方向坐标原点于手机横放时的左上角。当应用是横屏时候:图像传感器方向与屏幕自然方向原点一致。而当手机为竖屏时:

方向.png

传感器与屏幕自然方向不一致,将图像传感器的坐标系逆时针旋转90度,才能显示到屏幕的坐标系上。所以看到的画面是逆时针旋转了90度的,因此我们需要将图像顺时针旋转90度才能看到正常的画面。而Camera对象提供一个setDisplayOrientation接口能够设置预览显示的角度:

设置方向.png

根据文档,配置完Camera之后预览确实正常了,但是在onPreviewFrame中回调获得的数据依然是逆时针旋转了90度的。所以如果需要使用预览回调的数据,还需要对onPreviewFrame回调的byte[] 进行旋转。

旋转前:

yuv.png

后置摄像头需要顺时针旋转90度,旋转后:

yuv顺时针旋转90度.png

前置摄像头需要逆时针旋转90度,旋转后:

yuv逆时针旋转90度.png

前置摄像头可能还需要进一步镜像处理,镜像后:

yuv逆时针旋转90度&镜像.png

android nv21,NV21与I420相关推荐

  1. android bitmap nv21,Nv21转Bitmap(高效率转化)

    https://blog.csdn.net/qq1137830424/article/details/81980673 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附 ...

  2. android nv21图片格式,Android -- 将NV21图像保存成JPEG

    //保存一张照片 String fileName = "IMG_" + String.valueOf(index) + ".jpg"; //jpeg文件名定义 ...

  3. android bitmap nv21,Android开发之虹软人脸识别活体检测SDK包Bitmap转NV21方法

    /** * Bitmap 转化为 ARGB 数据,再转化为 NV21 数据 * * @param src 传入的 Bitmap,格式为 Bitmap.Config.ARGB_8888 * @param ...

  4. Android平台RTMP推送模块如何对接NV21、YV12、RGB、YUV等编码前数据

    前言 我们在对接Android平台摄像头或者屏幕采集.编码打包推送场景的时候,随着采集设备的不同,出来的数据也是多样化的,比如NV21.YV12.RGB.YUV等,更有图像数据甚至是翻转或者倒置的,如 ...

  5. 音视频数据处理入门:原始视频格式YUV,NV12,NV21,YV12,YU12(I420)

    我们知道,在Camera中设置Preview的回调函数onPreviewFrame时谷歌推荐我们使用NV21,YV12两种格式,因为这两种格式几乎在所有的设备里都通用.然而,视频的格式远远不止这俩种, ...

  6. Android录制视频-nv21转nv12姿势(libyuv使用)

    Android录制视频-nv21转nv12姿势(libyuv使用) 前言 为什么需要转化? libyuv简介 实际使用 1.集成 2.修改代码 3.添加方法 4.项目中使用 总结 前言 近期接触项目当 ...

  7. yuv420格式nv12,nv21,I420,YV12互转

    YUV格式有两大类:planar和packed. 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V. 对于packed的YUV格式,每个像素点的Y ...

  8. I420、YV12、NV12、NV21等常见的YUV420存储格式

    今天要讲的,主流的采样格式YUV420,它的存储格式通常就有四种:I420.YV12.NV12.NV21. 1.  I420.YV12.NV12.NV21的存储格式 简单来讲,它们的存储格式分别为: ...

  9. NV21格式图像旋转 c++,平移、缩放实现代码

    文章目录 NV21格式图像旋转 基础知识 逆时针旋转90° NV21格式图像旋转 刚刚接触Android开发,开始学习一些图像像素格式,需要完成 NV21 的图像进行旋转,这里我们将从原理开始分析,分 ...

最新文章

  1. 数据结构:在下述几种树中,()可以表示静态查找表?
  2. code point,code unit
  3. xmx java_为什么我的Java进程比Xmx消耗更多的内存?
  4. 《Python核心编程》笔记 Python对象
  5. 服务框架及服务治理组件——业界调研
  6. 2020年工业互联网行业研究报告(国盛证券)
  7. java 对象等于_java 之类对象等于对象 | 学步园
  8. c#开发大全、系列文章、精品教程
  9. 苹果mac微软windows远程连接工具:microsoft remote desktop
  10. python 数据类笔试题_数据分析岗Python笔试题
  11. IndexError: index 0 is out of bounds for axis 0 with size 0
  12. python数据化运营案例---简单销售预测案例(线性回归模型)
  13. 火车头采集翻页内容_火车头采集器怎么采集内容页的分页
  14. 2018 ISCC re\web\misc WP
  15. 90%的人死在了大学里,只不过八十岁才埋
  16. UnityHub使用方法教程和简介
  17. 计算机专业该不该考研
  18. vue图片文件太大无法上传
  19. jquery分页打印
  20. bss段和data段的区别

热门文章

  1. 近期业务大量突增微服务性能优化总结-2.开发日志输出异常堆栈的过滤插件
  2. 安卓软件远程连接ConnectBot v1.8.6
  3. Github仓库如何选择开源许可证
  4. 修改ftp更新服务器地址,修改ftp服务器地址
  5. Android监听消息(二)——电话及短信监听
  6. Excel导入后的后台响应数据前端已经接收但是响应不出来
  7. Python+Vue计算机毕业设计BeatHouse伴奏交易平台z19pu(源码+程序+LW+部署)
  8. db,dbc,dbm
  9. Java使用POI操作XWPFDocument中的XWPFParagraph(段落)对象的属性略解
  10. Amdahl定律(阿姆达尔定律)