-
Notifications
You must be signed in to change notification settings - Fork 0
refactor: CameraX AndroidView + PreviewView -> Composable CameraXViewfinder로 전환 #265
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
easyhooon
wants to merge
4
commits into
develop
Choose a base branch
from
BOOK-493-refactor/#256
base: develop
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
43fea5c
[BOOK-493] refactor: CameraX AndroidView + PreviewView -> Composable …
easyhooon 662deb6
[BOOK-493] fix: OCR 캡처 시 Preview 영역 기준으로 이미지 crop 적용
easyhooon fdd14cd
Merge branch 'develop' into BOOK-493-refactor/#256
easyhooon 669b65a
[BOOK-493] fix: ViewPort 설정으로 OCR 캡처 영역을 Preview 높이 200dp로 제한
easyhooon File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ProcessCameraProvider unbind 누락으로 인한 리소스 누수 가능성
Composable이 composition을 벗어날 때 카메라 바인딩을 해제하는 cleanup 로직이 없습니다.
LaunchedEffect는 key가 변경되거나 composition을 벗어날 때 코루틴을 취소하지만,ProcessCameraProvider의unbindAll()은 자동으로 호출되지 않습니다.🐛 DisposableEffect를 사용한 cleanup 로직 추가 제안
LaunchedEffect(isGranted) { if (!isGranted) return@LaunchedEffect - ProcessCameraProvider.awaitInstance(context).apply { + val cameraProvider = ProcessCameraProvider.awaitInstance(context) + cameraProvider.apply { unbindAll() // Preview 영역(fillMaxWidth x 200dp) 비율로 ViewPort를 설정하여 // ImageCapture 출력을 해당 영역으로 제한 val viewPort = ViewPort.Builder( Rational(screenWidthPx, previewHeightPx), preview.targetRotation, ).build() val useCaseGroup = UseCaseGroup.Builder() .setViewPort(viewPort) .addUseCase(preview) .addUseCase(imageCapture) .build() bindToLifecycle( lifecycleOwner, CameraSelector.DEFAULT_BACK_CAMERA, useCaseGroup, ) } } + + DisposableEffect(Unit) { + onDispose { + // Composable 종료 시 카메라 리소스 해제 + // ProcessCameraProvider는 singleton이므로 getInstance 사용 + ProcessCameraProvider.getInstance(context).get().unbindAll() + } + }🤖 Prompt for AI Agents