Aperture: Stop parsing sensor informations
* We were using those for zoom ratio, now CameraX does that for us
Change-Id: Ib11b4e1d8e6423ac698fa348745ea8ef7a07847b
diff --git a/app/src/main/java/org/lineageos/aperture/RectExt.kt b/app/src/main/java/org/lineageos/aperture/RectExt.kt
deleted file mode 100644
index 912922a..0000000
--- a/app/src/main/java/org/lineageos/aperture/RectExt.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2022 The LineageOS Project
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package org.lineageos.aperture
-
-import android.graphics.Rect
-import android.util.Size
-
-fun Rect.toSize() = Size(width(), height())
diff --git a/app/src/main/java/org/lineageos/aperture/SizeExt.kt b/app/src/main/java/org/lineageos/aperture/SizeExt.kt
deleted file mode 100644
index 9b093cf..0000000
--- a/app/src/main/java/org/lineageos/aperture/SizeExt.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2022 The LineageOS Project
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package org.lineageos.aperture
-
-import android.util.Size
-
-internal fun Size.reversed() = Size(height, width)
diff --git a/app/src/main/java/org/lineageos/aperture/SizeFExt.kt b/app/src/main/java/org/lineageos/aperture/SizeFExt.kt
deleted file mode 100644
index e8dda10..0000000
--- a/app/src/main/java/org/lineageos/aperture/SizeFExt.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2022 The LineageOS Project
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package org.lineageos.aperture
-
-import android.util.SizeF
-
-internal fun SizeF.reversed() = SizeF(height, width)
diff --git a/app/src/main/java/org/lineageos/aperture/utils/Camera.kt b/app/src/main/java/org/lineageos/aperture/utils/Camera.kt
index 6b6af99..6ef8f0a 100644
--- a/app/src/main/java/org/lineageos/aperture/utils/Camera.kt
+++ b/app/src/main/java/org/lineageos/aperture/utils/Camera.kt
@@ -8,8 +8,6 @@
import android.hardware.camera2.CameraCharacteristics
import android.hardware.camera2.CameraMetadata
import android.os.Build
-import android.util.Size
-import android.util.SizeF
import androidx.camera.camera2.interop.Camera2CameraInfo
import androidx.camera.core.CameraInfo
import androidx.camera.core.CameraSelector
@@ -17,7 +15,6 @@
import androidx.camera.video.QualitySelector
import org.lineageos.aperture.getSupportedModes
import org.lineageos.aperture.physicalCameraIds
-import org.lineageos.aperture.toSize
import kotlin.reflect.safeCast
/**
@@ -42,34 +39,7 @@
val exposureCompensationRange = cameraInfo.exposureState.exposureCompensationRange
val hasFlashUnit = cameraInfo.hasFlashUnit()
- /**
- * A list of sensors this camera is made of.
- * If it contains a single sensor, this means this is a physical camera device,
- * else it's a logical camera device.
- * This list may be empty if information parsing failed (this can happen with
- * external cameras).
- */
- val sensors = mutableListOf<Sensor>().apply {
- val physicalCameraIds = camera2CameraInfo.physicalCameraIds
-
- if (physicalCameraIds.isNotEmpty()) {
- for (physicalCameraId in physicalCameraIds) {
- runCatching {
- val camera2CameraCharacteristics =
- cameraManager.camera2CameraManager.getCameraCharacteristics(
- physicalCameraId
- )
- this@apply.add(Camera2Sensor(camera2CameraCharacteristics))
- }
- }
- } else {
- runCatching { CameraXSensor(camera2CameraInfo) }.getOrNull()?.let {
- add(it)
- }
- }
- }.toList()
-
- val isLogical = sensors.size > 1
+ val isLogical = camera2CameraInfo.physicalCameraIds.size > 1
val intrinsicZoomRatio = cameraInfo.intrinsicZoomRatio
val logicalZoomRatios = cameraManager.getLogicalZoomRatios(cameraId)
@@ -132,50 +102,4 @@
else -> true
}
}
-
- private class Camera2Sensor(private val cameraCharacteristics: CameraCharacteristics) : Sensor {
- override val activeArraySize: Size
- get() = cameraCharacteristics.get(
- CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE
- )!!.toSize()
- override val availableFocalLengths: List<Float>
- get() = cameraCharacteristics.get(
- CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS
- )!!.toList()
- override val orientation: Int
- get() = cameraCharacteristics.get(
- CameraCharacteristics.SENSOR_ORIENTATION
- )!!
- override val pixelArraySize: Size
- get() = cameraCharacteristics.get(
- CameraCharacteristics.SENSOR_INFO_PIXEL_ARRAY_SIZE
- )!!
- override val size: SizeF
- get() = cameraCharacteristics.get(
- CameraCharacteristics.SENSOR_INFO_PHYSICAL_SIZE
- )!!
- }
-
- private class CameraXSensor(private val camera2CameraInfo: Camera2CameraInfo) : Sensor {
- override val activeArraySize: Size
- get() = camera2CameraInfo.getCameraCharacteristic(
- CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE
- )!!.toSize()
- override val availableFocalLengths: List<Float>
- get() = camera2CameraInfo.getCameraCharacteristic(
- CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS
- )!!.toList()
- override val orientation: Int
- get() = camera2CameraInfo.getCameraCharacteristic(
- CameraCharacteristics.SENSOR_ORIENTATION
- )!!
- override val pixelArraySize: Size
- get() = camera2CameraInfo.getCameraCharacteristic(
- CameraCharacteristics.SENSOR_INFO_PIXEL_ARRAY_SIZE
- )!!
- override val size: SizeF
- get() = camera2CameraInfo.getCameraCharacteristic(
- CameraCharacteristics.SENSOR_INFO_PHYSICAL_SIZE
- )!!
- }
}
diff --git a/app/src/main/java/org/lineageos/aperture/utils/CameraManager.kt b/app/src/main/java/org/lineageos/aperture/utils/CameraManager.kt
index fa6693a..5322293 100644
--- a/app/src/main/java/org/lineageos/aperture/utils/CameraManager.kt
+++ b/app/src/main/java/org/lineageos/aperture/utils/CameraManager.kt
@@ -15,16 +15,12 @@
import org.lineageos.aperture.getStringArray
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
-import android.hardware.camera2.CameraManager as Camera2CameraManager
/**
* Class managing an app camera session
*/
@androidx.camera.camera2.interop.ExperimentalCamera2Interop
class CameraManager(context: Context) {
- val camera2CameraManager: Camera2CameraManager =
- context.getSystemService(Camera2CameraManager::class.java)
-
private val cameraProvider = ProcessCameraProvider.getInstance(context).get()
val extensionsManager = ExtensionsManager.getInstanceAsync(context, cameraProvider).get()!!
val cameraController = LifecycleCameraController(context)
diff --git a/app/src/main/java/org/lineageos/aperture/utils/Sensor.kt b/app/src/main/java/org/lineageos/aperture/utils/Sensor.kt
deleted file mode 100644
index e0b4da7..0000000
--- a/app/src/main/java/org/lineageos/aperture/utils/Sensor.kt
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2022 The LineageOS Project
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package org.lineageos.aperture.utils
-
-import android.util.Size
-import android.util.SizeF
-import androidx.annotation.IntRange
-import org.lineageos.aperture.reversed
-import kotlin.math.atan
-
-/**
- * An interface representing a sensor.
- */
-interface Sensor {
- /**
- * The area of the image sensor which corresponds to
- * active pixels after any geometric distortion correction has been applied.
- * Units: Pixel coordinates on the image sensor
- */
- val activeArraySize: Size
-
- /**
- * List of focal lengths that are supported by this sensor.
- */
- val availableFocalLengths: List<Float>
-
- /**
- * Clockwise angle through which the output image needs to be rotated
- * to be upright on the device screen in its native orientation.
- */
- val orientation: Int
-
- /**
- * The pixel count of the full pixel array of the image sensor,
- * which covers android.sensor.info.physicalSize area.
- * This represents the full pixel dimensions of the raw buffers produced by this sensor.
- * Units: Pixels
- */
- val pixelArraySize: Size
-
- /**
- * The physical dimensions of the full pixel array.
- * This is the physical size of the sensor pixel array defined by
- * android.sensor.info.pixelArraySize.
- * Units: Millimeters
- */
- val size: SizeF
-
- /**
- * Gets the angle of view of a camera.
- */
- val viewAngleDegrees: Int
- get() = focalLengthToViewAngleDegrees(
- availableFocalLengths.first(),
- horizontalLength
- )
-
- /**
- * Gets the length of the horizontal side of the sensor.
- *
- * The horizontal side is the width of the sensor size after rotated by the sensor
- * orientation.
- */
- private val horizontalLength: Float
- get() {
- var sensorSize = size
- var activeArraySize = activeArraySize
- var pixelArraySize = pixelArraySize
-
- if (is90or270(orientation)) {
- sensorSize = sensorSize.reversed()
- activeArraySize = activeArraySize.reversed()
- pixelArraySize = pixelArraySize.reversed()
- }
-
- return sensorSize.width * activeArraySize.width / pixelArraySize.width
- }
-
- companion object {
- /**
- * Calculates view angle by focal length and sensor length.
- *
- * The returned view angle is inexact and might not be hundred percent accurate comparing
- * to the output image.
- *
- * The returned view angle should between 0 and 360.
- */
- @IntRange(from = 0, to = 360)
- private fun focalLengthToViewAngleDegrees(focalLength: Float, sensorLength: Float): Int {
- assert(focalLength > 0) { "Focal length should be positive." }
- assert(sensorLength > 0) { "Sensor length should be positive." }
-
- val viewAngleDegrees = Math.toDegrees(
- 2 * atan((sensorLength / (2 * focalLength)).toDouble())
- ).toInt()
-
- assert(viewAngleDegrees in 0..360) {
- "The provided focal length and sensor length" +
- "result in an invalid view angle degrees."
- }
-
- return viewAngleDegrees
- }
-
- private fun is90or270(rotationDegrees: Int) =
- when (rotationDegrees) {
- 0 -> false
- 90 -> true
- 180 -> false
- 270 -> true
- else -> throw IllegalArgumentException("Invalid rotation degrees: $rotationDegrees")
- }
- }
-}