BREW でカメラ (前編) - 3 / 3 -
カメラ インターフェースの解放
カメラを終了させる方法を説明します。
ICamera インターフェースも、アプリ終了時に解放する必要があります。
重要なのは、「ICamera インターフェースを解放する時点で、カメラが停止していなければならない」ということです。
プレビュー モードのカメラを停止させるものとして、ICAMERA_Stop 関数があります。実際にカメラの動作が止まるのは、ICAMERA_Stop 関数が呼ばれて暫くしてからです。
ICAMERA_Stop 関数が呼ばれてカメラが停止すると、AEECameraNotify 構造体の nStatus 変数に CAM_STATUS_DONE が設定されて、コールバック関数が呼ばれます。
int camera_app_StopCamera(camera_app *pMe) { return ICAMERA_Stop(pMe->_camera); }
ICamera インターフェースはコールバック関数 camera_app_OnCamera 関数の中で解放します。
void camera_app_OnCamera(void *pUser, AEECameraNotify *pNotify) { camera_app *pMe = (camera_app *)pUser; switch (pNotify->nStatus) { case CAM_STATUS_FRAME: camera_app_OnPreview(pMe); break; case CAM_STATUS_DONE: // ICamera インターフェースを解放する ICAMERA_Release(pMe->_camera); break; }
カメラを終了したいときに camera_app_StopCamera 関数を呼ぶだけで、ICamera インターフェースの解放も一緒に行えます。
camera_app_StopCamera 関数は、カメラアプリが終了する時に発生する EVT_APP_STOP イベントで呼び出される camera_app_FreeAppData 関数で呼び出されます。
void camera_app_FreeAppData(camera_app* pMe) { // insert your code here for freeing any resources you have allocated... ... camera_app_StopCamera(pMe); }
「0」キーまたは「電源」キーが押されたときにアプリが終了するようにプログラミングすれば、camera_app は完成です。
記事掲載プログラムのソースコード
注意事項
BREW のカメラは最も機種依存が激しい機能の 1 つです。
本稿では、QVGA でのプレビューと撮影を前提にしています。VGA では正常に動作しない可能性があります。
また、W32H では動作確認を行っておりますが、他の機種については確認が取れていません。
※ 1. 全ての環境、全ての機種を前提に解説している訳ではないことを予めご了承ください。
※ 2. 本アプリは BREW シミュレーターではデフォルトの設定では動作いたしません。BREW シミュレーターで動作させるには Camulator などのツールが必要です。