ホーム > デベロッパ > BREW FAQ

BREW FAQ : カメラ

カメラを扱うときの注意点は?

カメラ機能を提供する ICamera インターフェースは、機種依存の最も高いインターフェースのひとつです。例えば、イベントの発生タイミングが機種によって異なる場合があります

      

ICamera インターフェースのモードとは?

ICamera インターフェースには、プレビュー モード / スナップショット モード / ムービー モードの 3 つのモードがあります。

これらのうち、プレビュー モードとスナップショット モードは通常セットで使用します。

まず、プレビュー モードとはその名の通り、プレビューを表示するモードです。デジカメに例えると、液晶画面に被写体がリアルタイムに表示されている状態です。

そして、スナップショット モードは、静止画の撮影を行うモードです。これもデジカメに例えると、シャッター ボタンが押されてから画像がファイルに保存されるまでの状態です。

一方、ムービー モードとは、その名の通り動画を撮影するためのモードです。

      

即時エンコードと遅延エンコードの違いは?

即時エンコードと遅延エンコードとの違いは、スナップショット モードによって撮影された画像をファイルに出力するタイミングにあります。

スナップショット モードへの移行は、ICAMERA_RecordSnapshot() 関数によって行います。このとき即時エンコードに設定されていると、BREW は撮影した画像をファイルに出力した後で、コールバック関数の呼び出しを行います。つまり、画像の撮影とファイルへの出力が、ICAMERA_RecordSnapshot() 関数のみで行えるのです。

 即時エンコードの処理フロー

一方、遅延エンコードに設定されていると、BREW は静止画の撮影を行うとファイルへの出力は行わずにコールバック関数の呼び出しを行います。ファイルに出力する場合は、コールバック関数などで ICAMERA_EncodeSnapshot() を呼び出します。つまり、遅延エンコードが設定されている状態で撮影された画像をファイルに出力する場合は、ICAMERA_RecordSnapshot() と ICAMERA_EncodeSnapshot() をこの順に呼び出す必要があります。

遅延エンコードの処理フロー

      

遅延エンコードの場合も ICAMERA_SetMediaData で画像の出力形式を設定しなければいけませんか?

はい。

遅延エンコードに設定されている場合も、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");

のように、適当な値を設定してください。

      

カメラのサスペンドとレジュームは BREW がやってくれますか?

いいえ。

カメラのサスペンドとレジュームは BREW では行いません。ユーザーの責任において、サスペンド時には ICamera インターフェースの解放を、レジューム時には ICamera インターフェースの再生成を行ってください。

      

カメラの状態は何処に保存されますか?

コールバック関数の第 2 引数に、AEECameraNotify 構造体へのポインタが渡されます。この AEECameraNotify 構造体の nCmd、nSubCmd、nStatus に、現在のカメラの状態が格納されています。

      

カメラに関連するイベントとそのハンドリングの例を教えてください。

カメラのイベント処理は複雑です。 BREW プログラミング入門 「BREW でカメラ」で詳しく解説していますので、そちらをご覧ください。

      

プレビュー モードで撮影した画像についての注意事項は?

プレビュー処理はリアルタイム性が要求されるため、プレビュー モードではノイズ除去などの画像処理が行われません。そのためスナップショット モードで撮影された画像と比較すると、ノイズが多い、輪郭がぼやけているなどの問題があります。

      

カメラのイベントハンドリングの注意事項は?

プレビュー モードとスナップショット モードとの切り替えを行う場合は、ICAMERA_Stop() によってカメラを一度停止させる必要があります。

一方コールバック関数内では、カメラが停止したことは通知されますが、なぜカメラが停止したのか (スナップショット モードに移行するためなのか、それとも本当にカメラを停止するためなのか) は通知されません。この問題の解決法は BREW プログラミング入門 「BREW でカメラ」で詳しく解説していますので、そちらをご覧ください。