Camera2 API中支持的FPS

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

我试图使用下面的代码从Camera2 API获得支持的每秒帧数值。

CameraManager manager = (CameraManager)activity.getSystemService(Context.CAMERA_SERVICE);
...
String cameraId = manager.getCameraIdList()[0];
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
Range<Integer>[] fpsRanges = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);

开发者网站称CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES用于获取相机设备支持的CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE的帧速率范围列表。

这些是Pixel 2 mobile的fbs Range(上部和下部)数组的值。

[15, 15], [24, 24], [7, 30], [30, 30], [7, 60], [60, 60]

这是否意味着上述设备支持从7到60的帧速率,即7,15,24,30和60?我对这些价值观感到有点困惑。

android range frame-rate android-camera2
1个回答
0
投票

请看看这个方法,我从stackoverflow得到这个

private Range<Integer> getRange() {
    CameraCharacteristics chars = null;
    CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
    try {
        chars = manager.getCameraCharacteristics(mCameraId);
        Range<Integer>[] ranges = chars.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
        Range<Integer> result = null;
        for (Range<Integer> range : ranges) {
            int upper = range.getUpper();
            int lower = range.getLower();
            // 10 - min range upper for my needs
            Log.e("Upper fps :",""+upper);
            Log.e("range fps :",""+range);
            if (upper >= 10000) {
                if (result == null || upper < result.getUpper().intValue()) {
                    Range<Integer> newsrange = new Range<>(range.getLower()/1000,range.getLower()/1000);
                    result = newsrange;
                    Log.e("result fps :",""+range);

                }
            }
            if (upper >= 10) {
                if (result == null || upper < result.getUpper().intValue()) {
                    result = range;
                    Log.e("result fps :",""+range);

                }
            }
        }
        if (result == null) {
            result = ranges[0];
            Log.e("result in range[0] is :",""+result);
        }
        return result;
    } catch (CameraAccessException e) {
        e.printStackTrace();
        return null;
    }
}

如何使用 ??? 1.在mCameraDevice.createCaptureSession中的createCameraPreviewSession()中:

mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,getRange());
  1. 在方法CaptureStiilPicture() - >在捕获构建器之后设置brignes captureBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,(getRange()));
© www.soinside.com 2019 - 2024. All rights reserved.