CameraX?
CameraX 는 Camera2 API(low-level API) 기반으로 만들어 졌다. CameraX 는 카메라 API 의 기기 하위 호환성을 보장하고 Camera2 API 를 사용하는 거 보다 훨씬 간단한 코드로 카메라를 사용하는 앱을 개발할 수 있게 돕는다.
Camera2Interop?
CameraX 에서 일부 Camera2 설정(low-level API) 을 적용할 수 있도록 Camera2Interop 모듈을 제공한다.
몇가지 사용 사례를 설명함.
1. 카메라 ID 얻기
예제) Github 링크
val camera = provider.bindToLifecycle(requireActivity(), camSelector)
QualitySelector
.getSupportedQualities(camera.cameraInfo)
.filter { quality ->
listOf(Quality.UHD, Quality.FHD, Quality.HD, Quality.SD)
.contains(quality)
}.also {
cameraCapabilities.add(CameraCapability(camSelector, it))
}
val info = Camera2CameraInfo.from(camera.cameraInfo)
Log.d(TAG, "Camera ID: ${info.cameraId}")
설명
- CameraX 의 ProcessCameraProvider.bindToLifecycle() 는 Camera 객체를 리턴한다.
- Camera 안에는 cameraInfo (CameraInfo) 가 있다.
- Camera2Interop 의 Camera2CameraInfo.from() 은 CameraInfo 를 파라메터로 Camera2CameraInfo 를 리턴한다.
- Camera2CameraInfo 안에는 cameraId 값이 있다. (Camera2 의 CameraDevice ID 값과 동일)
2. CameraCharacteristics 얻기
예제) Github 링크
val exposureTimeRange = info.getCameraCharacteristic(CameraCharacteristics.SENSOR_INFO_EXPOSURE_TIME_RANGE)
Log.d(TAG, "Camera Face (camera id: ${info.cameraId}) exposureTimeRange: $exposureTimeRange")
val sensitivityRange = info.getCameraCharacteristic(CameraCharacteristics.SENSOR_INFO_SENSITIVITY_RANGE)
Log.d(TAG, "Camera Face (camera id: ${info.cameraId}) sensitivityRange: $sensitivityRange")
설명
- Camera2CameraInfo 에는 getCameraCharacteristics() 함수가 있다. (Camera2 의 CameraManager.getCameraCharacteristics() 와 동일)
3. Camera2 CaptureRequest 설정
예제) AE 모드를 off 하고 exposure time(shutter speed) 와 ISO 값 조정 Github 링크
val camera = cameraProvider.bindToLifecycle(
viewLifecycleOwner,
cameraSelector,
videoCapture,
preview
)
val control = camera.cameraControl
val camControl = Camera2CameraControl.from(control)
val options = CaptureRequestOptions.Builder()
.setCaptureRequestOption(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF)
.setCaptureRequestOption(CaptureRequest.SENSOR_SENSITIVITY, 3368)
.setCaptureRequestOption(CaptureRequest.SENSOR_EXPOSURE_TIME, 38860 * 100)
.build()
camControl.captureRequestOptions = options
설명
- CameraX 의 ProcessCameraProvider.bindToLifecycle() 는 Camera 객체를 리턴한다.
- Camera 안에는 cameraControl (CameraControl) 이 있다.
- Camera2Interop 의 Camera2CameraControl.from() 은 CameraControl 을 파라메터로 Camera2CameraControl 를 리턴한다.
- Camera2CameraControl 에 captureRequestOptions 값을 설정하면 되는데 CameraRequestOptions.Builder() (Camera2 의 CaptureRequest.Builder.set() 과 유사) 를 이용한 값을 설정하면 된다.
- 설정에 사용되는 값은 Camera2 의 CaptureRequest 와 동일
댓글 없음:
댓글 쓰기