-
[Android] camera2 API - 검은 사진이 찍히는 현상 해결 방법programing/Mobile 2019. 8. 23. 15:48
안녕하세요, Einere입니다.
(ADblock을 꺼주시면 감사하겠습니다.)
증상
camera2 API를 사용하는 프로젝트가 있는데, 테스트 기기를 LG G5로 바꿔서 테스트해보니 검은 사진이 촬영되는 현상을 발견했습니다.
위 사진이 그 예시인데, 허여멀건 자국들은 다 조명이고, 그 외엔 엄청나게 까맣습니다.
이전 테스트 기기에선 다 정상적으로 작동하여 특정 기종문제인 줄 알았는데, 찾아보니 그런 것 같지는 않았습니다. 심지어 제가 담당한 기능도 아니라서 구글링하고 이해하는데 어려웠습니다. (사실 이해한 건 거의 없지만..)
해결 방법
어찌됫건, 제가 해결한 방법은 fps를 설정하는 법입니다.
// 필드 선언 private Range<Integer> fpsRange;
fpsRange 필드를 선언해줍니다.
// fpsRange 초기화 CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); try { Range<Integer>[] ranges = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES); if(ranges != null) { for (Range<Integer> range : ranges) { int upper = range.getUpper(); Log.i(TAG, "[FPS Range Available]:" + range); if (upper >= 10) { if (fpsRange == null || upper < fpsRange.getUpper()) fpsRange = range; } } } } catch (Exception e) { e.printStackTrace(); } Log.i(TAG, "[FPS Range] is:" + fpsRange);
카메라를 open하는 함수 내에서, 위와 같이 fpsRange를 설정해줍니다.
// 카메라 프리뷰 생성 함수 captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); ... captureRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, fpsRange);
카메라 프리뷰를 생성하는 함수 내에서, 위와 같이 fps range설정을 해줍니다.
// 사진 찍는 함수 final CaptureRequest.Builder captureBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE); captureBuilder.addTarget(reader.getSurface()); captureBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO); captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON); captureBuilder.set(CaptureRequest.CONTROL_AWB_MODE, CaptureRequest.CONTROL_AWB_MODE_AUTO); captureBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, fpsRange);
사진을 찍는 함수 내에서, 위와 같이 fps range 설정을 해줍니다.
결과
정상적으로 사진이 찍혔습니다.
참고
'programing > Mobile' 카테고리의 다른 글
[React Native] 개발 웹서버 없이 debug APK 따는 방법 (0) 2020.11.27 [React Native] Insight (0) 2020.10.24 [Android] background theme를 이용한 splash screen (0) 2019.05.12 [Android] Base64를 이용한 encoding시 주의점 (1) 2019.04.01 [Android Studio] 협업과 Instant Run 관련 에러 해결 방법 (0) 2019.03.30 댓글