Nuke Olaf - Log Store
[Android] 안드로이드 - camera2 api 사용하기 본문
camera2와 비교하여 camera2는 Api에서 카메라 객체를 분리합니다 Camera2는 파이프 라인을 사용하여 카메라 장치와 Android 장치를 연결합니다 .Android 장치는 파이프 라인을 통해 CaptureRequest 사진 요청을 카메라 장치로 보냅니다. 카메라 장치는 CameraMetadata 데이터를 Android 기기,이 모든 것은 CameraCaptureSession 세션에서 발생합니다.
CameraCaptureSession : 매우 중요한 API로, 프로그램에서 사진을 미리보고 사진을 찍어야 할 경우이 클래스의 인스턴스를 통해 세션이 생성됩니다 미리보기를 제어하는 메소드는 setRepeatingRequest (), 사진을 제어하는 메소드는 capture ()입니다.
CameraDevices : 하드웨어 장치 및 장치의 사용 가능한 설정 및 출력 매개 변수를 설명하는 일련의 정적 속성 정보를 제공합니다. getCameraCharacteristics를 통해 얻습니다.
CameraManager : 모든 카메라 장치의 관리자 시스템 카메라를 열고 닫는 데 사용할 수있는 카메라 장치를 열거, 쿼리 및 열려면 CameraManager 인스턴스를 가져옵니다.
CaptureRequest : 단일 이미지를 캡처하기 위해 카메라 장치에 필요한 모든 캡처 매개 변수를 정의합니다. 이 요청에는이 캡처의 대상으로 사용해야하는 구성된 출력 표면이 나열됩니다.
CameraDevice : 지정된 유스 케이스에 대한 요청 빌더를 작성하기위한 팩토리 메소드가 있으며, 애플리케이션이 실행중인 Android 디바이스에 최적화되어 이전 카메라와 유사하게 시스템 카메라를 설명합니다.
CameraRequest CameraRequest.Builder : 프로그램이 미리보기를 위해 setRepeatingRequest () 메소드 또는 사진을 찍기위한 capture () 메소드를 호출 할 때 CameraRequest 매개 변수를 전달해야합니다. CameraRequest는 사진을 캡처하기위한 다양한 매개 변수 설정을 설명하는 데 사용되는 캡처 요청을 나타내며 프로그램이 사진에서 수행하는 다양한 컨트롤은 CameraRequest 매개 변수를 통해 설정됩니다. CameraRequest.Builder는 CameraRequest 객체 생성을 담당합니다.
CameraCharacteristics : 카메라의 다양한 특성을 설명합니다. CameraManager의 getCameraCharacteristics (@NonNull String cameraId) 메소드를 통해 얻을 수 있습니다.
CaptureResult : 사진 촬영 후 결과를 설명합니다.
ImageReader : PreviewRequestBuilder.addTarget (mImageReader.getSurface ())을 추가하면 OnImageAvailableListener 인터페이스에서 yuv 데이터를 실시간으로 얻을 수 있습니다.
1. openCamera 메서드를 호출하면 CameraDevice.StateCallback 메서드가 다시 호출되고이 메서드에서 onOpened 함수가 재정의됩니다.
2. onOpened 메서드에서 createCaptureSession을 호출하면 CameraCaptureSession.StateCallback 메서드가 다시 호출됩니다.
3. CameraCaptureSession.StateCallback에서 onConfigured 메소드를 재정의하고 setRepeatingRequest 메소드를 설정합니다 (즉, 미리보기 켜기).
4.setRepeatingRequest는 CameraCaptureSession.CaptureCallback 메소드를 호출합니다.
5. CameraCaptureSession.CaptureCallback에서 onCaptureCompleted 메서드를 재정의하면 결과는 처리되지 않은 프레임 데이터입니다.
------------
Camera와 마찬가지로 Camera2에도 cameraId라는 개념이 있습니다 .mCameraManager.getCameraIdList ()를 사용하여 cameraId 목록을 가져온 다음 mCameraManager.getCameraCharacteristics (id)를 사용하여 각 ID의 카메라 매개 변수를 가져옵니다.
카메라 특성의 매개 변수와 관련하여 다음이 주로 사용됩니다.
LENS_FACING : 전면 카메라 (LENS_FACING_FRONT) 또는 후면 카메라 (LENS_FACING_BACK).
SENSOR_ORIENTATION : 카메라가 사진을 찍습니다.
FLASH_INFO_AVAILABLE : 플래시 지원 여부.
CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL : 현재 장치에서 지원하는 카메라 기능을 가져옵니다.
참고 : 실제로 여러 제조업체의 Android 장치에서 Camera2의 다양한 기능을 모두 사용할 수있는 것은 아닙니다. 리턴 값을 기반으로 지원 레벨을 얻으려면 trait.get (CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL) 메소드를 사용해야합니다. :
INFO_SUPPORTED_HARDWARE_LEVEL_FULL : Full HD 비디오의 수동 제어, 연속 촬영 모드 지원 및 기타 새로운 기능을 지원하는 광범위한 하드웨어 지원.
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED : 지원이 제한되어 있으므로 별도로 쿼리해야합니다.
INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY : 모든 장치에서 지원되며 이는 오래된 카메라 API에서 지원하는 기능과 일치합니다.
이 INFO_SUPPORTED_HARDWARE_LEVEL 매개 변수를 사용하여 카메라 사용 여부를 결정할 수 있습니다
위의 원리에 대한 설명을 통해 일반적인 프로세스는 다소 흐릿 할 수 있으며 위의 논리 시작 코드와 직접 일치합니다.
'Android' 카테고리의 다른 글
[Android] 안드로이드 - 큰 비트맵을 효율적으로 로드하기 (feat. BitmapFactory) (0) | 2019.12.09 |
---|---|
[Android] 안드로이드 - camera2 api 사용해서 카메라앱 만들기 (0) | 2019.12.09 |
[Android] 안드로이드 - 카메라앱 만들기 (camera2 사용하는 법) (0) | 2019.12.07 |
[Android] 안드로이드 - 카메라 앱 만들기 (Camera2 개념) (0) | 2019.12.07 |
[Android] 안드로이드 - hardware 의 카메라 사용하는 앱 with Kotlin (0) | 2019.12.06 |