android camera yuv帧水平翻转

来源:互联网 发布:威迅java培训 编辑:程序博客网 时间:2024/06/06 00:40

Camera预览时需要对yuv帧做水平翻转处理,直接在   onPreviewFrame(byte[] data, Camera camera)   里调用Mirror函数,对原始yuv数组进行处理,处理完后的图片和预览效果成水平翻转关系。

nv21的镜像算法:


private void Mirror(byte[] src, int w, int h) { //src是原始yuv数组      int i;      int index;      byte temp;      int a, b;      //mirror y      for (i = 0; i < h; i++) {          a = i * w;          b = (i + 1) * w - 1;          while (a < b) {              temp = src[a];              src[a] = src[b];              src[b] = temp;              a++;              b--;          }      }        // mirror u and v      index = w * h;      for (i = 0; i < h / 2; i++) {          a = i * w;          b = (i + 1) * w - 2;          while (a < b) {              temp = src[a + index];              src[a + index] = src[b + index];              src[b + index] = temp;                temp = src[a + index + 1];              src[a + index + 1] = src[b + index + 1];              src[b + index + 1] = temp;              a+=2;              b-=2;          }      }  }

i420的镜像算法:


private void Mirror(byte[] src, int w, int h) { //src是原始yuv数组          int i;          int index;          byte temp;          int a, b;          //mirror y          for (i = 0; i < h; i++) {              a = i * w;              b = (i + 1) * w - 1;              while (a < b) {                  temp = src[a];                  src[a] = src[b];                  src[b] = temp;                  a++;                  b--;              }          }          //mirror u          index = w * h;//U起始位置          for (i = 0; i < h / 2; i++) {              a = i * w / 2;              b = (i + 1) * w / 2 - 1;              while (a < b) {                  temp = src[a + index];                  src[a + index] = src[b + index];                  src[b + index] = temp;                  a++;                  b--;              }          }          //mirror v          index = w * h / 4 * 5;//V起始位置          for (i = 0; i < h / 2; i++) {              a = i * w / 2;              b = (i + 1) * w / 2 - 1;              while (a < b) {                  temp = src[a + index];                  src[a + index] = src[b + index];                  src[b + index] = temp;                  a++;                  b--;              }          }}


I420,YV12,NV12,NV21均属于YUV420,以下为四种格式的排列顺序:

I420:  YYYYYYYY UUVV     =>YUV420P
YV12: YYYYYYYY VVUU     =>YUV420P
NV12: YYYYYYYY UVUV     =>YUV420SP

NV21: YYYYYYYY VUVU     =>YUV420SP



转载地址:http://www.jianshu.com/p/a1b5469a1f05

http://blog.csdn.net/lindonghai/article/details/78259862