BREW カメラアプリ 〜 BREW C++ カメラプログラミング 〜
ICamera インターフェース
はじめに
SophiaFramework UNIVERSE では、カメラの処理はSFBCamera クラスを使います。
SFBCamera クラスは BREW の ICamera インターフェースをラップしたものです。
このチュートリアルでは、カメラで撮影した静止画を加工・処理するための基本的なプログラミング知識ついて解説します。
※ ICamera インターフェースには機種依存があります。機種によっては適用できません。
ICamera インターフェースのモード
ICamera インターフェースには、次の 3 つのモードがあります。
- プレビュー モード
- スナップショット モード ( 静止画撮影モード )
- ムービー モード
プレビュー モードで被写体にカメラを向け、スナップショット モードで撮影する、という風にプレビュー モードとスナップショット モードは通常セットで使います。
このチュートリアルでは、プレビュー モードとスナップショット モードについて解説します。
カメラ イベントの処理
ICamera インターフェースで重要なポイントは、イベントの処理です。
プレビュー モードでは、プレビュー用フレーム画像の取得が完了した時に CAM_STATUS_FRAME イベントが発生します。
スナップショット モードでは、撮影開始時に CAM_STATUS_START イベント、撮影完了時点に CAM_STATUS_DONE イベントなどのイベントが発生します。
カメラ処理に関する様々なイベントを順序良く適切に処理しなければいけません。
その他、スナップショット モード時には画像を取得できるようになるまでキー入力を受け付けないなど、ユーザー インターフェースの考慮も必要です。
即時エンコードと遅延エンコード
ICamera インターフェースでは、スナップショット モードに移行する前に、 ICAMERA_SetMediaData ( SophiaFramework UNIVERSE では SFBCamera::SetMediaData ) によって撮影した画像の出力形式を指定します。
スナップショット モードで撮影した画像をすぐにファイル形式に変換することを「即時エンコード」と呼びます。
撮影後暫くしてからファイル形式に変換することを「遅延エンコード」と呼びます。
即時エンコードではカメラで撮影した画像のファイルへの変換が不要です。 直ぐにファイルへ保存しない時は、遅延エンコードを使います。
但し、遅延エンコードの場合でも、ICAMERA_EncodeSnapshot ( SophiaFramework UNIVERSE では SFBCamera::EncodeSnapshot ) 関数でファイルに変換できます。
以下では、遅延エンコードの場合について解説します。 ( 即時エンコードも基本は同じです )