Support Wide-Angle Camera in Android

WindSekirun (wind.seo)·2022년 4월 26일
0

이 글은 기존 운영했던 WordPress 블로그인 PyxisPub: Development Life (pyxispub.uzuki.live) 에서 가져온 글 입니다. 모든 글을 가져오지는 않으며, 작성 시점과 현재 시점에는 차이가 많이 존재합니다.

작성 시점: 2017-12-21

Basic Information

본 가이드는 LG Dual Camera SDK를 기준으로 하며, 현재 SDK의 공식 지원 범위는 다음과 같습니다.

  • G5 전면 카메라 1 후면 카메라 2
  • V10 전면 카메라 2 후면 카메라 1
  • V20 전면 카메라 1 후면 카메라 2
  • G6 전면 카메라 2 후면 카메라 1

일반 / 광각 카메라를 지원하는 SDK는 별도 SDK가 아닌 Android의 SDK를 따른다.

따라서 기존 앱에 Camera API를 사용하고 있거나 Camera2를 사용하고 있거나 상관 없이 모두 지원 된다.

용어 정리

  1. CameraId: 카메라 하드웨어의 고유 번호. 0 부터 시작하며 0은 후면 카메라, 1은 전면 카메라인 경우가 상당히 많다.
  2. front-facing: 전면 카메라
  3. back-facing: 후면 카메라
  4. View Angle: 카메라에서 보여지는 각도 수치

광각 모드 / 일반 모드 차이

현재 LG Dual Camera SDK의 Accessing Camera 섹션에 자세한 내용이 나와있다.

여기서는 LG G6 기준으로 살펴보자.

  • CameraId: 0, Main Camera (back-facing), 13MP, 71'
  • CameraId: 1, Selfie Camera (front-facing), 5MP, 100'
  • CameraId: 2, Dual Camera (back-facing), 13MP, 125'

ID 1번의 경우 전면 카메라, ID 0과 2번은 후면 카메라인데 각도에 큰 차이가 보인다. 기본적으로 각도가 크면 클 수록 카메라 렌즈에 많은 방향을 담을 수 있는 이야기와 일치하며, 이를 광각 카메라 라고 부르는 것이다.

구현 상세

카메라 객체를 얻어올 때 Camera.open(cameraId) 메서드로 불러오는데, 이 CameraId에 어떤 값이 들어가는지에 대하여 받아올 카메라 렌즈가 달라진다.

기본으로는 후면 카메라의 경우 0, 전면 카메라인 경우 1 를 넣어서 불러왔지만 어느 ID가 광각 카메라 렌즈이고, 어느 ID가 일반 카메라 렌즈인지는 아래 메서드를 사용한다.

/**
 * Identifies dual camera IDs
 */
private void findDualCameraId() {
    Camera.getCameraInfo(0, cameraInfo1);
    Camera.getCameraInfo(1, cameraInfo2);
    Camera.getCameraInfo(2, cameraInfo3);

    // examine which camera devices have the same facing direction
    if (cameraInfo1.facing == cameraInfo2.facing) {
        cameraId1 = 1;
        cameraId2 = 0;
    } else if (cameraInfo1.facing == cameraInfo3.facing) {
        cameraId1 = 2;
        cameraId2 = 0;
    } else {
        cameraId1 = 2;
        cameraId2 = 1;
    }

    Log.i(TAG, "1st dual camera ID: " + cameraId1);
    Log.i(TAG, "2nd dual camera ID: " + cameraId2);
}

해당 카메라의 바라보는 방향(전면, 후면) 인지를 판단해서 아이디를 얻어오는 방식이다.

전면 카메라만 광각인 V10을 제외하고, 후면 카메라가 광각인 G5, V20, G6의 경우 ID 2가 광각, ID 0가 일반으로 잡히게 된다.

주의할 점은, G5의 경우 객체를 가져올 때에나 해제할 때에 광각 카메라 객체를 먼저 가져오고, 일반 카메라 객체를 가져와야 한다. 이렇게 해야 전체 카메라 해상도를 사용할 수 있으며, 카메라 앱이 종료되는 현상을 방지할 수 있다.

출처

profile
Android Developer @kakaobank

0개의 댓글