如何使用camera2修改帧率?
How to modify frame rate using camera2?
我正在尝试修改(降低)帧率,以便我们可以对其进行实时操作。但是不能改变帧率。
可能的解决方案包括:
改变CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES
延迟setRepeatingRequest
我们需要降低传递给 Surfaceholder
的生成帧速率,以便可以进一步应用于其中的操作。
正如评论中所建议的,我设法找到了解决方案并回答了我自己的问题,关于我是如何解决这个问题的。
我们首先创建一个mPreviewRequestBuilder
的对象,并用它来修改帧率。
private CaptureRequest.Builder mPreviewRequestBuilder;
// We set up a CaptureRequest.Builder with the output Surface.
mPreviewRequestBuilder
= mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
mPreviewRequestBuilder.addTarget(surface);
我们可以通过创建 Range 的数组并手动设置来实现更改,如下所述。
Range<Integer>[] fps = new Range[size];
正在将自定义值添加到范围 class。
fps[0] = Range.create(2,5);
一旦我们成功地创建了一个范围数组,我们就可以按如下所述设置相机设置:
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,fps[0]);
mPreviewRequest = mPreviewRequestBuilder.build();
Range<Integer> fpsRange = new Range<>(30,60);
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,fpsRange);
此代码有效并设置目标 fps 范围。但是我能够在 S9 plus 上将值设置为 30,60,它提供了大约 45 FPS。即使 [30,60] 在范围内不可用。
我正在尝试修改(降低)帧率,以便我们可以对其进行实时操作。但是不能改变帧率。
可能的解决方案包括:
改变
CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES
延迟
setRepeatingRequest
我们需要降低传递给 Surfaceholder
的生成帧速率,以便可以进一步应用于其中的操作。
正如评论中所建议的,我设法找到了解决方案并回答了我自己的问题,关于我是如何解决这个问题的。
我们首先创建一个mPreviewRequestBuilder
的对象,并用它来修改帧率。
private CaptureRequest.Builder mPreviewRequestBuilder;
// We set up a CaptureRequest.Builder with the output Surface.
mPreviewRequestBuilder
= mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
mPreviewRequestBuilder.addTarget(surface);
我们可以通过创建 Range 的数组并手动设置来实现更改,如下所述。
Range<Integer>[] fps = new Range[size];
正在将自定义值添加到范围 class。
fps[0] = Range.create(2,5);
一旦我们成功地创建了一个范围数组,我们就可以按如下所述设置相机设置:
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,fps[0]);
mPreviewRequest = mPreviewRequestBuilder.build();
Range<Integer> fpsRange = new Range<>(30,60);
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,fpsRange);
此代码有效并设置目标 fps 范围。但是我能够在 S9 plus 上将值设置为 30,60,它提供了大约 45 FPS。即使 [30,60] 在范围内不可用。