Java YUV到JPEG导致大量fps丢失

Java YUV到JPEG导致大量fps丢失,java,android,jpeg,yuv,Java,Android,Jpeg,Yuv,我有一个摄像头把画面发送到SurfaceView。我想将这些帧从曲面视图中取出,并将它们发送到其他位置。在最终形式中,图像必须为JPEG格式。为了实现这一点,我正在从字节[]创建一个YUV图像,然后调用compressToJpeg。但是,当我在每一帧上调用compressToJpeg而不是只显示它时,我的FPS从~30变为~4。我注释掉了其他行,这个函数似乎是罪魁祸首 public void onNewRawImage(byte[] data, Size size) { // Conve

我有一个摄像头把画面发送到SurfaceView。我想将这些帧从曲面视图中取出,并将它们发送到其他位置。在最终形式中,图像必须为JPEG格式。为了实现这一点,我正在从字节[]创建一个YUV图像,然后调用
compressToJpeg
。但是,当我在每一帧上调用
compressToJpeg
而不是只显示它时,我的FPS从~30变为~4。我注释掉了其他行,这个函数似乎是罪魁祸首

public void onNewRawImage(byte[] data, Size size) {
    // Convert to JPG
    YuvImage yuvimage=new YuvImage(data, 
        ImageFormat.NV21, size.width, size.height, null);

    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    yuvimage.compressToJpeg(new Rect(0, 0, yuvimage.getWidth(), 
        yuvimage.getHeight()), 80, baos);

    byte[] jdata = baos.toByteArray();

    // Convert to Bitmap
    Bitmap bitmap = BitmapFactory.decodeByteArray(jdata, 0, jdata.length); 
}

是否可以从JPEG格式开始,而不必转换成JPEG格式?我希望我在某处犯了一个错误。非常感谢您提供的任何帮助。

“是否可以从JPEG格式开始,而不必转换为JPEG格式?”--我不这么认为。“我希望我在某个地方犯了一个错误”--您是否将此工作作为预览帧回调的一部分?或者你是异步工作的?这个函数真的不友好。您需要进行大量的字节管理,包括将数据压缩为jpeg格式,然后将其重新压缩为位图(保存未压缩的数据)。如果不进行转换,那么解压将为您节省大量时间。请注意,我认为这或多或少就是您要问的问题。好吧,我会从不进行转换开始。设置多个预览帧缓冲区,并在您自己的工作线程(或线程池)上异步处理它们。您可能希望查看RenderScript ScriptIntrinsics for YUV to RGB:并查看RenderScript测试用例应用程序,尤其是LivePreview“是否可以以JPEG格式启动而不必转换为JPEG格式?””“我想没有。“我希望我在某个地方犯了一个错误”--您是否将此工作作为预览帧回调的一部分?或者你是异步工作的?这个函数真的不友好。您需要进行大量的字节管理,包括将数据压缩为jpeg格式,然后将其重新压缩为位图(保存未压缩的数据)。如果不进行转换,那么解压将为您节省大量时间。请注意,我认为这或多或少就是您要问的问题。好吧,我会从不进行转换开始。设置多个预览帧缓冲区,并在您自己的工作线程(或线程池)上异步处理它们。您可能希望查看用于YUV到RGB:的RenderScript ScriptIntrinsics,并查看RenderScript测试用例应用程序,尤其是LivePreview