【问题标题】:How to modify frame rate using camera2?如何使用camera2修改帧率?
【发布时间】:2018-12-28 10:51:47
【问题描述】:

我正在尝试修改帧速率(降低它),以便我们可以对其进行实时操作。但不能改变帧率。

可能的解决方案包括:

  • 更改CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES

  • 延迟setRepeatingRequest

我们需要降低传递给Surfaceholder 的生成帧速率,以便进一步应用于其中的操作。

【问题讨论】:

  • CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES 需要更改,但在哪里更改?
  • CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES 是只读的。您可以设置 CONTROL_AE_TARGET_FPS_RANGE,但它可能只是可用范围之一。

标签: java android android-camera android-camera2


【解决方案1】:

正如评论中所建议的,我设法找到了解决方案并回答了我自己的问题,即我是如何解决问题的。

我们首先创建一个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];

向 Range 类添加自定义值。

fps[0] = Range.create(2,5);

一旦我们成功地创建了一个 Range 数组,我们就可以设置相机设置,如下所述:

mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,fps[0]);
mPreviewRequest = mPreviewRequestBuilder.build();

【讨论】:

  • captureRequest.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_OFF); captureRequest.set(CaptureRequest.SENSOR_FRAME_DURATION, mFrameDuration);
【解决方案2】:
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] 在范围内不可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 2020-05-27
    • 2019-06-25
    • 2020-02-24
    • 1970-01-01
    • 2011-11-26
    相关资源
    最近更新 更多