Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19173
  • 博文数量: 6
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 70
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-04 10:38
个人简介

狂奔的蜗牛

文章分类

全部博文(6)

文章存档

2015年(6)

我的朋友

分类: Android平台

2015-04-17 14:46:28

MediaCodec对两种yuv格式进行编码
COLOR_FormatYUV420SemiPlanar 对应NV12
COLOR_FormatYUV420Planar 对应I420

用Camera.PreviewCallback onPreviewFrame()出来的yuv有两种
NV21和YV12

所以送编码器之前需要进行yuv格式转换

点击(此处)折叠或打开

  1. private void swapNV21toI420(byte[] nv21bytes, byte[] i420bytes, int width, int height)
  2.     {
  3.          final int iSize = width*height;
  4.         System.arraycopy(nv21bytes, 0, i420bytes, 0, iSize);
  5.         
  6.         for(int iIndex = 0; iIndex <iSize/2; iIndex+=2) {
  7.             i420bytes[iSize + iIndex/2 + iSize/4 ] = nv21bytes[iSize + iIndex]; //U
  8.             i420bytes[iSize + iIndex/2] = nv21bytes[iSize + iIndex +1]; //V
  9.         }
  10.     }
  11.     
  12.     private void swapNV21toNV12(byte[] nv21bytes, byte[] nv12bytes, int width, int height) {
  13.         byte bTmp = 0;
  14.         final int iSize = width*height;
  15.         for (int i = iSize; i < iSize+iSize/2; i += 2) {
  16.             bTmp = nv21bytes[i+1];
  17.             nv21bytes[i+1] = nv21bytes[i];
  18.             nv21bytes[i] = bTmp;
  19.         }
  20.         System.arraycopy(nv21bytes, 0, nv12bytes, 0, nv21bytes.length);
  21.     }

阅读(3944) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~