GalaxyTabのカメラプレビューをKoboTouchで表示する。
2012/12/26 7M4MON
年末にKoboTouchが安く出ていたので買ってみました。
巷では改造やらハッキングやらが流行っていたようなので、なにかしてみたいなぁと。
コボにはカメラが付いていないので、カメラを付けるのはどうだろうと。
と言う訳で、Android(GalaxyTab)のカメラプレビューをkoboで表示するプログラムを作ってみました。
作戦
1.800×600のプレビューを作成し、RGB565のRAWを作成
2.gzipで圧縮してFTPで転送。
3.Telnetでコマンドを叩き、画像を表示。→ zcatで表示。
1.プレビューの作成
KoboTouchはRGB565という形式の画像ファイルを受け付けてくれるようです。
カメラプレビューの作成形式をRGB565にします。
public void
surfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
Camera.Parameters parameters = myCamera.getParameters();
parameters.setPreviewFormat(4); //RGB565
myCamera.setParameters(parameters);
myCamera.startPreview();
}
この辺の画像形式は機種依存らしいです。
Galaxy
TabはRGB565に指定できて正常にストリームは作成されますが、プレビューはYUVらしく、RGB565で指定するとプレビューは表示されません。
2.gzipとFTP
KoboTouchはzcatコマンドを内蔵しているので、gzipで画像を圧縮してから転送します。
実験したところ、gzipで圧縮時間 < 生データでの転送時間 でした。
高速化のため、カメラプレビューはファイル作成せず、Streamで処理します。
InputStreamとOutputStreamの受け渡しは下記のようにしたらうまくいきました。
ByteArrayInputStream bais = new
ByteArrayInputStream(data);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos = (ByteArrayOutputStream) myKoboCam.compressStream(bais);//gzip圧縮関数。OutputStreamクラスを
ByteArrayOutputStreamに型変換する。 static OutputStream compressStream
(InputStream is){
ByteArrayInputStream bais2 = new
ByteArrayInputStream(baos.toByteArray());//.toByteArray()でByteArrayOutputStreamを
ByteArrayInputStreamにする。
myKoboCam.ftpUploadStream((InputStream)bais2);//ftpアップロード関数。ByteArrayInputStream
bais2をInputStreamにキャスト。
また、普通にftpでアップロードすると時間がかかかる(50秒くらい)ので、 ftpClient.setBufferSize(960000); と
してあげれば、劇的短縮(2秒くらい)です。
とても遅い
KoboTouchの"/tmp/"はRAMDISKらしい(/tmp tmpfs rw,relatime,size=16384k 0
0)ので、そこにアップロードします。SDカード上だと遅いし、書き換えによる寿命が心配です。
3.telnetとその他高速化。
telnet(とftp)は org.apache.commons.net を使用しています。
高速化のため、初回接続時に認証処理を行い、その後はコマンドを投げるだけにしています。
command = "zcat /tmp/kobocam.raw.gz | /usr/local/Kobo/pickel showpic\r";
LogCatでそれぞれのプロセスでかかっている時間を測ってみました。すると、プレビュー画面を用意するのに 387ms、gzip圧縮に461ms、
FTPアップロードに746ms、その他に70ms、合計 約1.6sかかっていることが判明しました。
FTPアップロード中に画面を用意すれば高速化できそうです。という訳で、FTPアップロードを別スレッドにしました。
で、冒頭の動画(約1fps)になったわけです。めでたしめでたし。
その他
Wi-Fiかんたん設定モデルを買ったのですが、(PCに変なソフトを入れたくないので)単体でWi-Fiにて設定しようとすると
「Server Error in '/704555' Application」とか出て設定できませんでした。
しょうがないから、USBで接続しようにもドライバは添付されてないので、インターネット経由でKoboSetup.exe(113MB)をダウンロード
して
インストールして設定しようとしたら、更新が必要とかいってまた100MBオーバーのファイルをダウンロードさせられました。
結局、セットアップに1時間近くかかりました。
/\___/\ / / ヽ ::: \ | (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ | ,,ノ(、_, )ヽ、,, | < なんやねん、これ | ,;‐=‐ヽ .:::::| \_______ \ `ニニ´ .:::/ /`ー‐--‐‐―´´\