Recognize shared preview sources and model texture cleanup failures
This commit is contained in:
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
|
||||
|
||||
Reference in new issue
Block a user