yuv420sp的分两种,nv21和nv12。Android 取摄像头中的数据 ,当使用camera1.0 时,onPreviewFrame返回的数据yuv420sp的nv21,并且camera中取出的数据显示时是偏转的,需要将其旋转顺时针旋转270或逆时针旋转90,注:旋转后宽高对调

/*** 此处为顺时针旋转270* @param data 旋转前的数据* @param imageWidth 旋转前数据的宽* @param imageHeight 旋转前数据的高* @return 旋转后的数据*/
private byte[] rotateYUV420Degree270(byte[] data, int imageWidth, int imageHeight){byte[] yuv =new byte[imageWidth*imageHeight*3/2];// Rotate the Y lumaint i =0;for(int x = imageWidth-1;x >=0;x--){for(int y =0;y < imageHeight;y++){yuv[i]= data[y*imageWidth+x];i++;}}// Rotate the U and V color componentsi = imageWidth*imageHeight;for(int x = imageWidth-1;x >0;x=x-2){for(int y =0;y < imageHeight/2;y++){yuv[i]= data[(imageWidth*imageHeight)+(y*imageWidth)+(x-1)];i++;yuv[i]= data[(imageWidth*imageHeight)+(y*imageWidth)+x];i++;}}return yuv;}
/*** 此处为顺时针旋转旋转90度* @param data 旋转前的数据* @param imageWidth 旋转前数据的宽* @param imageHeight 旋转前数据的高* @return 旋转后的数据*/
private byte[] rotateYUV420Degree90(byte[] data, int imageWidth, int imageHeight)
{byte [] yuv = new byte[imageWidth*imageHeight*3/2];// Rotate the Y lumaint i = 0;for(int x = 0;x < imageWidth;x++){for(int y = imageHeight-1;y >= 0;y--){yuv[i] = data[y*imageWidth+x];i++;}}// Rotate the U and V color componentsi = imageWidth*imageHeight*3/2-1;for(int x = imageWidth-1;x > 0;x=x-2){for(int y = 0;y < imageHeight/2;y++){yuv[i] = data[(imageWidth*imageHeight)+(y*imageWidth)+x];i--;yuv[i] = data[(imageWidth*imageHeight)+(y*imageWidth)+(x-1)];i--;}}return yuv;
}

顺时针旋转180度

private byte[] rotateYUV420Degree180(byte[] data, int imageWidth, int imageHeight){byte[] yuv =new byte[imageWidth*imageHeight*3/2];int i =0;int count =0;for(i = imageWidth * imageHeight -1; i >=0; i--){yuv[count]= data[i];count++;}i = imageWidth * imageHeight *3/2-1;for(i = imageWidth * imageHeight *3/2-1; i >= imageWidth* imageHeight; i -=2){yuv[count++]= data[i -1];yuv[count++]= data[i]; }return yuv;
}

用mediacode编码h264时,因为mediacode编码视频只支持yuv420sp的nv12,需要将nv21转为nv12

private void NV21ToNV12(byte[] nv21,byte[] nv12,int width,int height){if(nv21 == null || nv12 == null)return;int framesize = width*height;int i = 0,j = 0;System.arraycopy(nv21, 0, nv12, 0, framesize);for(i = 0; i < framesize; i++){nv12[i] = nv21[i];}for (j = 0; j < framesize/2; j+=2){nv12[framesize + j-1] = nv21[j+framesize];}for (j = 0; j < framesize/2; j+=2){nv12[framesize + j] = nv21[j+framesize-1];}
}

NV21 旋转+转为NV12相关推荐

  1. android camera之nv21旋转

    android camera之nv21旋转 这周做的一个android的camera开发,需要获取到视频帧数据,并且需要是nv21格式的byte数组,并且视频帧的图像需要是正方向的.和android相 ...

  2. CameraX 三:获取预览流

    前言 话接上文,本篇将要学习如何获取预览流,有了预览流我们可以做很多场景,如人形.人脸.车牌识别,如推流到流媒体服务器等等. 如果感到不适,强烈建议从CameraX 一看过来 源码机票 布局文件 &l ...

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

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

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

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

  5. opecv BGR转NV21

    opecv BGR转NV21 在opencv中,并没有直接转NY21的方法,所以需要先转到YUV_I420再转成NV21. YUV_I420格式:Y之后是所有的U分量,再接所有的V分量. NV21格式 ...

  6. JPG图像转存为NV12格式

    使用opencv函数 将JPG图像转存为NV12格式分为两步: 将BGR格式转为I420: 将I420格式转为NV12或NV21: 其中,I420.NV12.NV21格式如下: I422 属于 YUV ...

  7. Android用MediaCodec将相机预览帧编码成MP4视频

    文章目录 知识预备 实现思路 获取图像数据帧 编码视频 初始化编码器 编码转换 编码视频 问题记录 最近项目中,有一个在扫码同时录视频的需求.扫码框架是通过摄像头 onPreviewFrame方法获取 ...

  8. 王学岗视频编码————视频编解码基础与MediaCodec编解码(对应1234节)

    为什么要学习音视频 核心竞争力,高端人才相当缺乏,技术迭代慢, 为什么音视频学不好 资料比较少,音视频最难的地方在于编码,没有形成完整的体系 关于音视频编码 上 1,视频文件:MP4,RMVB, AV ...

  9. 相机ISP图像处理流程

    摄像机模组与图像处理: 事实上,ISP 除了上面提到的主要功能外,还需要支持 DENOISE,CONTRAST.SATURATION.SHARPNESS 等调整功能. 3A技术即自动对焦(AF).自动 ...

  10. EasyPusher安卓Android手机直播推送之MediaCodec 硬编码H264格式

    EasyPusher安卓Android手机直播推送之MediaCodec 硬编码H264格式 最近在研究EasyDarwin的Push库EasyPusher,EasyPusher可以推送H264视频到 ...

最新文章

  1. 扫码点餐小程序源码_扫码点餐小程序有什么用?怎么制作?
  2. 基于SSM实现旅游网站管理系统
  3. 【网络基础】路由表,分组转发算法
  4. 隐藏文件真实下载地址(支持超大文件)源码
  5. layui爱准挂更新密码静态WEB页(临时)
  6. mysql查询数据上一条_MySQL查询当前数据上一条和下一条的记录
  7. Linux字体最好看的发行版,如何给任意一款 Linux 发行版添加漂亮的字体
  8. regife:面板交互固定效应模型-InteractiveFixedEffect
  9. win10时间校对正确
  10. 魔兽争霸平台显示服务器地址错误,发现(魔兽争霸出现错误的解决方法)
  11. 最新章节 第238章 超级计算机的安排,第238章 黄花大闺女
  12. 深度剖析MyBatis 的执行流程(3)--映射器
  13. 大数据行业必须掌握的核心技术
  14. 一键构建云上高可用蛋白质结构预测平台
  15. 忙于事业疏于情感老婆网上找情人
  16. 使用FlexPaper加载swf出现无法加载的问题
  17. java刷机教程,小米Mix2s刷机教程
  18. 我是这么破解wordpress付费主题reborn的
  19. 最全电商分类信息(07)
  20. 电商裂变新玩法—全新拼团!

热门文章

  1. 保存的离线网页总是自动跳转怎么办???
  2. Jenkins安装教程
  3. -f shell 模糊匹配_shell模糊匹配与正则详解
  4. idea 如何查看jdk源码
  5. chrome官网下载离线安装包
  6. [camera][v4l2][第五话]: UVC协议学习
  7. python卸载指令_如何卸载python插件
  8. shell转化bat工具_shell脚本与bat转换
  9. 三星s8 android9.0官方rom,三星s8刷机包(最新固件升级V9.0)
  10. 自己写的配筋的Android应用——RCHelper,依据SL191-2008