Camera2 API Samsung Galaxy S9+ нет поддерживаемых диапазонов FPS выше 240?
Я пишу приложение с использованием Camera2 API для захвата замедленной съемки. Я знаю, что Samsung Galaxy S9+ может записывать медленное движение до 960 кадров в секунду, и для этого конкретного проекта мне нужно записать 480 кадров в секунду.
У меня проблема в том, что map.getHighSpeedVideoFpsRangesFor() с 720p или 1080p возвращает максимальный диапазон [240, 240], и если я пытаюсь вручную задать диапазон CaptureRequest.Builder [480, 480], я получаю следующее исключение:
IllegalArgumentException while invoking public abstract void android.hardware.camera2.CameraCaptureSession$StateCallback.onConfigured(android.hardware.camera2.CameraCaptureSession)
java.lang.IllegalArgumentException: Fps range [480, 480] in the request is not a supported high speed fps range [[120, 120], [240, 240], [60, 120], [30, 120], [60, 240], [30, 240]]
at android.hardware.camera2.utils.SurfaceUtils.checkConstrainedHighSpeedSurfaces(SurfaceUtils.java:151)
at android.hardware.camera2.impl.CameraConstrainedHighSpeedCaptureSessionImpl.createHighSpeedRequestList(CameraConstrainedHighSpeedCaptureSessionImpl.java:83)
at ch.package.app.RecordActivity.updatePreview(RecordActivity.java:655)
at ch.package.app.RecordActivity.access$700(RecordActivity.java:74)
at ch.package.app.RecordActivity$3.onConfigured(RecordActivity.java:257)
at android.hardware.camera2.impl.CameraConstrainedHighSpeedCaptureSessionImpl$WrapperCallback.onConfigured(CameraConstrainedHighSpeedCaptureSessionImpl.java:398)
at java.lang.reflect.Method.invoke(Native Method)
at android.hardware.camera2.dispatch.InvokeDispatcher.dispatch(InvokeDispatcher.java:39)
at android.hardware.camera2.dispatch.HandlerDispatcher$1.run(HandlerDispatcher.java:65)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.os.HandlerThread.run(HandlerThread.java:65)
Разве невозможно записать 480 FPS на этом устройстве через API? Могу ли я выбрать другой подход? или я что-то не так делаю?
2 ответа
Думаю, это невозможно, хотя Samsung Galaxy S9+ умеет записывать замедленную съемку до 960 кадров в секунду. Это могут делать только системные приложения, а не сторонние приложения.
Galaxy S9 умеет [120, 120]. возможно также [240240]. Для достижения стабильной частоты кадров необходимо использовать шаблон записи. а если темно - упадет FPS.
mCameraDevice2.createCaptureRequest(CameraDevice.TEMPLATE_RECORD)
Большего достичь не может. даже S20 и S21 с трудом поддерживают 240, поверьте - я пробовал. Вы можете проверить мой канал для примеров записи экрана. Например:https://youtu.be/ioCqSn1Qdqs
Я много раз задавал эту тему на сайте поддержки Samsung - их официальный ответ - что они не позволяют более 30 FPS.
Кстати, вам также нужно проверить, поддерживает ли медиа-рекордер профиль быстрой / высокой скорости, иначе он не сможет записывать. проверить вот так:
if (resolution == 720 && CamcorderProfile.hasProfile(camID, CamcorderProfile.QUALITY_HIGH_SPEED_720P))
profile = CamcorderProfile.get(camID, CamcorderProfile.QUALITY_HIGH_SPEED_720P);