Fix CameraX GL surface: render-on-demand, crop-to-fill, lifecycle
- Switch GLSurfaceView from RENDERMODE_CONTINUOUSLY to RENDERMODE_WHEN_DIRTY with OnFrameAvailableListener, halving GPU work - Add crop-to-fill aspect ratio correction so camera preview is not stretched on displays with non-16:9 aspect ratios - Add LifecycleEventObserver to pause/resume GLSurfaceView with Activity lifecycle, preventing background rendering and GL context issues Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
4d755dce31
commit
7979ebd029
3 changed files with 107 additions and 18 deletions
|
|
@ -59,6 +59,9 @@ class CameraManager(private val context: Context) {
|
|||
private val _isFrontCamera = MutableStateFlow(false)
|
||||
val isFrontCamera: StateFlow<Boolean> = _isFrontCamera.asStateFlow()
|
||||
|
||||
private val _previewResolution = MutableStateFlow(Size(0, 0))
|
||||
val previewResolution: StateFlow<Size> = _previewResolution.asStateFlow()
|
||||
|
||||
/** Background executor for image capture callbacks to avoid blocking the main thread. */
|
||||
private val captureExecutor: ExecutorService = Executors.newSingleThreadExecutor()
|
||||
|
||||
|
|
@ -161,6 +164,7 @@ class CameraManager(private val context: Context) {
|
|||
}
|
||||
|
||||
surfaceSize = request.resolution
|
||||
_previewResolution.value = surfaceSize
|
||||
surfaceTexture.setDefaultBufferSize(surfaceSize.width, surfaceSize.height)
|
||||
|
||||
val surface = Surface(surfaceTexture)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue