gpt4 book ai didi

android - 如何知道 android 设备在 API 级别支持的最大 fps?

转载 作者:太空狗 更新时间:2023-10-29 14:49:07 35 4
gpt4 key购买 nike

在谷歌搜索时,我得到了 this information如果我想让我的相机在 Android 设备上录制高帧率视频,我需要通过设备供应商设置特定参数以调用相机 API。

例如,通过调用下面的方法,我可以让我的 Galaxy S6 相机应用程序连续录制 120 fps。

camera = Camera.open();
Camera.Parameters parms = camera.getParameters();

// for 120fps
parms.set("fast-fps-mode", 2); // 2 for 120fps
parms.setPreviewFpsRange(120000, 120000);

但问题是并非所有设备(包括 LG 和其他供应商)都支持 120 fps(或更高)。因此,在运行我的相机应用程序进行错误处理时,我需要实时了解 API 级别的最大 fps。

就我而言,Camera.Parameters.getSupportedPreviewFpsRange()不适合我。它只返回最大 30000(意味着 30fps),即使它可以以 120000(120 fps)记录。我认为这是因为以高帧率(超过 30 fps)录制与相机硬件属性密切相关,这就是我需要调用供应商特定 API 的原因。

有没有一种通用的方法可以让摄像头设备在 API 级别获得最大 fps?

--------------------编辑--------------------

在 API21(LOLLIPOP) 上,我们可以使用 StreamConfigurationMap 来获取高速 fps 记录的最大值。用法如下。

CameraManager manager = (CameraManager)activity.getSystemService(Context.CAMERA_SERVICE);
String cameraId = manager.getCameraIdList()[0];
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
Range<Integer>[] fpsRange = map.getHighSpeedVideoFpsRanges(); // this range intends available fps range of device's camera.

最佳答案

您可以通过 CamcoderProfile 获取该信息如下启动 API-21:

for (String cameraId : manager.getCameraIdList()) {
int id = Integer.valueOf(cameraId);
if (CamcorderProfile.hasProfile(id, CamcorderProfile.QUALITY_HIGH_SPEED_LOW)) {
CamcorderProfile profile = CamcorderProfile.get(id, CamcorderProfile.QUALITY_HIGH_SPEED_LOW);
int videoFrameRate = profile.videoFrameRate;
//...
}
}

这将为您提供支持高速捕获的最低可用配置文件。我怀疑是否有许多 Lollipop 之前的设备具有这样的硬件可能性(如果有的话),所以这应该可以满足您的需求。

关于android - 如何知道 android 设备在 API 级别支持的最大 fps?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36904707/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com