제1장: 안드로이드 Camera2를 환영합니다
안드로이드 Camera2가 왜 중요한지, Camera1 및 CameraX와 어떻게 다른지, 무엇이 가능한지, 그리고 이 시리즈에서 무엇을 만들게 될지 알아보세요.
제2장: 스마트폰 카메라 탐색하기
스마트폰 내부의 카메라 하드웨어를 이해하세요: 렌즈, 이미지 센서, ISP 프로세서, RAW와 JPEG의 차이, 멀티 카메라 설계, 그리고 광자가 저장된 사진이 되기까지의 전체 과정을 살펴봅니다.
제2장: 스마트폰 카메라 이해하기
모든 스마트폰 내부의 카메라 모듈 하드웨어를 탐구하세요: 렌즈, 이미지 센서, ISP 프로세서, RAW와 JPEG의 차이, 멀티 카메라 설계, 그리고 광자가 저장된 사진이 되기까지의 전체 과정을 살펴봅니다.
제3장: 현대 스마트폰 사진의 세계
현대 스마트폰의 계산 사진학 및 광학 기능 투어: HDR, 인물 모드 보케, 야간 모드, 슬로우 모션, 초광각, 망원, 매크로, 그리고 계산 사진학이 하드웨어와 소프트웨어를 융합하는 방법을 살펴봅니다.
제4장: Camera2 아키텍처
안드로이드 Camera2 API의 핵심 아키텍처를 이해하세요. 불변의 CaptureRequest, 비동기 CaptureResult, 그리고 앱과 하드웨어를 연결하는 CameraCaptureSession 파이프라인 모델을 배웁니다.
제5장: 첫 Camera2 프로젝트 만들기
처음부터 완전한 안드로이드 Camera2 프로젝트를 설정하세요. 카메라 권한, CameraManager 초기화, HandlerThread를 이용한 백그라운드 스레딩, 그리고 TextureView 하드웨어 가속을 위한 프로젝트 구성에 대해 배웁니다.
제6장: 카메라 탐색하기
기기의 카메라들을 열거하고 특징을 파악하는 방법을 알아보세요. 논리적/물리적 카메라 ID의 차이, LENS_FACING을 통한 방향 구분, 그리고 가장 중요한 INFO_SUPPORTED_HARDWARE_LEVEL을 확인하여 기기의 성능 한계를 파악하는 법을 배웁니다.
제7장: 카메라 열기
CameraManager.openCamera()를 사용하여 물리적 카메라 장치에 연결하는 방법을 배우세요. CameraDevice.StateCallback을 마스터하고, 에러 코드를 처리하며, 안드로이드 수명 주기에 맞춰 카메라를 닫는 올바른 방법을 학습합니다.
제8장: 미리보기 보여주기
안드로이드 TextureView와 CameraCaptureSession을 사용하여 실시간 카메라 미리보기를 구현하세요. Surface 준비, 캡처 세션 구성, 그리고 TEMPLATE_PREVIEW를 사용하여 반복적인 프레임 스트리밍을 설정하는 방법을 배웁니다.
제9장: 사진 촬영하기
Camera2를 사용하여 사진을 찍고 저장하는 전체 과정을 마스터하세요. ImageReader 설정, TEMPLATE_STILL_CAPTURE를 이용한 캡처 요청 빌드, JPEG 인코딩 처리, 그리고 안드로이드 MediaStore를 이용한 갤러리 저장 방법을 배웁니다.
제10장: Camera2 파이프라인
Camera2 파이프라인 아키텍처 — CaptureRequest, CaptureResult, 요청 큐, 결과 콜백, 그리고 요청 제출부터 HAL 처리 및 결과까지의 전체 흐름을 심층 분석합니다.
제11장: 캡처 유형
Camera2의 세 가지 요청 제출 모드인 반복(Repeating), 단일(One-shot), 연사(Burst) 요청을 마스터하세요. 각 유형의 사용 시점과 템플릿(PREVIEW, STILL_CAPTURE, RECORD)을 통한 파이프라인 최적화 방법을 알아봅니다.
제12장: CameraCharacteristics 심층 분석
카메라를 열기 전에 모든 카메라를 설명하는 불변의 정적 메타데이터인 CameraCharacteristics를 마스터하세요. 하드웨어 레벨(LEGACY, LIMITED, FULL, LEVEL_3, EXTERNAL), 능력 플래그, 메타데이터 키 구조 및 런타임 능력 쿼리를 배웁니다.
제13장: 노출
사진 노출의 기본인 ISO, 셔터 속도, 조리개의 '노출 삼각형'을 마스터하세요. EV 스톱, Sunny 16 법칙, 그리고 서로 다른 설정 조합이 창의적인 트레이드오프를 통해 어떻게 동일한 노출을 만들어내는지 이해합니다.
제14장: Camera2에서의 수동 노출
안드로이드 Camera2 API를 사용하여 수동 노출을 구현하세요. 3A 자동화를 비활성화하고, SENSOR_SENSITIVITY와 SENSOR_EXPOSURE_TIME을 제어하며, 노출 브래키팅 시리즈를 캡처하고 OEM 노즈 감소 최적화 손실과 같은 중요한 트레이드오프를 이해합니다.
제15장: 초점
안드로이드 Camera2에서 자동 및 수동 초점을 마스터하세요. AF 모드, AF 상태 머신, 원샷 트리거 및 캡처 시퀀스, LENS_FOCUS_DISTANCE 디옵터를 이용한 수동 초점, 과초점 거리, 그리고 Kotlin으로 초점 SeekBar 슬라이더를 만드는 방법을 이해합니다.
제16장: 화이트 밸런스 및 색상
안드로이드 Camera2의 자동 화이트 밸런스(AWB) 프리셋과 수동 색상 보정을 마스터하세요. COLOR_CORRECTION_GAINS, COLOR_CORRECTION_TRANSFORM, 그리고 켈빈 색온도를 카메라 ISP 하드웨어 파라미터로 변환하는 방법을 배웁니다.
제17장: 3A 파이프라인
자동 노출(AE), 자동 초점(AF), 자동 화이트 밸런스(AWB)를 조율하여 신뢰할 수 있는 스틸 사진 캡처 시퀀스를 구축하세요. 프리캡처 트리거, 플래시 모드, AE/AF 상태 머신을 배우고 촬영 전 세 가지 A를 조정하는 프로덕션 수준의 Kotlin 코드를 작성합니다.
제18장: RAW 사진 촬영
안드로이드 Camera2의 ImageFormat.RAW_SENSOR를 마스터하세요. 처리되지 않은 Bayer 데이터를 캡처하고, DngCreator를 사용하여 전문가 수준의 Adobe DNG 파일을 생성하며, RAW+JPEG 동시 캡처 파이프라인을 구축하는 방법을 배웁니다.
제19장: 고속 비디오와 슬로우 모션
안드로이드 Camera2의 고속 비디오 캡처 기능을 마스터하세요. CameraConstrainedHighSpeedCaptureSession을 사용하여 120fps 및 240fps 비디오를 녹화하는 방법, 하드웨어 제약 사항 이해, 그리고 매끄러운 슬로우 모션 파이프라인 구축 방법을 배웁니다.
제20장: 멀티 카메라
안드로이드 9 이상의 논리적 멀티 카메라 장치, 물리적 카메라 ID, APPROXIMATE 대 CALIBRATED 센서 동기화, 매끄러운 줌 전환, 그리고 Camera2 API의 OutputConfiguration.setPhysicalCameraId()를 통한 동시 듀얼 물리적 캡처에 대해 알아봅니다.
제21장: HDR 및 Ultra HDR
안드로이드 Camera2의 HDR 기능을 마스터하세요. HDR10 및 HLG 비디오를 위한 10비트 다이내믹 레인지 프로필과 안드로이드 14의 혁신적인 Ultra HDR (JPEG_R) 사진 포맷을 사용하는 방법을 배웁니다.
제22장: 카메라 익스텐션
Camera2 익스텐션을 사용하여 야간, 보케, HDR, 얼굴 보정과 같은 OEM 전용 카메라 기능을 활용하세요. CameraExtensionCharacteristics를 통해 지원 여부를 쿼리하고, 익스텐션 세션을 구성하며, 복잡한 3A 관리 없이 제조사 수준의 이미지 품질을 구현하는 방법을 배웁니다.
제23장: 제로 셔터 랙 및 재처리
순환 YUV/PRIVATE 버퍼링, CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG, InputConfiguration을 통한 재처리 가능 캡처 세션, ImageWriter 프레임 재주입, 그리고 강력한 사후 ISP 처리를 위한 createReprocessCaptureRequest를 사용하여 제로 셔터 랙(ZSL)을 구현하세요. 백그라운드 처리 연속성을 위한 switchToOffline()도 다룹니다.
제24장: CameraX
Camera2를 래핑하는 Jetpack의 수명 주기 인식 카메라 라이브러리인 CameraX를 마스터하세요. UseCase 아키텍처, 수동 파라미터 주입을 위한 Camera2Interop, 그리고 CameraX와 Camera2 중 무엇을 선택할지에 대한 결정 프레임워크를 배웁니다.
제25장: 네이티브 카메라 개발 (NDK)
고성능 실시간 처리를 위해 안드로이드 NDK의 ACamera API를 활용하세요. C++에서 카메라를 열고, 네이티브 하드웨어 버퍼를 사용하여 제로 복사(Zero-copy) 파이프라인을 구축하며, Vulkan 및 OpenGL ES와의 고속 연동 방법을 배웁니다.
제26장: 비동기 카메라 프로그래밍
Kotlin 코루틴과 Flow를 사용하여 Camera2의 콜백 지옥을 길들이세요. 일회성 작업(openCamera, createCaptureSession, capture)을 위한 suspendCancellableCoroutine, 지속적인 ImageReader 및 CaptureResult 스트림을 위한 callbackFlow, 반응형 UI를 위한 combine 연산자, 그리고 ANR과 데드락을 방지하기 위한 스레드 안전 패턴을 배웁니다.
제27장: 카메라 테스트
안드로이드 카메라 구현을 위한 테스트 전략을 수립하세요. 구글의 CTS(Compatibility Test Suite)와 ITS(Imaging Test Suite)가 HAL을 검증하는 방법, 기기별 특이사항 처리를 위한 테스트 하네스 구축, 그리고 실제 하드웨어 없이 CI에서 카메라 코드를 검증하기 위한 모킹(Mocking) 기법을 배웁니다.
Camera Metadata Encyclopedia
Complete reference guide for all essential CameraCharacteristics metadata keys including Sensor, Lens, Control, Scaler, Request, Flash, JPEG, Statistics, and Info categories.