カメラ周りがエラーまみれ

 「ぞろぞろ」というタイトルのアプリを作り始めました。
device-2015-01-12-114341
 カメラ機能を使いたいので、以前作った「秘密のスライドパズル」のソースを利用・・
 ic_launcher-web
したところ、カメラ周りでエラーが出ていることが発覚し(うすうす気付いてい)ました。
 
 「秘密のスライドパズル」のカメラ(この先出てくる「カメラ」は android.hardware.Camera の方ね。org.andengine.engine.camera ではありません。)は、標準アプリを使わずに SurfaceView を継承した CameraPreviewSurfaceView を表示して、その上に背景を透明にした AndEngine の Scene を乗せています。画像は、カメラ機能の takePicture() を使わずに、プレビュー画面を取得して decodeYUV420SP() メソッドでデコードするという、いわゆる無音カメラの作り方ですね。無音にするのが目的ではないので、シャッター音は付けていますが。
 
 で、改めてASUS ME176 シリーズ タブレットPC ホワイト ( Android 4.4.2 / 7 inch / Atom Z3745 / 1GB / eMMC 16G / WIFI対応 ) ME176-WH16で起動してみたところ、decodeYUV420SP() で ArrayIndexOutOfBoundsException でごわす。
 
 「秘密のスライドパズル」は、480×800 の画面サイズを固定表示しているので、カメラのプレビューサイズも 480×800 に一番近い解像度を選択しているのですが、Android のカメラは横起動なので 800×480 サイズで近いカメラは見つけなければならない。これを誤っていた。否、やっていなかった。
 コード直してテストしたら、上手く動いている模様。
 
 ここで少し欲が出た。
 フロントカメラも使えるようにしたい・・。今までフロントカメラがある機種ありませんでしたからね。
 
 早速、作業に入ったところエラー連発。
 カメラの切り替え時に動いているカメラをリリースしてから改めてフロント(バック)カメラをセットしたのですが、setPreviewCallback() や setPreviewDisplay() を無視したので、リリース後にコールバックがかかりエラー。たぶん、そんなところ。
 直して、取得できるようになっても、今度はフロントカメラから取得した画像が上下逆さまになってしまう。取得元に応じて回転させて対応しました。
 ふ~。
 
 せっかく直したので「秘密のスライドパズル」をアップデートしました。