From 8582d2e2b09ef63e45cfe441dcf81bdbd5f979b3 Mon Sep 17 00:00:00 2001 From: evgeny Date: Thu, 15 Oct 2026 00:50:36 +0200 Subject: [PATCH] Log call video surface lifetime and preview visibility --- .../src/main/java/com/utun/chat/data/CallVideoEngine.kt | 7 ++++++- .../src/main/java/com/utun/chat/data/CallVideoPlayer.kt | 6 +++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallVideoEngine.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallVideoEngine.kt index 4df904b2..60a0430d 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallVideoEngine.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallVideoEngine.kt @@ -217,7 +217,12 @@ class CallVideoEngine(private val context: Context, private val id: Long) { lastCaptureAt = now if (previewFrames.subscriptionCount.value > 0 && now - previewAt >= 200_000_000) { previewAt = now - try { previewFrames.value = cameraPreview(image, f.rotation, mirror) } + try { + val preview = cameraPreview(image, f.rotation, mirror) + if (previewFrames.value == null) LogManager.addLog("INFO", "call", + "camera preview visible id=$id size=${preview.width}x${preview.height} rotation=${f.rotation} mirror=$mirror") + previewFrames.value = preview + } catch (e: Exception) { LogManager.addLog("WARN", "call", "camera preview failed: ${e.message}") } } val offset = if (realtime) now - SystemClock.elapsedRealtimeNanos() else sensorOffset ?: (now - image.timestamp).also { diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallVideoPlayer.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallVideoPlayer.kt index 9211e542..cd85fc53 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallVideoPlayer.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallVideoPlayer.kt @@ -45,6 +45,7 @@ internal class CallVideoPlayer(private val id: Long, private val failure: (Strin if (next.detach != null && output?.surface !== next.detach) continue close(); output?.release?.invoke(); output = next; surface = next.surface pending = null; displayed.value = null; CallVideoNative.requestKey(id) + LogManager.addLog("INFO", "call", "video output attached=${surface != null} call=$id") } val valid = NativeLib.callAudioClock(id, now / 1000, clock) && clock[5] != 0L if (valid && sourceEpoch != clock[1]) { @@ -55,7 +56,10 @@ internal class CallVideoPlayer(private val id: Long, private val failure: (Strin if (held >= 0 && valid && heldPts <= clock[4]) { val render = heldPts >= clock[4] - 500_000 decoder!!.releaseOutputBuffer(held, render); held = -1 - if (render) { displayed.value = format; lastRendered = now } + if (render) { + if (displayed.value != format) LogManager.addLog("INFO", "call", "video visible call=$id format=$format") + displayed.value = format; lastRendered = now + } lastProgress = now } if (decoder != null && held < 0) {