Camera2 API的低FPS

问题描述 投票:7回答:1

我使用新的camera2 API的FPS速率较低。特别,尽管从

中选择了最高FPS范围(30,30)
characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);

并设置为

mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, bestFPSRange);

在我测试过的两种设备(三星S5和Xperia Z3 Compact)上,对于高图像分辨率,我得到的平均速率都低得多。这是我设置OnImageAvailableListener的方法:

int format = ImageFormat.YUV_420_888;
Size largest = map.getOutputSizes(format)[0];
Log.d("Images", "sizes: " + Arrays.toString(map.getOutputSizes(format)));
mImageReader = ImageReader.newInstance(largest.getWidth(), largest.getHeight(), format,
        /* maxImages */50);
mImageReader.setOnImageAvailableListener(new OnImageAvailableListener() {

    private int  frames      = 0;
    private long initialTime = SystemClock.elapsedRealtimeNanos();

    @Override
    public void onImageAvailable(ImageReader reader) {
        reader.acquireLatestImage().close();
        frames++;
        if ((frames % 30) == 0) {
            long currentTime = SystemClock.elapsedRealtimeNanos();
            long fps = Math.round(frames * 1e9 / (currentTime - initialTime));
            Log.d("Image", "frame# : " + frames + ", approximately " + fps + " fps");
            frames = 0;
            initialTime = SystemClock.elapsedRealtimeNanos();
        }
    }
}, mBackgroundHandler);

[基本上,上面的if语句每30个样本获取一次平均FPS。实际上,在两个设备上的最高分辨率(1920x1080)上,我看到的fps范围均为15-20 fps。但是,在线上的其他人似乎表明,无论分辨率如何,都应该可以达到30fps,实际上,使用旧的不推荐使用的相机API,我可以在两台设备上以最高的分辨率获得30fps。那我想念什么呢?

我已经尝试了TEMPLATE(例如TEMPLATE_PREVIEW)和格式(例如ImageFormat.YUV_420_888)的所有组合。我忘了扭哪个旋钮?

android android-camera2
1个回答
1
投票
Xperia Z3 Compact

HTC One M9

华为伴侣S

所有人都以1080p返回低帧速率(约15fps)。我发现其中一部手机LG G4支持完整档案。在那台设​​备上,即使在高帧尺寸下,我也能获得30fps。因此,我强烈怀疑在camera2 api的包装中存在开销,从而导致此问题。

© www.soinside.com 2019 - 2024. All rights reserved.