```
fix(camera): 修复检查活动中的相机预览功能 - 添加了预览表面管理以避免内存泄漏 - 增加了相机打开和关闭的日志记录 - 修复了相机预览缓冲区大小设置问题 - 添加了相机错误处理的日志记录 - 实现了预览表面的正确释放机制 - 修复了相机预览启动失败时的资源清理 ```
这个提交包含在:
父节点
92674a5b93
当前提交
a0aa806f9b
@ -42,6 +42,7 @@ class InspectionActivity :
|
|||||||
private var currentZoomLevel = 1
|
private var currentZoomLevel = 1
|
||||||
private var maxZoomLevel = 1
|
private var maxZoomLevel = 1
|
||||||
private var previewStartAttempted = false
|
private var previewStartAttempted = false
|
||||||
|
private var previewSurface: Surface? = null
|
||||||
|
|
||||||
private val listener = object : OfflineCmdListener {
|
private val listener = object : OfflineCmdListener {
|
||||||
override fun onOfflineCmd(cmd: String) {
|
override fun onOfflineCmd(cmd: String) {
|
||||||
@ -61,6 +62,7 @@ class InspectionActivity :
|
|||||||
private val cameraSurfaceCallbackId = UUID.randomUUID().toString()
|
private val cameraSurfaceCallbackId = UUID.randomUUID().toString()
|
||||||
private val cameraSurfaceCallback = object : ICameraSurfaceCallback.Stub() {
|
private val cameraSurfaceCallback = object : ICameraSurfaceCallback.Stub() {
|
||||||
override fun onCameraOpened(width: Int, height: Int) {
|
override fun onCameraOpened(width: Int, height: Int) {
|
||||||
|
LogHelper.d("Inspection preview onCameraOpened: ${width}x$height")
|
||||||
isPreviewActive = true
|
isPreviewActive = true
|
||||||
currentZoomLevel = GlassMediaServiceHelper.getZoomLevel().coerceAtLeast(1)
|
currentZoomLevel = GlassMediaServiceHelper.getZoomLevel().coerceAtLeast(1)
|
||||||
maxZoomLevel = GlassMediaServiceHelper.getMaxZoomLevel().coerceAtLeast(1)
|
maxZoomLevel = GlassMediaServiceHelper.getMaxZoomLevel().coerceAtLeast(1)
|
||||||
@ -73,6 +75,7 @@ class InspectionActivity :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onCameraClosed() {
|
override fun onCameraClosed() {
|
||||||
|
LogHelper.d("Inspection preview onCameraClosed")
|
||||||
isPreviewActive = false
|
isPreviewActive = false
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
binding.cameraPreviewContainer.visibility = View.GONE
|
binding.cameraPreviewContainer.visibility = View.GONE
|
||||||
@ -81,6 +84,7 @@ class InspectionActivity :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onError(code: Int, message: String?) {
|
override fun onError(code: Int, message: String?) {
|
||||||
|
LogHelper.d("Inspection preview onError: code=$code msg=$message")
|
||||||
isPreviewActive = false
|
isPreviewActive = false
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
binding.cameraPreviewContainer.visibility = View.GONE
|
binding.cameraPreviewContainer.visibility = View.GONE
|
||||||
@ -197,14 +201,20 @@ class InspectionActivity :
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
val surfaceTexture = binding.cameraPreview.surfaceTexture ?: return
|
val surfaceTexture = binding.cameraPreview.surfaceTexture ?: return
|
||||||
|
val width = binding.cameraPreview.width.coerceAtLeast(1)
|
||||||
|
val height = binding.cameraPreview.height.coerceAtLeast(1)
|
||||||
|
surfaceTexture.setDefaultBufferSize(width, height)
|
||||||
previewStartAttempted = true
|
previewStartAttempted = true
|
||||||
val surface = Surface(surfaceTexture)
|
previewSurface?.release()
|
||||||
LogHelper.d("Inspection startCameraPreview invoke startCameraShare")
|
previewSurface = Surface(surfaceTexture)
|
||||||
|
LogHelper.d("Inspection startCameraPreview invoke startCameraShare, buffer=${width}x$height")
|
||||||
runCatching {
|
runCatching {
|
||||||
GlassMediaServiceHelper.startCameraShare(surface, cameraSurfaceCallback)
|
GlassMediaServiceHelper.startCameraShare(previewSurface!!, cameraSurfaceCallback)
|
||||||
}.onFailure {
|
}.onFailure {
|
||||||
isPreviewRequested = false
|
isPreviewRequested = false
|
||||||
previewStartAttempted = false
|
previewStartAttempted = false
|
||||||
|
previewSurface?.release()
|
||||||
|
previewSurface = null
|
||||||
binding.cameraPreviewContainer.visibility = View.GONE
|
binding.cameraPreviewContainer.visibility = View.GONE
|
||||||
binding.zoomText.visibility = View.GONE
|
binding.zoomText.visibility = View.GONE
|
||||||
binding.hint.text = "相机预览启动失败,请重试"
|
binding.hint.text = "相机预览启动失败,请重试"
|
||||||
@ -223,6 +233,8 @@ class InspectionActivity :
|
|||||||
}.onFailure {
|
}.onFailure {
|
||||||
LogHelper.e("Inspection stopCameraPreview failed: ${it.message}", it)
|
LogHelper.e("Inspection stopCameraPreview failed: ${it.message}", it)
|
||||||
}
|
}
|
||||||
|
previewSurface?.release()
|
||||||
|
previewSurface = null
|
||||||
binding.cameraPreviewContainer.visibility = View.GONE
|
binding.cameraPreviewContainer.visibility = View.GONE
|
||||||
binding.zoomText.visibility = View.GONE
|
binding.zoomText.visibility = View.GONE
|
||||||
}
|
}
|
||||||
|
|||||||
正在加载...
在新工单中引用
屏蔽一个用户