취소
다음에 대한 결과 표시 
다음에 대한 검색 
다음을 의미합니까? 

삼성 갤럭시 카메라 에코시스템

옵션

SSDC2022 - 삼성 갤럭시 카메라 에코시스템 발표를 글로 옮긴 내용입니다.

 

개요

삼성 갤럭시 카메라는 강력한 하드웨어와 지능적인 소프트웨어를 활용하여 최고의 카메라 경험을 제공하고 있습니다.

 

갤럭시에 탑재된 기본 삼성 카메라 앱으로 갤럭시 카메라의 하드웨어와 소프트웨어 능력을 최대로 발휘한 카메라 기능을 제공하고 있습니다. 기본 사진 모드 외에, 야간 모드, 인물 사진 모드, 프로 모드, 슬로우 모션, 싱글테이크, 디렉터스뷰 등 수 많은 모드와 옵션으로 사진 촬영이 가능합니다. 야간 촬영 모드를 사용하면 어두운 환경에서도 최고의 사진과 영상을 찍을 수 있고, 싱글 테이크 기능을 사용하면, 비디오를 촬영 후 AI기술로 합성된 다양한 형태의 결과물을 저장할 수도 있습니다.

 

또한, 갤럭시 스토어에 Expert RAW 앱을 출시하여 전문가를 위한 RAW 촬영 모드를 추가로 제공하고 있습니다. 모든 렌즈를 사용하여 High Quality 의 HDR 촬영을 할 수 있고, 셔터 스피드, 노출, 화이트 밸런스 등의 옵션도 세세하게 컨트롤 할 수 있습니다.

 

삼성 카메라 개발팀은 삼성 카메라 앱을 넘어 안드로이드 카메라 앱 개발자들에게 삼성 갤럭시 카메라의 기능을 제공하기 위해 많은 노력을 하고 있습니다. 앱 개발자들에게 향상된 카메라 개발 생태계를 제공하여 사용자들이 삼성 카메라가 아닌 다른 카메라 앱으로도 최고의 카메라 경험을 느낄 수 있게 하는 걸 목표로 하고 있습니다. 저희는 이 모든 생태계를 삼성 갤럭시 카메라 에코시스템이라고 부르기로 했습니다.

 

삼성 갤럭시 카메라의 경험을 3rd party 카메라에게 전파하기 위한 삼성 갤럭시 카메라 에코시스템을 소개합니다.

 

목차

  1. Android Camera API & Framework
  2. Android 13 Collaboration with Google
  3. Camera Extensions
  4. Samsung Camera SDK
  5. Video Call Effects

 

 

Android Camera API & Framework

 

a5d5d714-6fb9-4181-a2d4-44b45fd4163d.png

(출처: https://source.android.com/docs/core/camera#architecture)

 

안드로이드 앱 개발자들은 Android SDK 의 Camera2 API 를 사용하여 카메라 기능을 구현할 수 있습니다. (Android 5.0 에서 Camera2 API 를 지원하기 시작한 이후로 기존의 Camera API 는 deprecated 된 상태입니다. 복잡한 시나리오의 향상된 카메라 기능을 사용하기 위해서 Camera2 API 사용을 권장하고 있습니다.) 안드로이드 개발자 가이드를 참고하여 각 카메라 별 지원 범위 안에서 다양한 기능을 사용할 수 있습니다.

 

다양한 카메라 소프트웨어 레이어

  • Application
  • Framework
  • Hardware Abstraction Layer (HAL)
  • Image Quality
  • Solution

 

안드로이드 단말에서 정상적인 카메라 동작을 하기 위해서는 수 많은 소프트웨어 레이어와 하드웨어 모듈의 상호 작용이 필요합니다. 삼성 갤럭시에 탑재된 기본 삼성 카메라 앱 뿐만 아니라 Android SDK 로 개발된 모든 카메라 앱들이 정상적으로 동작해야 합니다. 단말에 탑재된 Android Framework 와 Hardware Abstraction Layer (HAL) 의 호환성과 안정성을 위해 Compatibility Definition Document (CDD) 를 충족하는지 확인하고 CTS, VTS, ITS 등 각종 자동화 검증을 통과한 후 구글 승인을 받아야 안드로이드 단말 출시가 가능합니다. 물론 이런 기본적인 절차는 최소한의 자격 조건이고 삼성 자체적으로도 양질의 자동화 검증과 사용자 검증을 진행하고 있습니다.

 

  1. Compatibility Definition Document (CDD)
  2. Compatibility Test Suite (CTS)
  3. Vendor Test Suite (VTS)
  4. Camera Image Test Suite (ITS)

 

1. Compatibility Definition Document (CDD)

먼저 CDD 라는 호환성 정의 문서가 있습니다. CDD 로 구체적인 요구사항을 명문화하고 명확하게 설명하여 모호성을 없애는 역할을 합니다. 모든 사양에 대하여 포괄적인 내용을 담고 있는 것은 아니기 때문에 완전한 spec 문서라고 보기는 어렵고 안드로이드 코드와 SDK API 문서, CTS 등과 함께 호환성 내용을 상호 보완하고 있습니다. 각 안드로이드 버전 별로 배포됩니다.

 

예)

[C-1-3] MUST NOT use a front-facing camera as the default for the Camera API and MUST NOT configure the API to treat a front-facing camera as the default rear-facing camera, even if it is the only camera on the device.

 

Camera API 의 기본 카메라를 전면 카메라로 사용하면 안 된다. 단말에 카메라가 하나만 존재하더라도 전면 카메라를 기본 후면 카메라처럼 동작시키면 안 된다.

 

이런 부분은 문서로 작성되어 있지 않으면 알기 어려운 내용입니다.

 

2. Compatibility Test Suite (CTS)

호환성을 테스트하기 위한 CTS 입니다. PC 에 연결된 기기나 에뮬레이터 위에서 직접 실행하여 단말의 비호환성을 조기에 발견하고 호환성을 유지하기 위한 목적을 갖고 있습니다. 플랫폼 API 부터 Data, Intents, Permissions, Resources, Signature, Dalvik 테스트까지 다양한 레이어에서 호환성을 테스트하고 있습니다. 안드로이드OS 개발에 있어서 가장 기본적이고 가장 큰 범위의 테스트입니다.

 

3. Vendor Test Suite (VTS)

커널, HAL 등 vendor 업체의 구현된 부분을 gtest, JUnit, kernel test 방식 등으로 테스트합니다.

 

ea3558c6-dd43-4fd3-a5b8-3d8f7c45797b.png

(출처: https://source.android.com/docs/core/architecture#hidl)

 

Android 8.0 에서 안드로이드 OS 프레임워크와 하드웨어 종속적인 vendor 구현을 분리하는 Treble 아키텍쳐를 공개했습니다. OS 업데이트를 할 때 vendor 이미지는 재활용할 수 있는 구조입니다. 위 그림의 Vendor interface 는 이전 OS, 신규 OS 와 모두 호환이 되어야 합니다. VTS 에는 이 vendor interface 와 구현을 테스트하는 내용이 포함 되어있습니다.

 

4. Camera Image Test Suite (Camera ITS)

카메라는 민감한 이미지 센서를 통해 동작하며 촬영 시 노출 조건 등 다양한 환경에 따라 다르게 동작합니다. 자동화 테스트를 할 때 가상의 자동화된 환경을 활용하기도 하지만 실제 환경에서 이미지 결과까지 확인을 해야 할 필요가 있습니다. ITS 는 실제 카메라 환경을 박스 등 정해진 구조물을 활용하여 갖추고 테스트하는 suite 를 포함하고 있습니다.

 

cce69094-f1e2-40de-9aab-8bada30a59f2.png

ecf573ce-9a56-444c-a9d3-4c22162e0bb9.png

 

(출처: https://source.android.com/docs/compatibility/cts/camera-wfov-box-assembly)

 

ITS 테스트 중 하나인 광각 카메라 화각 테스트를 위한 키트입니다. 이 안에 안드로이드 단말을 설치하여 단말의 위치를 변경하면서 테스트가 가능합니다. 안드로이드 개발자 사이트에 해당 키트에 대한 스펙이 있어서 이를 토대로 직접 제작하거나 공식 키트를 직접 구매하여 사용할 수 있습니다.

 

29b7b89b-09cb-4b18-8f76-65de57d3f6b1.png

 

위의 표준화 조건을 지키는 범위 내에서 삼성 카메라는 안드로이드에서 공식적으로 제공하지 않는 기능을 위해 Android Framework 의 기본 API 와 HAL Interface 이 아닌 자체적인 path 를 직접 구현하여 사용해 왔습니다.

 

4d5c26ee-0d33-4f3f-a4f9-6acdf80ad58a.png

 

최고의 카메라 앱을 선보이기 위한 당사의 정책 방향이 있기도 했지만 특수성으로 생기는 한계 때문에 제한할 수 밖에 없었던 기능도 많이 있습니다.

 

 

ac0cc493-379e-49e7-9b0f-5e0a262dd56b.png

 

그렇지만 저희는 예전부터 꾸준히 자체 코드를 AOSP 로 통합하려는 노력을 하고 있습니다. 단말 업체의 커스텀 코드를 줄이고 AOSP 코드를 그대로 따를수록 유지/보수에 도움이 되고, 대외적으로는 전체 안드로이드 생태계에도 도움이 될 수 있기 때문인데요.

 

이번 Android 13 에는 구글과의 협업을 통해 삼성이 자체적으로 개발하여 사용하던 일부 기능을 public API 로 사용할 수 있게 공개했습니다. 삼성 카메라에서만 동작하던 기능을 일반 안드로이드 어플리케이션도 구현하여 사용할 수 있게 되었습니다. 저희는 개발 초기 단계부터 구글과 함께 계획을 같이 세우고, 개발과 테스트를 함께 하는 방식으로 협업을 했습니다.

 

Android 13 Collaboration with Google

  1. Torch Flash Strength Control
  2. Stream Use Case
  3. Preview Mirror Mode
  4. Camera Preview Stabilization
  5. Camera-Display Sync

이전 OS 버전까지 삼성 내부적으로 구현했던 기능이 구글과의 협업을 통해 Android public API로 공개되었습니다. OS 업데이트 정책으로 인하여 주로 Android 13 으로 출시하는 모델부터 지원하는 기능이 많아서 하위 호환 면에서 아쉬운 부분들이 있지만 장기적인 관점으로 접근하여 진행하고 있습니다.

 

1. Torch Flash Strength Control

안드로이드에서는 기본적으로 별도의 카메라 권한 없이 Camera2 API 로 플래시 제어가 가능합니다. 기존에는 on/off 함수만 있었으나 이번 Android 13 부터 플래시 조명의 레벨을 조절할 수 있는 함수와 콜백이 추가되었습니다. 갤럭시의 기본 손전등 기능에서 밝기를 조절할 때 사용하던 자체 API 를 이제 public 하게 사용할 수 있습니다.

 

Since API level 23

 

 

 

 

 

val cameraId = "0"
val cameraManager = context.getSystemService(CAMERA_SERVICE) as CameraManager
val torchCallback = object : TorchCallback() {
    override fun onTorchModeChanged(cameraId: String, enabled: Boolean) {
        // get enabled
    }
}

// register
cameraManager.registerTorchCallback(torchCallback, handler)

// 플래시 켜기
cameraManager.setTorchMode(cameraId, true)

 

 

 

 

 

 

Since API level 33 (Android 13)

 

 

 

 

 

val cameraId = "0"
val cameraManager = context.getSystemService(CAMERA_SERVICE) as CameraManager
val torchCallback = object : TorchCallback() {
    override fun onTorchStrengthLevelChanged(cameraId: String, newStrengthLevel: Int) {
        // get newStrengthLevel
    }
}

// register
cameraManager.registerTorchCallback(torchCallback, handler))

// default level 과 max level 값 읽기
val cameraCharacteristics = cameraManager.getCameraCharacteristics(cameraId)
val defaultLevel = cameraCharacteristics.get(CameraCharacteristics.FLASH_INFO_STRENGTH_DEFAULT_LEVEL)
val maxLevel = cameraCharacteristics.get(CameraCharacteristics.FLASH_INFO_STRENGTH_MAXIMUM_LEVEL)

// 특정 level 로 플래시 켜기
cameraManager.turnOnTorchWithStrengthLevel(cameraId, 3)

// 현재 flash level 읽어오기
val currentLevel = cameraManager.getTorchStrengthLevel(id)  // return 3

 

 

 

 

 

 

2. Stream Use Case

stream 은 Camera2 API 에서 이미지 포맷과 사이즈 등의 정보를 담고 있는 버퍼를 말합니다. Preview, Capture, Video 등의 시나리오에 따라 각각의 이미지 포맷과 사이즈를 가진 stream 을 구성할 수 있고 이미지 분석 등을 위해 동시에 여러 stream 을 사용하는 것도 가능합니다.

 

자체적으로 stream 의 종류를 옵션으로 선언하여 최적화했던 기능을 Stream Use Case 으로 구현하여 PREVIEW, RECORD, VIDEO_SNAPSHOT, SNAPSHOT, VIDEO_CALL 등의 값을 선언하여 사용할 수 있게 되었습니다. SNAPSHOT 의 경우 고화질, VIDEO_CALL 인 경우 장기간 사용을 위한 소모전류 최적화 등 각 stream use case 에 따라 화질, 성능 개선 등의 최적화를 하고 있습니다.

 

3. Preview Mirror

전면 카메라 프리뷰 화면에서 화면이 거울처럼 보이는 이유는 카메라의 실장 각도(0, 90, 180, 270)와 위치(전면, 후면)에 따라 프레임워크에서 카메라 프리뷰 화면을 mirror 처리하고 있기 때문입니다.

 

Android 13 부터 Camera OutputConfiguration 에 mirror mode 옵션이 추가 되어 VERTICAL, HORIZONTAL 옵션 등으로 flip 동작 및 flip 축을 변경할 수 있습니다. 기존 Bar type 단말의 전/후면 카메라에서는 별도의 설정없이 기본값 MIRROR_MODE_AUTO 로 적용해도 동작에 문제가 없으며, Galaxy Z Fold, Galaxy Z Flip 등의 폴더블 모델의 경우에는 후면 카메라를 이용한 Rear Cam Selfie, Quick Shot 모드 등에서 VERTICAL, HORIZONTAL 를 통해 mirror 동작을 구현 할 수 있습니다.

 

30ac201b-4617-47ec-9ba3-8bb209d173cf.png

 

Quick Shot 모드에서는 MIRROR_MODE_V 값으로 상하 반전, Rear Cam Selfie 모드에서는 MIRROR_MODE_H 값으로 좌우 반전을 하여 화면을 거울처럼 보이게 변경합니다.

 

4. Camera Preview Stabilization

Video Stabilization 기능은 광학식, 전자식, 디지털식 등 다양한 방식이 존재합니다. Camera2 API 로 디지털 방식의 Video Stabilization 값을 선언해서 사용할 수 있습니다. 디지털식은 보통 화면을 잘라 생긴 여분의 마진 구역을 활용하여 자이로센서와 영상 분석 등으로 흔들림없는 부드러운 영상을 만드는데요. 

 

 

bdd7e6ec-1fe6-403c-90e1-427038b19068.png

 

보통은 녹화하면서 내부적으로 보정을 하기 때문에/ 프리뷰 화면과 결과물이 다른 경우가 생기기도 합니다.

 

cd7216bd-4311-4414-a1b7-5730fef11e35.png

 

이번에 추가된 CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION 을 설정하면 Preview 화면에서부터 최대 10% 의 보정 마진(S22 기준)을 잡고 화각을 좁힌 후 실시간으로 흔들림 방지 보정을 하면서 촬영을 할 수 있습니다. Preview 화면을 바로 비디오로 녹화하는 카메라 앱에서 VIDEO_STABILIZATION 기능을 활용할 수 있다는 장점이 있습니다.

 

5. Camera-Display Sync

안드로이드 프레임워크에 카메라 디스플레이 개선 코드도 반영이 되었습니다.

 

354137f0-da8d-446c-ae31-7048b8a6d4bc.png

 

화면은 보통 VSYNC 주기에 맞추어 균일한 간격으로 출력이 되는데요. 카메라 output 의 실제 촬상되는 간격은 균일하지만 프로세싱을 거치면서 Display 혹은 Codec 에 불규칙한 주기로 전달이 되는 경우가 있습니다. 이렇게 되면 Display 의 VSYNC 주기 안에 카메라 아웃풋이 제대로 전달되지 않아 프레임 드랍이 발생하기도 합니다.

 

71f95226-cb6c-44cc-be0b-891601eb3548.png

 

삼성에서는 이 Display 프레임 드랍을 최소화하기 위해 Display 의 갱신 주기에 맞춰 카메라 화면 출력을 최적화하는 코드를 추가하였습니다. 해당 아이디어를 구글에 공유하고 협업을 통해 최적화하여 Display 프레임 드랍을 최소화하는 코드가 안드로이드 공통 코드에 추가되었습니다.

 

Camera Extensions

CameraX 는 2019년 구글에서 발표한 Camera 를 위한 Jetpack Library 입니다. 여타 Jetpack Library 처럼 Android SDK 를 보완하는 support library 역할을 합니다. CameraX 는 Android 5.0 (API Level 21)까지 하위 호환이 되고, Preview, Image Analysis, Image Capture, Video Capture 등의 API 를 기존 Camera2 API 보다 쉽게 사용할 수 있도록 제공하고 있습니다.

 

269aba20-e09c-4a8e-b28c-bda2415e5647.png

 

CameraX 는 단말 제조 업체에서 제공하는 카메라 특화 기능을 CameraX Extensions 라는 별도의 라이브러리로 제공하고 있습니다. CameraX Extensions 라이브러리를 사용하면 각 vendor 에서 지원하는 특수한 촬영 모드를 추가로 사용할 수 있습니다.

 

삼성은 CameraX 초기 개발 단계부터 Google 과 협업하여 Extensions 기능을 개발하였고 현재 다수의 갤럭시 모델에서 CameraX Extensions 기능을 사용할 수 있습니다. 각 단말 업체가 OEM Vendor Library 를 구현하면 앱에서 CameraX Extensions 라이브러리를 사용할 수 있습니다. 현재 AUTO, Bokeh, Face Retouch, HDR, Night 모드를 각각 지원하여 사용할 수 있습니다.

 

당시 Google I/O 와 SDC 에서 CameraX를 소개했던 영상입니다.

 

688b9b8c-c8c8-4246-9fd8-c97910d637a8.png

 

(출처: https://source.android.com/docs/core/camera/camerax-vendor-extensions#architecture)

 

Android 12부터는 Camera2 API 에서도 CameraX Extensions 라이브러리를 사용할 수 있도록 Camera2 Extensions API가 추가되었습니다. 단말에 기존 CameraX Extensions 에서 쓰는 OEM Vendor Library가 포함되어 있으면 Camera2 에서도 Extensions API 로 같은 기능을 사용할 수 있습니다. Camera2 API 를 쓰는 앱은 CameraX 를 따로 쓰지 않고도 Camera2 API 와 비슷한 구조로 특화 기능을 구현하여 사용할 수 있게 되었습니다. CameraX 와 Camera2 API 는 결국 내부적으로는 같은 라이브러리를 사용하기 때문에 최근에는 CameraX Extensions 와 Camera2 Extensions 를 통합하여 Camera Extensions 라고 부르고 있습니다.

 

Samsung Camera SDK

현재 Android SDK 와 Camera Extensions 로는 구현할 수 없는 삼성 카메라 기능을 일부 업체에서 사용할 수 있도록 Samsung Camera SDK 를 제공하고 있습니다.

 

52d08e65-2099-49e3-8b0d-bafb98c2aa45.png

 

Samsung Camera SDK 는 Camera2 API 기반으로 Camera SDK Client 의 API를 호출하고 연결된 SDK Service 에서 삼성 카메라 솔루션을 구동하는 방식으로 동작합니다.

 

지원 기능 

  • HDR
  • Super Night
  • Smooth Zoom
  • Super Resolution
  • Video HDR
  • VDIS
 

60eb467a-8256-48e6-8c5f-1efd8ed5bbf5.png

Samsung Camera SDK 를 사용하는 대표적인 앱으로 Snapchat 이 있습니다. 지난 갤럭시 S22 Unpack 이벤트와 SDC 에서 발표했던 것과 같이 Snapchat 은 갤럭시 S22 에서 Samsung Camera SDK의 HDR 촬영, Super Night, Smooth Zoom, Super Resolution 기능을 지원합니다. Snapchat 의 야간 모드를 사용하면 어두운 환경에서 밝고 좋은 품질의 촬영이 가능합니다. 모든 카메라 렌즈를 활용하여 부드러운 전환이 가능하고 높은 품질의 Tele Camera 촬영도 가능합니다. 이 외에도 Snapchat 의 특정 모드에 Samsung Camera SDK 의 Video HDR, Preview Stabilization 이 적용되어 있습니다.

 

Video Call Effects

 

1dfe9aae-cfd6-4f90-b0ed-2d9f2739035a.png

 

저희는 앞서 소개드린 방식을 넘어 별도의 SDK 나 별다른 수정 없이 3rd party 앱에 삼성 카메라 솔루션을 적용하는 새로운 개념의 플랫폼을 구축하게 되었습니다. 위의 영상 통화 효과 기능으로 3rd party 영상 통화 앱에 삼성 카메라 솔루션이 적용된 추가 기능을 사용할 수 있습니다. 영상통화 효과 설정에서 사용하고 싶은 배경 설정을 할 수 있고 각 영상 통화 앱 사용 중에 플로팅 버튼으로 실시간으로 효과를 설정할 수 있습니다.

 

 

af886720-0f9e-4ff9-9a39-534b90f7f625.png

이렇게 영상 통화 앱의 사용 중에 보이는 플로팅 버튼을 눌러서 옵션을 적용할 수 있습니다. 배경을 흐리게 하거나, 배경의 색을 변경하거나 원하는 이미지로 배경을 바꿀 수 있습니다. 자동 프레이밍 모드 옵션을 사용하면 인식된 인물의 인원과 구도에 따라 촬영 앵글과 줌 조절을 자동으로 할 수도 있습니다.

 

 

780e7054-5963-4416-a417-48bdad61cbdb.png

 

영상 통화 효과 설정에서 적용하려는 모드의 값을 내리면 삼성 카메라 프레임워크와 삼성 카메라 솔루션을 통해 설정 된 결과가 영상통화 앱에 추가로 적용되는 방식입니다.

 

마무리

 

a2c04ef5-9f74-4318-bb84-acb5772b8cb4.png

지금까지 다섯 가지의 주제로 삼성 갤럭시 카메라 에코시스템을 소개드렸습니다. 저희는 기본적인 Camera API 의 호환성과 안정성을 보장하면서, 자체적인 내부 기능을 신규 API 로 공개하기 위해 노력하고 있습니다. CameraX 와 Camera2 의 확장 기능과 SDK 로 갤럭시 카메라의 특화 기능을 제공하고, 영상 통화 앱에는 자체 플랫폼으로 추가 기능을 제공하고 있습니다. 이렇게 다양한 방식으로 앱 개발자를 위한 카메라 개발 생태계를 구축하고 있습니다.

 

3cd8d0ae-3f1a-4da9-b655-c1ddeb98a11b.png

 

저희 삼성 갤럭시 카메라 에코시스템은 이제 시작하는 단계입니다. 앞으로도 새로운 모델이나 다음 안드로이드 OS 에 새로운 기능을 지원할 예정입니다. 아직 부족한 점도 많은데요. 앞으로 보다 나은 이미지와 비디오 품질, 새로운 비주얼 경험, 그리고 쉬운 구현을 목표로 모바일 카메라 생태계를 이끌겠습니다. 많이 기대해주세요.


CamCyclopedia(카메라 백과사전) 목차 바로 가기

CamCyclopedia 소개글 바로 가기

이외에도 CamCyclopedia는 커뮤니티 -> 카테고리(app) -> CamCyclopedia -> “CamCyclopedia 목차를 통해 언제든지 확인하실 수 있습니다.

4 의견