Access high fps camera on Android

scrpn picture scrpn · Feb 26, 2016 · Viewed 16.3k times · Source

There are phones with official support for high fps recording, like the Galaxy S5 and S6. I tried both, with both you can record high fps videos (60 or even 120 fps) with the default camera app. (Or on the S6 using Gear VR's "Passthrough Camera" function.) BUT: when you query the camera's capabilities through the standard Android APIs (tried it on both S5 on 4.4 and 5.0 and S6 on 5.1, tried both the old and the new camera2 APIs) in all cases, 30 fps is reported as the highest available. Does this mean that these phones use private proprietary APIs to access high fps capabilities and there's no standard way to access higher fps? Is this the shortcoming of the manufacturer (which might change with future software versions or phones) or am I just missing something? I don't even need slow motion, just high frame rate camera for real-time usage, so 60 fps would be sufficient.

Sample I tried for querying camera fps in the old camera API;

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

Same in 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);
}

I only get ranges: [15, 15], [24, 24], [10, 30], [15, 30], [30, 30] (even less ranges with the old camera API).

In camera2 API I found some methods for accessing high fps camera recording: createConstrainedHighSpeedCaptureSession(). But it defines high speed video recording as "frame rate >=120fps", so I shouldn't even need it for 60 fps. Anyway I queried this capability, but it seems it's not supported on the S6. The code I tried:

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]);
    }
}

It says it only support capabilities 0, 1, 2, 3, 5, 6. REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO would be 9.

At this point I've pretty much ran out if ideas suspecting these capabilities truly aren't available through standard APIs on these phones. Any help is appreciated.

I know the question is pretty similar/related to this: Capture high fps videos using new Camera API But my question is more general, not specific to neither the old nor the new camera API, or specific devices. I'm also curious what supported fps other new flagship devices report through the standard APIs as I could only test it on 3 devices.

Answer

kfir picture kfir · Mar 20, 2021

After many discussions I had with Samsung developer support I can assure you the following:

60 FPS was never officially supported by Samsung. It was definitely available on S9, S10, S20 (regular) but they completely stopped the support on the S21 line. You can use the high speed capturing but it is designed to 120 or 240. currently their S21 series and the S20 Plus & Ultra declare and approve that the 120/240 is available - but it does not work. they said they will check it.

How come the high speed return ranges of [30:120] and [60:120] - those ranges are designed for the preview mode and if you use it for the recording - you can get FPS of 30 until 120 - depends on the amount of light you got. For example : one recording you will get 90 FPS, and one recording 120 FPS. you can only promise a stable 120 FPS if you use the [120:120] and you will not get [60:60] or [90:90] if you use the high speed session - only 120 or 240.

How come the S20 Ultra is less capable of the S9? people pay good money to upgrade and get worse performance. I do not get it. Also - I get bad reviews because people who upgrade from S9 to S21 think that my app stopped recording in 60 FPS.

You can follow all of my discussions with them on my Facebook page: https://www.facebook.com/Background-video-recorder-Ultimate-121145775953677 You are welcome to share my posts or to contact their support and complain.

Official answer from Samsung