Как я могу достичь желаемого fps с анимацией рисования на холсте с помощью cameraX? - PullRequest
0 голосов
/ 30 января 2020

Я использую CameraX, и я хотел бы воспроизводить анимацию поверх холста с теми же кадрами в секунду, которые использовались CameraX для показа предварительного просмотра.

вопрос 1:

Как играть 60 frames animation with 30 fps (for example) CameraX за 2 секунды, если это вообще возможно.

вопрос 2:

Как я могу получить CameraX fps?

1 Ответ

0 голосов
/ 30 января 2020

Что касается первого вопроса, добавьте слушателя к вашей SurfaceTexture и прослушайте onSurfaceTextureUpdated. Вы можете использовать этот метод в качестве справочного материала, чтобы знать, когда визуализировать анимацию.

О втором вопросе, насколько я знаю, в CameraX нет API для получения FPS из-за переменной природы камеры. предварительный просмотр с точки зрения FPS. Только запись видео имеет фиксированное значение FPS, для другого режима предварительного просмотра камеры FPS является переменным. С другой стороны, API-интерфейс camera2 можно настроить с диапазоном FPS (min-max), поэтому я предполагаю, что API-интерфейс CameraX будет иметь нечто подобное.

В качестве альтернативы вы можете динамически вычислять FPS, используя метод onSurfaceTextureUpdated. В inte rnet вы найдете много страниц, показывающих, как рассчитать 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();
}
...