software_development」カテゴリーアーカイブ

Android NDKとNexus9を使って64bit ARMのアセンブラを試してみた

Android NDKとNexus9を使って64bit ARMのバイナリを試してみた話の続き。

一昨日書いたソースコードで、インラインアセンブラで記述した2つの整数を加算する部分をアセンブラで書き直してみた。

アセンブラ部分のソースコードadd.s (c:\work\jni\add.s)はこのようになった。

	.global addvalues
	.text
	.align 4
addvalues:
	ADD x0,x0,x1;
	ret;

続きを読む

Android 5.0 Lollipopで32bit ARMバイナリが動かない

Android 5.0 Lollipopで32bit ARMバイナリが動かない。

昨日、NDKで64bit ARMのバイナリを作って動かしていて、比較で32bit ARMのバイナリをNexus9(Android 5.0)で動かそうとして気がついた。

error: only position independent executables (PIE) are supported.
というエラーが出るという症状だ。

調べてみると、StackOverflowというサイトに原因と対処法が載っていた。
Executable file cannot run on Android L

Android 5.0(Lollipop)からセキュリティ強化のため実行できるバイナリの形式が制限されているらしい。
PIEという形式でないと駄目だそうだ。
続きを読む

Android NDKとNexus9を使って64bit ARMのバイナリを試してみた

Android NDKとNexus9を使って64bit ARMのバイナリを試してみた。

ちなみに去年(2014年)、iOSで64bit ARMのバイナリをコンパイルして動かすのを試している。
iOSのJailbreak環境で64bit ARM(AARCH64)のバイナリを試してみた
iOSのJailbreak環境で64bit ARM(AARCH64)のインラインアセンブラを試す
今回は、Android NDKで64bit ARMのバイナリをコンパイルするのを試してみる。
続きを読む

Oculus RiftがPCに繋がっているかどうかの判定

OvrvisionのデモソフトなどがOculus Riftが繋がってない状態で起動するとクラッシュするようだ。
Oculus Riftが繋がっているかどうかちゃんと判定するのって難しくないだろうにと思う。

ということで、Oculus RiftがPCに繋がっているかどうかの判定を実際に自前でソフトを書いてみる。

Oclulus RiftはUSBのHIDデバイスとして認識されているので、特定のVID,PIDのデバイスに対してOpenしてみて、失敗したらOculus Riftが繋がっていないと判定すればいいだけなので簡単だ。
Oculus Rift DK1のVID 0x2833のPID 0x0001で、DK2のPIDは0x0021だった。
USBのHIDデバイスへのアクセスは、昔自分で書いたtiny_hid_dllというライブラリをそのまま使ったら簡単にできた。
続きを読む

3D動画キャプチャーのためのステレオカメラ

Ovrvision以外にも、webカメラタイプのものがいくつか出ている。

以前Minoru Stereo 3D webcamというのを購入していた。

2011年ごろに書いたLYNX-3Dの話の中にちょっと映っている。2011年より前に買っていたようだ。
どこかに仕舞ってあるはずなのだけど、見つからない。
USBでPCに接続するとカメラデバイスが2つ認識される。
ドライバーをインストールすると、仮想ドライバーのような仕組みでサイドバイサイドで撮影される1つのカメラデバイスとして認識されるようになるようだ。
OpenCVでこのステレオカメラを簡易操作するソースコードが作成されて公開されていたりする。
続きを読む

Ovrvision用のキャプチャーソフトを書いてみている (その3)

昨日書いたソフトのキャプチャー部分をOvrvision SDKを使って書き直してみた。

Ovrvision SDKのexampleソースコードをビルドして動かしてみたり、ソースコードの中身を眺めたりしている。wizapplyというライブラリがアプリ作りに使われているけど、OculusやOvrvisionには関係なさそうだ。SDKの使い方が逆に分かりにくい感じだった。
なんとかSDKのリファレンスと一緒に眺めて、なんとなくはSDKの使い方が理解できたようだ。
続きを読む

Ovrvision用のキャプチャーソフトを書いてみている (その2)

Ovrvision用のキャプチャーソフトを書いてみている。

OpenCVという画像処理用ライブラリを使って、2つのカメラから画像を取り込んでOculus Rift DK1用に2枚の画像をそのまま位置だけ調節して出力してみた。
解像度が粗くて自分の手を映すとドット絵のように輪郭がカクカクになってしまった。(デジカメでOculus Rift DK1の中をのぞき込んで撮影してみた。)
Rimg0004
続きを読む

Ovrvision用のキャプチャーソフトを書いてみている

Ovrvision用のキャプチャーソフトを書いてみている。

USB接続の2つのカメラデバイスとしてWindowsに認識されているので、2つのカメラからの同時キャプチャーをすればよい。

OpenCVでする場合、

  CvCapture *capture1,*capture2;
  capture1 = cvCaptureFromCAM(0); // Right camera
  capture2 = cvCaptureFromCAM(1); // Left camera
  frame1      = cvQueryFrame(capture1);
  frame2      = cvQueryFrame(capture2);

などとすればよい。
しかし、ノートPCで既に内蔵のwebカメラがある場合にカメラが3つとなり、その場合にちょっと困る。
内蔵カメラデバイスをデバイスマネージャーから無効に設定するとよいかと思ったら、動くこともあれば動かないこともあり、どうも安定しない。
続きを読む