使用Camera2 API的低FPS

时间:2017-01-30 21:06:33

标签: android android-camera2

使用新的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)的所有组合。我还忘了哪个旋钮?

编辑:

S5和Z3 Compact被归类为LEGACY设备。我在其他LEGACY设备上测试了这段代码,包括

三星Galaxy S5

Xperia Z3 Compact

HTC One M9

华为伴侣S

所有这些都在1080p时返回低帧率(大约15fps)。我发现的其中一部手机LG G4支持FULL配置文件。在那个设备上,我甚至可以在高帧大小的情况下获得30fps。所以我强烈怀疑camera2 api的包装器中存在导致此问题的开销。

1 个答案:

答案 0 :(得分:1)

S5和Z3 Compact被分类为LEGACY设备。我在其他LEGACY设备(包括

三星Galaxy S5

Xperia Z3 Compact

HTC One M9

华为伴侣S

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