• スポンサードリンク

libusb+libuvc+AndroidN(Android7)で映像が出たー\(^o^)/

AndroidN以降で内部のパーミッション関係が変わってlibusbが情報を取得するのに必要な結構な数のい関数の呼び出しが失敗するようになってしまいました。

オレオレライブラリは動くのでlibusb/libuvcを変えりゃなんとかなるのは知っていたものの、忙しいのと面倒臭いと、オレオレライブラリは特に問題なく動くので放置していました。

だってぇ、スパゲッティコードどころかもうはやもつれた毛糸玉と化してる気がするlibusbとlibuvcをJava⇔JNIラッパーライブラリx2⇔libuvc⇔libusb⇔libusbのAndroid用バックエンドの6層を縦に突き抜けて修正せんとあかんねんで。
libusbとlibuvcはそもそも自分が作ったんじゃないし他人のプログラムは良く判らん(●`ε´●)

でも仕事で作っているプログラムが少し区切りがついたので、重いお尻を上げてうだうだとすること半日…動いたでぇ\(^o^)/ デバッグ用のコードが山盛りなんをどないかせんと公開できんけど。
もうちょっとまったってぇな^^


2016/11/15追記:
解像度を変えたりしてると映像が出なくなる(´・ω・`)
どっかまだ判らん所で引っかかるみたいや(T_T)


2016/11/15追記:
あっかーん、解像度の変更が動いたり動かんかったりする。というかだいたいダメでたまに動く(T_T)
解像度変更時に

  1. ストリーミングを止めて
  2. インターフェースを開放して
  3. ネゴシエーションし直して
  4. インターフェースを要求(claim)して
  5. ストリーミングを再開


ちゅう順に処理をするんやけど、5.のclaimを呼んだ時にBUSYが返ってくる(´・ω・`)
BUSYが返ってきた時に少しスリープさせてからリトライしてもあかん。インターフェースの開放がうまくいっとらん感じ。エラーは返ってこんのんやけどカーネルドライバーもアタッチされとらんみたいや。
しかも普通にアプリを止めただけやとだめで、完全にアプリを終了させる(履歴のところからも消す)と動く。


2016/11/20追記:
一昨日ぐらいからlibusb+libuvcの部分はちゃんと動くようになった。
でもサンプルアプリの幾つかがまだちゃんと動かへん。ついでやからと動的パーミッションの処理やらバラバラになってた古いOpenGL|ES関係のクラス止めてlibcommonを参照するようにしたりとしとる。


2016/11/21追記:
リポジトリを更新した。サンプルも中身が最終的にしとることは同じやけど使っとるクラスとか方法は大幅に変わっとる。ちなみにAndroid6以降の動的パーミッションとかにも対応しとる。
古いOpenGL|ES関係のクラスは抹殺して新しいのを使うようにしたから互換性とパフォーマンスが良くなっとるはず。
まぁMJPEG展開部分とか描画部分自体は元のままやからGooglePlayで公開してるアプリほどの描画速度は出んけど(汗)

« »

  • スポンサードリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*