Recognize shared preview sources and model texture cleanup failures

This commit is contained in:
evgeny committed 2026-10-29 13:34:24 +01:00
1 parent 4a40fb9d52
commit 83ea839d0c
3 files changed
+19 -2

No files matched your search

@@ -107,8 +107,10 @@ class StreamCaptureEngine(
fun start() {
preview.bind { target ->
if (!handler.post {
if (target?.released == true) { LogManager.addLog("WARN", "video", "cancelled preview command id=$id"); return@post }
if (stopping || stopped || terminalFailure) { target?.release(); return@post }
if (target === previewTarget) { target?.release(); return@post }
if (target == null && previewTarget == null) return@post
if (target?.sameSource(previewTarget) == true) { target.release(); return@post }
val previous = previewTarget; previewTarget = target; previous?.release()
val config = activeConfig; val device = camera
LogManager.videoTrace("preview output change id=$id target=${target?.let(System::identityHashCode)} " +
@@ -0,0 +1,14 @@
package android.graphics
/** Только JVM: физический texture descriptor и отказ до/после release. */
class SurfaceTexture(val id: Int) {
var released = false
private set
var releaseCalls = 0
private set
var failures = emptySet<String>()
fun release() {
releaseCalls++; check("release" !in failures) { "texture release failed" }
released = true; check("release after" !in failures) { "texture release failed after effect" }
}
}
@@ -1,7 +1,8 @@
package android.view
/** Только дескриптор вывода; реальных EGL/TextureView/драйверов нет. */
class Surface {
class Surface() {
constructor(texture: android.graphics.SurfaceTexture) : this()
@Volatile var isValid = true
var releaseCalls = 0
private set