2017-04-10 143 views
1

Camera2 APIを使用してカスタムカメラを構築しています。 これまでのところ、歪んでいるプレビューを除いて、カメラは非常にうまく動作します。カメラを7回連続して開けてみましょう。すべての試みが成功し、カメラのプレビューが歪んで8回目です。それは高さとして幅を使用し、その逆も同様です。Android Camera2 APIのプレビューが歪むことがある

私はカメラコード2のGoogleサンプル実装に基づき、hereが見つかりました。 興味深いのは、Googleサンプルの実装でさえ、この歪んだプレビューが時々あるということです。私はAutoFitTextureViewを修正しようとしましたが、何も成功しませんでした。私は現在、Googleが提供するAutoFitTextureView.javaを再度使用しています。

これと同様の投稿can be found here。 しかし、提案された修正では問題は解決されませんでした。

mTextureView.setAspectRatio(mPreviewSize.getHeight(), mPreviewSize.getWidth()); 

へ:

mTextureView.setAspectRatio(mPreviewSize.getWidth(), mPreviewSize.getHeight()); 

別の奇妙なことは、歪んプレビューが発生し、いつでもあなただけの家を押すことで、私はsetUpCameraOutputsメソッドで次のように変更することで問題を再現することができます

ボタンを押すと、アプリケーションはonPause()に入り、アプリケーションを再び開いてonResume()が呼び出されます。プレビューは毎回完璧です。

ここにいる誰もこの問題を経験しており、修正を見つけましたか?事前

+1

は何か解決策を見つけましたか?私もこの問題に直面しています。 –

+0

私も同じ問題に直面しています – FaisalAhmed

答えて

0

おかげでGoogleのCamera2Basicサンプルwas finally fixed。元のコードは、小さな< >間違いでした。 2年間は間違っていた。

0

私はSony Xperia Z3 Tablet Compactで同じ問題に直面しています。

アレックスが指摘したプルリクエストは、私にとってはうまくいかないようです。ビューの領域よりもカメラのプレビューが大きくなります(プレビューは切り取られます)。

私は特に問題を追跡できませんでしたが、回避策を見つけることができました。カメラを開いている間にmTextureViewのサイズが変化している間に歪みが発生しているようです。カメラのオープニング手順を遅らせることで問題が解決されます。

修正openCamera方法:

/** 
* Opens the camera specified by {@link StepFragmentCamera#mCameraId}. 
*/ 
private void openCamera(int width, int height) { 
    startBackgroundThread(); 

    if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA) 
      != PackageManager.PERMISSION_GRANTED) { 
     requestCameraPermission(); 
     return; 
    } 
    setUpCameraOutputs(width, height); 
    configureTransform(width, height); 

    /* 
    * Delay the opening of the camera until (hopefully) layout has been fully settled. 
    * Otherwise there is a chance the preview will be distorted (tested on Sony Xperia Z3 Tablet Compact). 
    */ 
    mTextureView.post(new Runnable() { 
     @Override 
     public void run() { 
      /* 
      * Carry out the camera opening in a background thread so it does not cause lag 
      * to any potential running animation. 
      */ 
      mBackgroundHandler.post(new Runnable() { 
       @Override 
       public void run() { 
        Activity activity = getActivity(); 
        CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE); 
        try { 
         if (!mCameraOpenCloseLock.tryAcquire(2500, TimeUnit.MILLISECONDS)) { 
          throw new RuntimeException("Time out waiting to lock camera opening."); 
         } 
         manager.openCamera(mCameraId, mStateCallback, mBackgroundHandler); 
        } catch (CameraAccessException e) { 
         e.printStackTrace(); 
        } catch (InterruptedException e) { 
         throw new RuntimeException("Interrupted while trying to lock camera opening.", e); 
        } 
       } 
      }); 
     } 
    }); 
} 
関連する問題