第1章:Android Camera2へようこそ
なぜAndroid Camera2が重要なのか、Camera1やCameraXとの比較、何ができるようになるのか、そしてこのシリーズで何を構築するのかについて学びます。
第2章:スマートフォンカメラを理解する
スマートフォン内部のカメラモジュールハードウェアについて探求します。レンズ、イメージセンサー、ISPプロセッサ、RAWとJPEGの違い、マルチカメラ設計、および光子が保存された写真になるまでの全工程を解説します。
第3章:現代のスマートフォン写真術
現代の電話に搭載されている計算写真機能と光学機能のツアー。HDR、ポートレートのボケ、夜景モード、スローモーション、超広角、望遠、マクロ、および計算写真がいかにハードウェアとソフトウェアを融合させているかを探求します。
第4章:自分の電話を探索する
Android Camera Parametersコンパニオンアプリを使用して、自分のデバイスを検査します。カメラIDの読み取り、ハードウェアレベルの確認、カメラの列挙、サポートされている形式、フレームレート、ズーム範囲、およびRAW機能の検査方法を学びます。
第5章:初めてのCamera2プロジェクトを作成する
Camera2プロジェクトを一からセットアップします。カメラの権限、CameraManagerの初期化、HandlerThreadによる背景スレッド管理、およびTextureViewのハードウェアアクセラレーション設定について学びます。
第6章:カメラの検出
CameraCharacteristicsを使用してデバイス上のすべてのカメラを列挙し、照会します。カメラIDのセマンティクス、レンズの向き(前面/背面/外部)、外部USB OTGカメラ、およびLEGACYからLEVEL_3までのハードウェアレベルの階層について学びます。
第7章:カメラを開く
openCamera()を使用してカメラデバイスへのライブ接続を確立します。CameraDeviceのライフサイクルをマスターし、onOpened/onDisconnected/onErrorを備えたStateCallbackを実装し、ActivityのonPause/onResumeとの統合、およびSemaphoreベースの並行制御によるエラー処理について学びます。
第8章:カメラプレビューの表示
TextureView、SurfaceTexture、Surface、およびCameraCaptureSessionを使用して、カメラのライブフレームを画面にレンダリングします。SurfaceTextureListenerの実装、Matrix変換によるアスペクト比の補正、TEMPLATE_PREVIEWキャプチャリクエストの構築、およびsetRepeatingRequestによるプレビュー開始について学びます。
第9章:写真の撮影
ImageReader (JPEG)、プリキャプチャAEトリガー、およびCaptureCallbackステートマシンを使用して、Camera2で高品質な静止画をキャプチャします。Scoped Storageに対応したMediaStore (Android 10+) およびレガシーなFileOutputStreamを使用した写真の保存方法、Imageバッファを必ず閉じることの重要性について学びます。
第10章:Camera2パイプライン
Camera2パイプラインアーキテクチャのディープダイブ。CaptureRequest、CaptureResult、リクエストキュー、結果コールバック、およびリクエスト送信からHAL処理、結果返却までのエンドツーエンドのフロー。
第11章:キャプチャの種類
3つのCamera2キャプチャタイプ — 単発 (capture)、バースト (captureBurst)、繰り返し (setRepeatingRequest) — と、組み込みのテンプレート (TEMPLATE_PREVIEW, TEMPLATE_STILL_CAPTURE, TEMPLATE_RECORD など) について学びます。
第12章:CameraCharacteristics ディープダイブ
カメラを開く前に、そのカメラを記述する不変の静的メタデータである CameraCharacteristics をマスターします。ハードウェアレベル (LEGACY, LIMITED, FULL, LEVEL_3, EXTERNAL)、機能フラグ、メタデータキーの構成、および実行時の機能照会について学びます。
第13章:露出
写真の露出の基本 — ISO、シャッタースピード、絞りの「露出の三角形」をマスターします。EVステップ、サニー16ルール、および異なる組み合わせがどのように同じ露出を作り出し、どのようなクリエイティブなトレードオフを生むかを理解します。
第14章:Camera2におけるマニュアル露出
Android Camera2 APIを使用して、露出を完全にクリエイティブに制御します。オート露出を無効にする方法、SENSOR_SENSITIVITYによる手動ISO設定、SENSOR_EXPOSURE_TIMEによるナノ秒単位のシャッタースピード制御、およびタイムラプス、長時間露光、ブラケティングの動作する Kotlin コード例について学びます。
第15章:フォーカス
Android Camera2におけるオートフォーカスとマニュアルフォーカスの両方をマスターします。AFモード、AFステートマシン、単発のトリガーとキャプチャのシーケンス、LENS_FOCUS_DISTANCE(ジオプトリー)を使用したマニュアルフォーカス、過焦点距離、およびKotlinでのフォーカスSeekBarスライダーの構築について学びます。
第16章:ホワイトバランスと色
Android Camera2におけるオートホワイトバランスプリセットと手動の色補正について学びます。AWBモード、色温度 (2000K–10000K)、3×3色変換行列、COLOR_CORRECTION_GAINS、および暖色系の夕暮れプリセットや完全な手動ホワイトバランスのためのKotlinコードについて解説します。
第17章:3A パイプライン
Auto Exposure (AE)、Auto Focus (AF)、Auto White Balance (AWB) を連携させ、信頼性の高い静止画キャプチャシーケンスを構築します。プリキャプチャトリガー、フラッシュモード、AE/AF 状態マシンについて学び、撮影前にこれら 3 つの A を調整するプロダクション品質の Kotlin コードを作成します。
第18章:RAW写真撮影
RAW_SENSOR形式、DngCreatorによるDNGファイル作成、ベイヤーパターン、およびAndroid Camera2 APIでのRAW+JPEG同時キャプチャについて学びます。
第19章:ハイスピードビデオ
CameraConstrainedHighSpeedCaptureSession、createHighSpeedRequestList、およびStreamConfigurationMapのFPS範囲を使用して、120fpsおよび240fpsのスローモーション撮影を実装します。
第20章:マルチカメラ
Android 9以降の論理マルチカメラデバイス、物理カメラID、APPROXIMATE対CALIBRATEDのセンサー同期、シームレスなズーム切り替え、およびOutputConfiguration.setPhysicalCameraId()を使用した同時デュアル物理キャプチャについて学びます。
第21章:HDRとUltra HDR
DynamicRangeProfilesを使用したHDR10およびHLGビデオの実装、およびAndroid 14のJPEG_R (Ultra HDR ISO 21496-1) 静止画キャプチャについて学びます。SDRプライマリ画像とゲインマップによる後方互換性のあるハイダイナミックレンジ写真の仕組みを解説します。
第22章:カメラエクステンション
CameraExtensionSessionを使用して、OEMが提供する高速なコンピューテーショナルフォトグラフィ機能(夜景モード、ボケポートレートモード、HDR、美顔モード、オートモード)を利用します。CameraExtensionCharacteristicsの照会、レイテンシ管理、標準セッションとエクステンションセッションのアーキテクチャの違いについて学びます。
第23章:ゼロシャッターラグと再処理
循環するYUV/PRIVATEバッファ、CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG、InputConfigurationを使用した再処理可能なキャプチャセッション、ImageWriterによるフレーム再注入、および撮影後の高度なISP処理について学びます。switchToOffline()によるバックグラウンド処理の継続についてもカバーします。
第24章:CameraX
Jetpackのライフサイクル対応カメラライブラリであるCameraXをマスターします。UseCaseアーキテクチャ、手動パラメータを注入するためのCamera2Interop、およびCameraXとCamera2の選択基準について学びます。
第25章:ネイティブカメラ開発
Android NDKカメラスタックを使用して、ネイティブレベルで開発を行います。C++からACameraManagerを使用してカメラを開き、AHardwareBufferメモリをVulkanテクスチャとして直接バインドするゼロコピーARの実装方法、60fpsパイプラインのためのOpenGL/Vulkan相互運用について学びます。車載EVS移行の文脈も含まれます。
第26章:非同期カメラプログラミング
KotlinのCoroutinesとFlowを使用して、Camera2のコールバック地獄を解消します。単発操作(オープン、セッション作成、キャプチャ)のためのsuspendCancellableCoroutine、ストリームのためのcallbackFlow、およびデッドロックを防ぐスレッドセーフパターンについて学びます。
第27章:カメラのテスト
Androidカメラの包括的なテストガイド。Camera ITS (Image Test Suite) の内容、OEMが出荷前に検証する項目、CTS Verifierによる手動テスト、およびMockitoを使用したインストルメンテーションテストやCIで実行可能なハードウェアレベル別のテストの書き方について学びます。
第28章:Camera2アーキテクチャ
Camera2の集大成となるアーキテクチャ。KotlinアプリからBinder IPC、Framework、ネイティブのCameraService、Camera3Device、camera3_device_tを備えたHAL3、V4L2カーネルドライバ、そして最終的な物理センサー、ISP、VCMレンズ、フラッシュハードウェアまでのフルスタックを網羅します。Treble HAL要件、LEGACY HAL1ラッパー、Android 15のCameraDeviceSetupも含まれます。
カメラメタデータ百科事典
センサー、レンズ、制御、スケーラー、リクエスト、フラッシュ、JPEG、統計、情報などの各カテゴリを含む、主要なCameraCharacteristicsメタデータキーの完全なリファレンスガイド。