Nexus5x,6P のカメラ reverse landscapに対応

Nexus5x及び6Pで、QRコード読み取り,3D 行先コンパス ARでカメラ画像が、180度回転表示するバグを修正しました。

Nexus 5Xのイメージセンサーは設計上の部品配置の都合で、他のAndroid端末と異なり逆(reverse landscape)に取り付けられているとのことで、rotationが未設定のアプリはpreviewが反転するようになった。
http://qiita.com/tomoima525/items/f59d345ea40c36244f9b

当アプリも180度回転表示してしまいました。

元々は、
camera.setDisplayOrientation(90)
で90度回転させて縦表示するようにしていたのですが、
Nexus5xだと、
camera.setDisplayOrientation(90 + 180)
にしないとだめで、

camera2 APIを利用すれば全自動ですが、
最終、以下のコードを追加して対応致しました。

    int numCameras = Camera.getNumberOfCameras();
    int cameraID;
    int back_camera_flg = 0;

    int index = 0;
    Camera.CameraInfo cameraInfo;
    int result = 0;

    while (index < numCameras) {
      cameraInfo = new Camera.CameraInfo();
      Camera.getCameraInfo(index, cameraInfo);
      if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT && back_camera_flg == 0){
        result = (cameraInfo.orientation) % 360;
        result = (360 - result) % 360;
        Log.w(TAG,"----- CAMERA INFO FRONT " + result );
      }
      if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
        back_camera_flg = 1;
        result = (cameraInfo.orientation + 360) % 360;
        Log.w(TAG,"----- CAMERA INFO BACK " + result );
        break;
      }
      index++;
    }
     //camera.setDisplayOrientation(90);
    camera.setDisplayOrientation(result);
    //
    camera.setParameters(parameters);
  }

コメントを残す