昨年末にx86(ATOM)の載った端末でのテスト用にと思って買ったASUS MeMO PadME7(ME176C)。バイナリトランスコードして動いているにも関わらずARM用のバイナリでもそこそこ動いて良いんだけど、さっき変なところを見つけてしまいました。
UsbWebCameraアプリで画面のタッチによる移動・拡大縮小・回転を実装しているのですが、手持ちの端末の中ではMeMO Pad7だけ挙動不審なのです。逮捕しちゃうぞぉ(笑)
百聞は一見に如かず、画面をキャプチャしたので見て下さい。
左端が正常な画面。わかりやすいように縦長にしているので上下が余っていますが、グレーの枠がTextureViewの外枠です。
真ん中は左下に平行移動した状態、そして極め付きは右端。回転させたところです。グレーのTextureViewの外枠よりも外側にまで描画されちゃってます
こんなんありぃ〜ガ━━(;゚Д゚)━━ン!!
このアプリではUVCカメラからの映像のアスペクト比に応じて表示するTextureViewの大きさを動的に設定しています。今回の実装では、ユーザーの操作に応じてテクスチャ変換行列を計算してTextureViewへ適用しています(TextureView#setTransformを使用)。 拡大したり平行移動したりして映像がTextureViewの外にはみ出すようにすると、通常であればTextureViewの大きさにクリップされて表示されるはずなのですが、なんとMeMO Pad7(ME176C)だけはTextureViewの外にまで描画されてしまうのです。まるでちゃんと設定していないSurfaceViewみたいです(-_-;)
実際の描画自体はTextureViewへおまかせなのでTextureViewを使っている限りユーザーランドで動いているアプリからでは直せません、たぶん。きっとグラフィックスドライバのバグというか手抜きですね。
(●`ε´●)
でも、ASUSのエンジニアのせいなのかインテルのエンジニアのせいなのか・・・ATOM載せたAndroid端末だとみんなこんな事になるんかなぁ?(゜レ゜)と言うか今までATOM載せた端末で画像を回転させようとした人って居なかったんかな?中の人〜なんとかして〜m(_ _)m
今更SurfaceViewに置き換えるのは面倒だし・・・見なかった事にするしかないかなぁ(^_^;)
追記:はみ出さない機種とはみ出してしまう機種があるってことは、TextureView内部でViewportの設定がちゃんとされてない機種があるってことかなぁ?てことはAndroidのバージョンに依存するのかも。・・・グルグル先生のせい?
ちなみに、手持ちの他の機種・・・Nexus5/9とかGALAXY系ではちゃんとTextureViewの大きさにクリップしてくれました。普通すぎて面白く無いのでキャプチャはしてないけど。
追記:GALAXY Note2(GT-N7100, Android4.4.2)とNexus7(2012,Android4.4.4)も同じくはみ出してしまいました。ATOMは関係なかったですね。他にも有るのかもm(_ _)m
オチがないから「百聞は一見に如かず」の続きでも載せとこう(^o^)/
「百聞は一見に如かず、百見は一考に如かず、百考は一行に如かず、百行は一果に如かず」、なんだって。
へぇ〜(*_*) だから何やねんとか言っちゃダメ(^_^;)
ちゃんちゃん♪