android - Camera2 API 支持的 FPS

标签 android range frame-rate android-camera2

我正在尝试使用以下代码从 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 帧速率范围列表。

这些是 Pixel2 移动设备的 fpsRange(上限和下限)数组的值。

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

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

最佳答案

请看一下这个方法,我从 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());
  • 在方法 CaptureStiilPicture() 中 -> 在捕获生成器之后设置 brignes

    captureBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,(getRange()));

  • 关于android - Camera2 API 支持的 FPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55180509/

    相关文章:

    java - Android 自定义 ListView 与图片和子项目搜索 View 不起作用

    android - 是否有同时执行的 AsyncTasks 的限制?

    algorithm - 范围的超集——寻找最大距离

    javascript - 每秒帧数问题

    java - 空对象引用上的 NullPointerException : Connection. createStatement()

    android - 将Google Play服务库导入Android studio 1.0

    r - 寻找数据框值的范围

    php - 当验证条件存储在 SQL 数据库中时如何验证用户的日期输入

    c++通过 Hook 调用每个帧的函数来计算FPS

    c++ - 在循环C++中限制fps