android camera yuv帧水平翻转

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值