Доступ к высокоскоростной fps-камере на Android

Есть телефоны с официальной поддержкой записи с высоким fps, например, Galaxy S5 и S6. Я попробовал оба: вы можете записывать видео с высоким fps (60 или даже 120 кадров в секунду) с помощью приложения камеры по умолчанию. (Или на S6, используя функцию «Passthrough Camera» Gear VR.) НО: когда вы запрашиваете возможности камеры через стандартные API Android (пробовали ее как на S5 на 4.4 и 5.0, так и на S6 на 5.1, пробовали как старые, так и новые Camera2 API) во всех случаях, 30 fps сообщается как самый высокий доступный. Означает ли это, что эти телефоны используют частные API-интерфейсы для доступа к высокоскоростным каналам fps и нет стандартного способа доступа к более высоким значениям fps? Это недостаток производителя (который может измениться с будущими версиями программного обеспечения или телефонами), или я просто что-то пропустил? Мне даже не требуется замедленное движение, просто камера с высокой частотой кадров для использования в реальном времени, поэтому будет достаточно 60 кадров в секунду.

Образец, который я попробовал для запроса fps камеры в API старой камеры;

List<Camera.Size> a = camera.getParameters().getSupportedPreviewSizes(); List<int[]> b = camera.getParameters().getSupportedPreviewFpsRange(); int[] c = new int[2]; camera.getParameters().getPreviewFpsRange(c); 

То же самое в Camera2 API:

 CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); String[] cameras = manager.getCameraIdList(); for(String camera : cameras) { CameraCharacteristics cc = manager.getCameraCharacteristics(camera); Range<Integer>[] fpsRange = cc.get(cc.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES); } 

Я получаю только диапазоны: [15, 15], [24, 24], [10, 30], [15, 30], [30, 30] (еще меньше диапазонов со старым API-интерфейсом камеры).

В API камеры2 я нашел несколько способов доступа к записи с высокой частотой кадров fps: createConstrainedHighSpeedCaptureSession () . Но он определяет высокоскоростную видеозапись как «частота кадров> = 120 кадров в секунду», поэтому мне даже не нужно ее на 60 кадров в секунду. В любом случае я запросил эту возможность, но, похоже, на S6 она не поддерживается. Код, который я пробовал:

 CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); String[] cameras = manager.getCameraIdList(); for(String camera : cameras) { CameraCharacteristics cc = manager.getCameraCharacteristics(camera); CameraCharacteristics.Key<int[]> aa = cc.REQUEST_AVAILABLE_CAPABILITIES; for (int i = 0; i < cc.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES).length; i++) { Log.e(TAG, "Capability: " + cc.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES)[i]); } } 

Он говорит, что он поддерживает только возможности 0, 1, 2, 3, 5, 6. REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO будет 9.

На данный момент я довольно сильно закончил, если идеи, подозревающие эти возможности, действительно недоступны через стандартные API на этих телефонах. Любая помощь приветствуется.

Я знаю, что вопрос очень похож / связан с этим: Захват видео высокой четкости с использованием новых API-интерфейсов камеры. Но мой вопрос более общий, не специфичный ни для старого, ни для нового API-интерфейсов камеры, ни для определенных устройств. Мне также интересно, что поддерживало fps другие новые флагманские устройства, отправляемые через стандартные API, поскольку я мог только протестировать его на 3 устройствах.