兼容 IOS
This commit is contained in:
@@ -225,11 +225,13 @@ class RecordingCameraController(
|
||||
|
||||
fun zoomCapabilitiesMap(): Map<String, Any> {
|
||||
val zoomState = camera?.cameraInfo?.zoomState?.value
|
||||
val logicalMin = zoomState?.minZoomRatio ?: 1f
|
||||
// 兜底两路超广角来源:独立超广角镜头(0.6) 与 逻辑相机原生 <1.0 变焦范围,取更小者。
|
||||
val minZoom =
|
||||
if (hasUltraWideCamera()) {
|
||||
ultraWideZoomRatio
|
||||
minOf(ultraWideZoomRatio, logicalMin)
|
||||
} else {
|
||||
zoomState?.minZoomRatio ?: 1f
|
||||
logicalMin
|
||||
}
|
||||
val maxZoom = zoomState?.maxZoomRatio ?: 3f
|
||||
val zoom =
|
||||
@@ -239,6 +241,11 @@ class RecordingCameraController(
|
||||
(zoomState?.zoomRatio ?: currentZoomRatio).coerceIn(minZoom, maxZoom)
|
||||
}
|
||||
currentZoomRatio = zoom
|
||||
Log.d(
|
||||
TAG,
|
||||
"zoomCapabilities hasUltraWide=${hasUltraWideCamera()} logicalMin=$logicalMin " +
|
||||
"ultraWideZoomRatio=$ultraWideZoomRatio minZoom=$minZoom maxZoom=$maxZoom zoom=$zoom",
|
||||
)
|
||||
return mapOf(
|
||||
"zoomRatio" to zoom.toDouble(),
|
||||
"minZoomRatio" to minZoom.toDouble(),
|
||||
@@ -385,6 +392,11 @@ class RecordingCameraController(
|
||||
|
||||
val mainProfile = excludedCameraId?.let { backCameraProfile(manager, it) }
|
||||
val widest = candidates.firstOrNull() ?: return null
|
||||
val candidatesDesc =
|
||||
candidates.joinToString { "id=${it.cameraId} fov=${it.horizontalFov} focal=${it.minFocalLength}" }
|
||||
val mainDesc =
|
||||
mainProfile?.let { "id=${it.cameraId} fov=${it.horizontalFov} focal=${it.minFocalLength}" }
|
||||
Log.d(TAG, "ultraWide candidates=[$candidatesDesc] main=$mainDesc")
|
||||
if (mainProfile == null) {
|
||||
return UltraWideCamera(widest.cameraId, DEFAULT_ULTRA_WIDE_ZOOM_RATIO)
|
||||
}
|
||||
@@ -392,6 +404,11 @@ class RecordingCameraController(
|
||||
val meaningfullyWider =
|
||||
widest.horizontalFov > mainProfile.horizontalFov * ULTRA_WIDE_FOV_FACTOR ||
|
||||
widest.minFocalLength < mainProfile.minFocalLength * ULTRA_WIDE_FOCAL_FACTOR
|
||||
Log.d(
|
||||
TAG,
|
||||
"ultraWide decision widest=${widest.cameraId} meaningfullyWider=$meaningfullyWider " +
|
||||
"(fovFactor=$ULTRA_WIDE_FOV_FACTOR focalFactor=$ULTRA_WIDE_FOCAL_FACTOR)",
|
||||
)
|
||||
if (!meaningfullyWider) {
|
||||
return null
|
||||
}
|
||||
@@ -564,7 +581,8 @@ class RecordingCameraController(
|
||||
companion object {
|
||||
private const val TAG = "RecordingCamera"
|
||||
private const val DEFAULT_ULTRA_WIDE_ZOOM_RATIO = 0.6f
|
||||
private const val ULTRA_WIDE_FOV_FACTOR = 1.08
|
||||
private const val ULTRA_WIDE_FOCAL_FACTOR = 0.92
|
||||
// 适度放宽判定宽容度,覆盖更多机型(更小的 FOV/焦距差异也视为超广角)。
|
||||
private const val ULTRA_WIDE_FOV_FACTOR = 1.04
|
||||
private const val ULTRA_WIDE_FOCAL_FACTOR = 0.96
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user