• スポンサードリンク

Nexus9のCamera2 APIの不具合

Android Camera

でもNexus9限定ではないかもしれません。ペロペロキャンディ共通の不具合かも・・・(-_-;)

Nexus9のCamera2 APIを使ってSurfaceTexture経由でカメラ映像を取得してみました。

で有効なピクセルを取得すると、(0, 0 – 3280, 2460)と返って来ます。カメラのセンサー自体は有効画素3280×2460ってことらしいです。また、

として使用可能な解像度取得すると次の13種類が返って来ました。ちなみに、MediaCodec.classの代わりにSurfaceTexture.classとしても同じ結果でした。_device-2015-04-12-235058

・3280×2460
・1640×1230
・3264×2448
・2592×1944
・2048×1536
・1920×1440
・1920×1080
・1280×720
・720×480
・640×480
・352×288
・320×240
・176×144

ここまではまぁいいんですよ。問題はここから…先ほど取得できた13の解像度のうち、1640×1230, 640×480, 320×240の3つの解像度を指定してCamera2 API経由で動画映像を取得すると何故か右図のように映像の左端にピンクの帯が入ります。

一方同じNexus9上で従来のCamera APIの、

を使って対応解像度を取得すると、次の9種類が返って来ました。

  • 1640×1230
  • 1920×1440
  • 1920×1080
  • 1280×720
  • 720×480
  • 640×480
  • 352×288
  • 320×240
  • 176×144

こちらも同じようにSurfaceTexture経由でプレビュー映像を取得すると・・・全部OKでした。カメラの操作以外のコード(EGL周りとかOpenGL|ES描画とか)は全く一緒です。共通でアクセスできるようにカメラ操作用のインターフェースを作ってそれ経由で動かしています。
Camera2 APIを使うとピンクの帯が入ってしまった3つの解像度でも従来のCamera APIを使うと問題なく正常に映像を取得出来ました。良かったぁ、いや良くはありませんがハードウエアの不具合ではなさそうで良かったぁ\(^o^)/

う〜ん、見た目からするとテクスチャの位置がずれているってのが一番可能性が高いんだけと、同じプログラムで同じようにテクスチャの描画しているのに、Camera APIならOKでCamera2 APIだとだめになる解像度があるって理由に心当たりがありません。

SDKにもCamera2 APIのサンプルプロジェクトCamera2Basicがあります。Camera2Basicで強制的に1640×1230を選択するようにしてみました。あれ?Camera2Basicだと1640×1230でも正常に表示できる…何でやねん(●`ε´●)
同じ位置に端末を置いて同じ映像をそれぞれのアプリに写してキャプチャしたのを見比べてみると・・・やっぱりテクスチャの位置が右へずれてその分左端にゴミがピンク色に見えてしまっているようです。テクスチャ変換行列がおかしいんかな?と思ってSurfaceTexture#getTransformMatrixで取得したテスクチャ変換行列を見比べてみるとどちらも同じでした。何故ずれるねんな。

色々試した結果、結論としては自分のプログラムの描画部分は全く関係ありませんでした。\(^o^)/ てなことを書くってことは解決したって事なんですが、ページ区切りを入れてしまいます(笑)
先を読む前にどこに問題が有るかわかった人〜? は〜い(^o^)/

« »

  • スポンサードリンク

%d人のブロガーが「いいね」をつけました。