カメラを扱うときの注意点は?
カメラ機能を提供する ICamera インターフェースは、機種依存の最も高いインターフェースのひとつです。
そのため、イベントの発生タイミングなどが機種によって異なる場合があります
カメラ機能を提供する ICamera インターフェースは、機種依存の最も高いインターフェースのひとつです。
そのため、イベントの発生タイミングなどが機種によって異なる場合があります
ICamera インターフェースには、プレビュー モード / スナップショット モード / ムービー モードの 3 つのモードがあります。
これらのうち、プレビュー モードとスナップショット モードは通常セットで使用します。
まず、プレビュー モードとはその名の通り、プレビューを表示するモードです。デジカメに例えると、液晶画面に被写体がリアルタイムに表示されている状態です。
そして、スナップショット モードは、静止画の撮影を行うモードです。これもデジカメに例えると、シャッター ボタンが押されてから画像がファイルに保存されるまでの状態です。
一方、ムービー モードとは、その名の通り動画を撮影するためのモードです。
コールバック関数の第 2 引数に、AEECameraNotify 構造体へのポインタが渡されます。
この AEECameraNotify 構造体の nCmd、nSubCmd、nStatus に、現在のカメラの状態が格納されています。
プレビュー処理はリアルタイム性が要求されるため、プレビュー モードではノイズ除去などの画像処理が行われません。
そのためスナップショット モードで撮影された画像と比較すると、ノイズが多い、輪郭がぼやけているなどの問題があります。
BREW 2.1 エミュレータは、 ICAMERA インターフェースをサポートしておりません。
弊社では、Camulator という ICAMERA インターフェースをシミュレートするツールを
公開しております。
Camulator を使うと、 ICAMERA インターフェースを使うカメラのアプリは BREW 2.1 エミュレータで動作します。
※ BREW 3.1 以降、PCにカメラを接続することによりカメラのアプリをエミュレータ上で動作させることが可能になっています。
関連情報
遅延エンコードに設定されている場合も、ICAMERA_SetMediaData() を設定する必要があります。
これは、ICamera インターフェースがファイルへの出力を前提に設計されているためで、遅延エンコードに設定されている場合は、ICAMERA_RecordSnapshot() が完了した後で ユーザーが ICAMERA_EncodeSnapshot() によってファイルへ出力することが期待されています。
そのため、ICAMERA_SetMediaData() が設定されていない場合にはスナップショット モードへの移行を行わない機種すら存在します。
ファイルに出力する必要がない場合には、
pMe->_mediaData.clsData = MMD_FILE_NAME; pMe->_mediaData.pData = "dummy.jpg"; ICAMERA_SetMediaData(pMe->_camera, &(pMe->_mediaData), "image/jpeg");
のように、適当な値を設定してください。
サスペンド時の処理として、 ICamera インターフェースのインスタンスの解放をプログラムとして記述する必要があります。
プレビュー モードとスナップショット モードとの切り替えを行う場合は、ICAMERA_Stop() によってカメラを一度停止させる必要があります。
一方コールバック関数内では、カメラが停止したことは通知されますが、なぜカメラが停止したのか (スナップショット モードに移行するためなのか、それとも本当にカメラを停止するためなのか) は通知されません。
この問題の解決法は BREW プログラミング入門 「BREW でカメラ」で詳しく解説していますので、そちらをご覧ください。
即時エンコードと遅延エンコードとの違いは、スナップショット モードによって撮影された画像をファイルに出力するタイミングにあります。