androidgoogle-playandroid-camera2camera-intrinsics

Difference in the Availability of Camera Intrinsics via the Camera2 API Between Almost Identical Phones


I am well are aware that not all phones yield camera intrinsics via the camera2 API. However, I find it very puzzling that some phones yield intrinsics while other almost identical phones do not. E.g. the Samsung Galaxy S20 FE (SM-G780G) yields intrinsics via the camera2 API, whereas the Samsung Galaxy S20 5G (SM-G981B) strangely does not.

This seems very strange, for the following reasons:

Questions:

This confusion also opens even more fundamental questions:

Has anyone had any similar experience? Maybe we are doing something wrong?

Many thanks in advance for any help you can give!


Solution

  • The definition of hardware level FULL is here. It used to cover nearly everything the API supported, but since the definition cannot be changed after it is defined (for backwards compatibility reasons), there's a lot of stuff added in later API versions that is not covered by the FULL spec.

    So for example, it doesn't mandate lens calibration information, which is only required for cameras that support either the DEPTH_OUTPUT or LOGICAL_MULTI_CAMERA capabilities.

    Though any device can advertise them if it wants to, even if those capabilities aren't listed.

    Those Samsungs both have two versions, one using a Qualcomm processor, and one using an Exynos processor. I suspect it's the SoC difference that makes a difference on whether the lens calibration fields are present. Each SoC vendor provides a default camera implementation to the manufacturer, and I suspect one vendor has the calibration information present, and the other doesn't. It's also possible one phone does have an additional feature in its default camera app that uses this information, and thus has it populated in the API.

    So I wouldn't necessarily trust that every variant of the same phone has the same capabilities, unfortunately.

    How to prevent our app from showing in Google Play for those devices which do not yield intrinsics via the camera2 API?

    Unfortunately, there's no system feature that covers this, so it's not possible to use Play Store filtering for camera intrinsics.