如何获得像Snapchat这样更高的相机预览fps?

时间:2014-02-05 20:17:49

标签: android camera

在Android上,

任何人都知道Snapchat会在相机预览中获得如此高的fps吗?我尝试了各种方法:

  • 使用textureview而不是表面视图
  • 强制硬件加速
  • 使用较低分辨率
  • 使用不同的预览格式(YV12,NV21丢帧)
  • 更改对焦模式

没有人把我留在接近恒定30fps的地方,或者甚至高于那个看起来很高兴的地方。我可以得到与股票谷歌相机应用程序相同的fps,但这不是很好,我的显示分辨率低得多。

编辑:

使用的方法与官方Android视频录制应用程序使用的方法相同。预览图像质量相同,锁定为30fps。

2 个答案:

答案 0 :(得分:3)

尝试这样做有效

public void takeSnapPhoto() {
camera.setOneShotPreviewCallback(new Camera.PreviewCallback() {
    @Override
    public void onPreviewFrame(byte[] data, Camera camera) {
        Camera.Parameters parameters = camera.getParameters();
        int format = parameters.getPreviewFormat();
        //YUV formats require more conversion
        if (format == ImageFormat.NV21 || format == ImageFormat.YUY2 || format == ImageFormat.NV16) {
            int w = parameters.getPreviewSize().width;
            int h = parameters.getPreviewSize().height;
            // Get the YuV image
            YuvImage yuv_image = new YuvImage(data, format, w, h, null);
            // Convert YuV to Jpeg
            Rect rect = new Rect(0, 0, w, h);
            ByteArrayOutputStream output_stream = new ByteArrayOutputStream();
            yuv_image.compressToJpeg(rect, 100, output_stream);
            byte[] byt = output_stream.toByteArray();
            FileOutputStream outStream = null;
            try {
                // Write to SD Card
                File file = createFileInSDCard(FOLDER_PATH, "Image_"+System.currentTimeMillis()+".jpg");
                //Uri uriSavedImage = Uri.fromFile(file);
                outStream = new FileOutputStream(file);
                outStream.write(byt);
                outStream.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
            }
        }
    }
});}

答案 1 :(得分:2)

我相信他们使用的是Android NDK。您可以找到更多信息in android developer

在图像和视频处理等性能关键任务中,使用纯C / C ++比JAVA代码更快。

您还可以尝试使用其他编译器(如the Intel compiler)编译应用程序来提高性能。

相关问题