Xperia X10 SO-01Bは良く売れてるみだい。

AndroidMarketのデベロッパーコンソールの件数をGoogleDocumentにスプレッドシートに記録してるのだが、
3月31日からダウンロード数が増えているので、すごく影響があるみたい。

私のアプリは2つともアンドロイダーさんに掲載してもらってるけど、Xperiaで動作確認が取れたアプリはXperiaマークがついていた。すごい・・。
んでAndroboiceは動作するらしい。よかったよかった。
しかしToyCamではうまく動作しないらしい。

調べたところXperiaではカメラのプレビューサイズで480×320を設定できないようだ。[320x240][640x480]は設定できるっぽい。
ToyCamはカメラのプレビュー映像のひとコマを保存するだけのアプリである。
最近つけたトイカメラ風のエフェクトはおまけである。あとで加工できるし・・。なんとかしなきゃ。

SDKで動的にカメラのプレビューサイズに設定可能な値一覧を取得できないか調べると、
Camera.Parameters.getSupportedPreviewSizes()って素敵なAPIがあるじゃないか!
でもこれ、API Level5からなんだな。XperiaはAndroidOS1.6=API Level4だからこのメソッドは使えない。

なにか良い方法はないものか、と考えた。
んでカメラプレビュー用のSurfaceViewのSurfaceHolder.CallbackのsurfaceChanged()で

// Camera  mCamera
Camera.Parameters cp = mCamera.getParameters();
mCamera.setParameters(cp);
String[] sizes = {
		"176x144",
		"240x160",
		"320x240",
		"480x320",
		"640x480",
		"800x480",
		"854x480",
};
for (String size : sizes) {
	String[] s = size.split("x", 2);
	cp = mCamera.getParameters();
	cp.setPreviewSize(Integer.parseInt(s[0]), Integer.parseInt(s[1]));
	mCamera.setParameters(cp);
	cp = mCamera.getParameters();
	Camera.Size sz = cp.getPreviewSize();
	Log.v("", size + " is " + size.equals(sz.width + "x" + sz.height));  // OKならtrue ダメならfalse
}

こんなふうにしたらプレビューに設定してもよい値が取得できそうだ。
サイズのリストはここにあった。これはG1用のソースかな。。たいていQualcomm製のチップだからいけるかな。

OS2.0以降と以前で処理を切り分けて値を取得する何かを仕込む作業をしないといけない・・。
OS2.0以降でもアプリ開発のターゲットがOS1.5からだったとしたら、どっちみち
Camera.Parameters.getSupportedPreviewSizes()
を使って設定可能の値リストを取得することができない。
だからリフレクションしてメソッドを掘り出さなければいけない。
そこのところの詳しいやり方は「羅針盤」や「PICTRHYTHM」などで有名なテックファームさんのブログ記事
NexusOneでAPIDemos/CameraPreviewが落ちる件」で取り上げられていた。この記事をありがたく参考にしてToyCamをアップデートしたい。トホホ。

Related posts:

  1. HT-03Aでプレビューの映像データをビットマップデータに変換して保存する
  2. HT-03Aでプレビューの映像データをビットマップデータに変換するところ補足
  3. デジタルシグナルプロセッシングとかマトリックスとかエンディアンとか

関連記事はYARPP関連記事プラグインによって表示されています。