16

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.

Community
  • 1
  • 1
scrpn
  • 193
  • 1
  • 2
  • 8
  • Another thing to consider is that they might actually capture at 30fps, and fill the remaining frames via interpolation, just so they can advertise 60/120fps capture. Other than that I think it is quite common for manufacturers to have their own special camera app that takes advantage of non-standard camera features with non-standard APIs. – personne3000 Feb 26 '16 at 16:47
  • I don't think it's interpolation, I'm fairly sure it's real 60/120 fps recording, there are phones that are even capable of real 240 fps recording. Yeah I think it's fairly common to use camera features with non-standard APIs, but I would think the main reason for that was the old, obsolete API (though I don't see why simple high-fps recording wouldn't be possible on the old API) and that the camera2 API should change that. – scrpn Feb 29 '16 at 09:08
  • Maybe it's happening, just slowly as manufacturers need new drivers for the new API (even though this new API is over a year old now). I would think it would be good for them if they would use standard APIs too because then all 3rd party app could use these features, and there's a growing demand for features like this. There's many type of applications that could benefit from high fps camera, like slow motion videos, VR, etc. – scrpn Feb 29 '16 at 09:09
  • Update: just received the marshmallow (6.0.1) update for the S6. While the reported max fps is still 30 fps with both the old and the new API, now it reports REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO to be available. Interesting. – scrpn Mar 07 '16 at 12:31
  • 60 fps definitely works. 120 fps also seems to happen but its not possible to access the data at that rate as far as I can tell. http://pastebin.com/LVdYkWFR – twerdster Jun 14 '16 at 10:27
  • Another update: Pixel XL with the latest software does report [60, 60] fps range in the regular (not high speed) API and it is indeed very smooth (when used with a small enough resolutions like 720p). This is the only phone I've seen so far that does this though, so on most others, you still have to use the high speed API to get anything higher than 30 fps. – scrpn Jun 06 '17 at 09:55
  • 1
    @scrpn So seems there was a firmware problem, please, answer your own question and mark it as resolved to make this clear Thanks. I'm glad this seems finally works :D – Sulfkain Feb 14 '18 at 12:28

1 Answers1

0

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 have a bug on the S20 & S21 Snapdragon/USA version - it still works like a charm on the Exynos/worldwide version - if needed I have screen recording from both. I have reported it to Samsung and waiting for answers.

You can use the high speed capturing but it is designed only for 120 FPS or 240 FPS. currently their S21 series and the S20 Plus & Ultra Snapdragon/USA version declare and approve that the 120/240 is available - but it does not work. all ok with the Exynos/worldwide version.

If you ask yourself - how come the high speed return also 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 will get FPS of 30 until 120 - depends on the amount of light you got. For example : in one recording you will get 90 FPS, and in the other 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.

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

kfir
  • 635
  • 8
  • 27