java - 两个窗口同时预览摄像头的内容
怪我咯
怪我咯 2017-04-17 14:54:03
[Java讨论组]

最近项目有个需求,实现在一个界面上两个窗口同时预览Camera的内容,Android中摄像头只能被一个SurfaceView调用,后来想了个办法:在摄像头的预览回调函数(mCamera.setPreviewCallback)中获取每一帧图像的数据,这些数据是YUV格式的,软解码成RGB,然后生成Bitmap,在界面中加一个ImageView,不停的用生成的Bitmap去更新ImageView,这样做可以实现我想要的效果,但是耗费资源比较大,图片延迟也大,大家有什么好的方法可以实现吗?Mediacodec能否更好的解码?该怎么做呢?
解码的方法:

public static int[] convertYUVtoRGB(byte[] yuv, int width, int height) throws NullPointerException, IllegalArgumentException {
        int[] out = new int[width * height];
        int sz = width * height;

        int i, j;
        int Y, Cr = 0, Cb = 0;
        for (j = 0; j < height; j++) {
            int pixPtr = j * width;
            final int jp2 = j >> 1;
            for (i = 0; i < width; i++) {
                Y = yuv[pixPtr];
                if (Y < 0)
                    Y += 255;
                if ((i & 0x1) != 1) {
                    final int cOff = sz + jp2 * width + (i >> 1) * 2;
                    Cb = yuv[cOff];
                    if (Cb < 0)
                        Cb += 127;
                    else
                        Cb -= 128;
                    Cr = yuv[cOff + 1];
                    if (Cr < 0)
                        Cr += 127;
                    else
                        Cr -= 128;
                }
                int R = Y + Cr + (Cr >> 2) + (Cr >> 3) + (Cr >> 5);
                if (R < 0)
                    R = 0;
                else if (R > 255)
                    R = 255;
                int G = Y - (Cb >> 2) + (Cb >> 4) + (Cb >> 5) - (Cr >> 1)
                        + (Cr >> 3) + (Cr >> 4) + (Cr >> 5);
                if (G < 0)
                    G = 0;
                else if (G > 255)
                    G = 255;
                int B = Y + Cb + (Cb >> 1) + (Cb >> 2) + (Cb >> 6);
                if (B < 0)
                    B = 0;
                else if (B > 255)
                    B = 255;
                out[pixPtr++] = 0xff000000 + (B << 16) + (G << 8) + R;
            }
        }

        return out;
    }
怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(1)
大家讲道理

自己顶一下!

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号