From d2f0828917a897c9d37cc39c9734ef7e81ce5656 Mon Sep 17 00:00:00 2001 From: evgeny Date: Tue, 20 Oct 2026 02:29:00 +0200 Subject: [PATCH] Bound restored manual stream bitrate choices to 12 Mbit/s --- .../app/src/main/java/com/utun/chat/data/StreamCameraModes.kt | 1 + .../src/main/java/com/utun/chat/data/StreamCaptureConfig.kt | 2 +- .../src/main/java/com/utun/chat/data/StreamCaptureSettings.kt | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamCameraModes.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamCameraModes.kt index b5c4f681..e1a7c26d 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamCameraModes.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamCameraModes.kt @@ -14,6 +14,7 @@ data class StreamCaptureMode(val camera: String, val width: Int, val height: Int val minimumBitrate: Int = 1, val maximumBitrate: Int = Int.MAX_VALUE, val encoderProfile: Int? = videoCodec.profile) { val label get() = "${width}×${height} · $fps fps" + val manualBitrateRange get() = minimumBitrate..minOf(maximumBitrate, 12_000_000) } data class StreamCamera(val id: String, val lens: LensOption, val modes: List) diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamCaptureConfig.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamCaptureConfig.kt index 9bd34dfb..356ce09b 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamCaptureConfig.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamCaptureConfig.kt @@ -13,5 +13,5 @@ data class StreamCaptureConfig(val mode: StreamCaptureMode, val orientation: Str val bitrate get() = videoBitrate ?: mode.bitrate init { require(bitrate in mode.minimumBitrate..mode.maximumBitrate) } fun withMode(next: StreamCaptureMode) = copy(mode = next, - videoBitrate = videoBitrate?.coerceIn(next.minimumBitrate, next.maximumBitrate)) + videoBitrate = videoBitrate?.takeUnless { next.manualBitrateRange.isEmpty() }?.coerceIn(next.manualBitrateRange)) } diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamCaptureSettings.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamCaptureSettings.kt index 259b2b99..8799c52b 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamCaptureSettings.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamCaptureSettings.kt @@ -18,7 +18,8 @@ data class StreamCaptureSettings(val camera: String = "", val width: Int = 1280, LogManager.addLog("WARN", "stream", "capture settings: camera=${selected.id} has no available mode"); return null } val orientation = StreamOrientation.values().firstOrNull { it.degrees == rotation } ?: StreamOrientation.LEFT - val restored = StreamCaptureConfig(mode, orientation, bitrate?.coerceIn(mode.minimumBitrate, mode.maximumBitrate)) + val restored = StreamCaptureConfig(mode, orientation, + bitrate?.takeUnless { mode.manualBitrateRange.isEmpty() }?.coerceIn(mode.manualBitrateRange)) if (camera.isNotEmpty() && (camera != mode.camera || width != mode.width || height != mode.height || fps != mode.fps || codec != mode.videoCodec.id || rotation != orientation.degrees || bitrate != restored.videoBitrate)) LogManager.addLog("WARN", "stream", "capture settings adjusted: saved=$this restored=$restored")