在谷歌搜索时,我找到了this information,如果我想让我的安卓设备启用相机录制高帧率视频,我需要通过设备供应商放置特定的参数来调用相机API。
例如,通过调用以下方法,我可以使我的Galaxy S6相机应用程序持续记录120帧每秒。
但问题是,并不是所有的设备(包括LG和其他厂商)都支持120fps(或更高)。因此,当运行我的相机应用程序进行错误处理时,我需要知道API级别中的最大实时fps。
在我的情况下,Camera.Parameters.getSupportedPreviewFpsRange()对我不起作用。 它仅返回最大值30000(表示30fps),即使它可以记录120000(120fps)。 我认为这是因为以高帧率(超过30fps)录制与相机硬件属性密切相关,这就是我需要调用特定于供应商的API的原因。
是否有一种通用方法可以通过相机设备在API级别上获取最大fps?
---------------------- 编辑 ----------------------
在API21(LOLLIPOP)上,我们可以使用StreamConfigurationMap来获取高速fps录制的最大值。使用方法如下。
例如,通过调用以下方法,我可以使我的Galaxy S6相机应用程序持续记录120帧每秒。
camera = Camera.open();
Camera.Parameters parms = camera.getParameters();
// for 120fps
parms.set("fast-fps-mode", 2); // 2 for 120fps
parms.setPreviewFpsRange(120000, 120000);
但问题是,并不是所有的设备(包括LG和其他厂商)都支持120fps(或更高)。因此,当运行我的相机应用程序进行错误处理时,我需要知道API级别中的最大实时fps。
在我的情况下,Camera.Parameters.getSupportedPreviewFpsRange()对我不起作用。 它仅返回最大值30000(表示30fps),即使它可以记录120000(120fps)。 我认为这是因为以高帧率(超过30fps)录制与相机硬件属性密切相关,这就是我需要调用特定于供应商的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.
Range<Integer>[] fpsRange = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
- Sunggook Kim