如何使用 cameraX 在 canvas 上绘制动画来实现所需的 fps?

How can I achieve a desired fps with animation drawing on canvas with cameraX?

我正在使用 CameraX,我想在 canvas 上播放动画,帧数与 CameraX 用来显示预览的帧数相同。

问题 1:

如果可能的话,我怎样才能在 2 秒内播放 60 frames animation with 30 fps (for example) CameraX。

问题 2:

如何获得 CameraX fps?

关于第一个问题,给你的SurfaceTexture添加一个监听器,监听onSurfaceTextureUpdated。您可以使用此方法作为参考来了解何时渲染动画。

关于第二个问题,据我所知,CameraX 中没有 API 来获取 FPS,因为相机预览在 FPS 方面的可变性。只有视频录制具有固定的 FPS 值,对于不同的相机预览模式,FPS 是可变的。另一方面,camera2 API 可以配置 FPS 范围(最小-最大),所以我猜 CameraX API 会有类似的东西。

您也可以使用 onSurfaceTextureUpdated 方法动态计算 FPS。在 Internet 上,您会发现许多页面显示如何计算 FPS。 这里有一个小例子,代码未经测试,但应该可以指导你。调用 onSurfaceTextureUpdated 中的方法,经过几次迭代后,您应该获得活动 FPS。

private long lastFpsTime = 0L;
private float fps;

private void computeFPS()
{
    if (this.lastFpsTime != 0L)
    {
        this.fps = 1000.0f / (SystemClock.elapsedRealtime() - this.lastFpsTime);
    }

    this.lastFpsTime = SystemClock.elapsedRealtime();
}