NV21 旋转+转为NV12
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相关推荐
- android camera之nv21旋转
android camera之nv21旋转 这周做的一个android的camera开发,需要获取到视频帧数据,并且需要是nv21格式的byte数组,并且视频帧的图像需要是正方向的.和android相 ...
- CameraX 三:获取预览流
前言 话接上文,本篇将要学习如何获取预览流,有了预览流我们可以做很多场景,如人形.人脸.车牌识别,如推流到流媒体服务器等等. 如果感到不适,强烈建议从CameraX 一看过来 源码机票 布局文件 &l ...
- 音视频数据处理入门:原始视频格式YUV,NV12,NV21,YV12,YU12(I420)
我们知道,在Camera中设置Preview的回调函数onPreviewFrame时谷歌推荐我们使用NV21,YV12两种格式,因为这两种格式几乎在所有的设备里都通用.然而,视频的格式远远不止这俩种, ...
- Android录制视频-nv21转nv12姿势(libyuv使用)
Android录制视频-nv21转nv12姿势(libyuv使用) 前言 为什么需要转化? libyuv简介 实际使用 1.集成 2.修改代码 3.添加方法 4.项目中使用 总结 前言 近期接触项目当 ...
- opecv BGR转NV21
opecv BGR转NV21 在opencv中,并没有直接转NY21的方法,所以需要先转到YUV_I420再转成NV21. YUV_I420格式:Y之后是所有的U分量,再接所有的V分量. NV21格式 ...
- JPG图像转存为NV12格式
使用opencv函数 将JPG图像转存为NV12格式分为两步: 将BGR格式转为I420: 将I420格式转为NV12或NV21: 其中,I420.NV12.NV21格式如下: I422 属于 YUV ...
- Android用MediaCodec将相机预览帧编码成MP4视频
文章目录 知识预备 实现思路 获取图像数据帧 编码视频 初始化编码器 编码转换 编码视频 问题记录 最近项目中,有一个在扫码同时录视频的需求.扫码框架是通过摄像头 onPreviewFrame方法获取 ...
- 王学岗视频编码————视频编解码基础与MediaCodec编解码(对应1234节)
为什么要学习音视频 核心竞争力,高端人才相当缺乏,技术迭代慢, 为什么音视频学不好 资料比较少,音视频最难的地方在于编码,没有形成完整的体系 关于音视频编码 上 1,视频文件:MP4,RMVB, AV ...
- 相机ISP图像处理流程
摄像机模组与图像处理: 事实上,ISP 除了上面提到的主要功能外,还需要支持 DENOISE,CONTRAST.SATURATION.SHARPNESS 等调整功能. 3A技术即自动对焦(AF).自动 ...
- EasyPusher安卓Android手机直播推送之MediaCodec 硬编码H264格式
EasyPusher安卓Android手机直播推送之MediaCodec 硬编码H264格式 最近在研究EasyDarwin的Push库EasyPusher,EasyPusher可以推送H264视频到 ...
最新文章
- 扫码点餐小程序源码_扫码点餐小程序有什么用?怎么制作?
- 基于SSM实现旅游网站管理系统
- 【网络基础】路由表,分组转发算法
- 隐藏文件真实下载地址(支持超大文件)源码
- layui爱准挂更新密码静态WEB页(临时)
- mysql查询数据上一条_MySQL查询当前数据上一条和下一条的记录
- Linux字体最好看的发行版,如何给任意一款 Linux 发行版添加漂亮的字体
- regife:面板交互固定效应模型-InteractiveFixedEffect
- win10时间校对正确
- 魔兽争霸平台显示服务器地址错误,发现(魔兽争霸出现错误的解决方法)
- 最新章节 第238章 超级计算机的安排,第238章 黄花大闺女
- 深度剖析MyBatis 的执行流程(3)--映射器
- 大数据行业必须掌握的核心技术
- 一键构建云上高可用蛋白质结构预测平台
- 忙于事业疏于情感老婆网上找情人
- 使用FlexPaper加载swf出现无法加载的问题
- java刷机教程,小米Mix2s刷机教程
- 我是这么破解wordpress付费主题reborn的
- 最全电商分类信息(07)
- 电商裂变新玩法—全新拼团!
热门文章
- 保存的离线网页总是自动跳转怎么办???
- Jenkins安装教程
- -f shell 模糊匹配_shell模糊匹配与正则详解
- idea 如何查看jdk源码
- chrome官网下载离线安装包
- [camera][v4l2][第五话]: UVC协议学习
- python卸载指令_如何卸载python插件
- shell转化bat工具_shell脚本与bat转换
- 三星s8 android9.0官方rom,三星s8刷机包(最新固件升级V9.0)
- 自己写的配筋的Android应用——RCHelper,依据SL191-2008