2017-06-13 97 views
3

私のアプリケーションでCamera2 APIを使用する必要があります。 (Api21 +) 次のサンプルを見つけました: https://github.com/googlesamples/android-Camera2BasicAndroid Camera2のフォーカス状態が貼り付けられました

私はそれをダウンロードして携帯電話から始めました。 「Picture」ボタンを押すと、takePhotoメソッドが呼び出されます。

private void takePicture() { 
    lockFocus(); 
} 

ステートマシンです。時にはこの機械がSTATE_WAITING_LOCKに貼り付けられました。 私のデバイスはフォーカスを待っていますが、何も起こりません! (はい、私のデバイスは自動焦点をサポートしています)

case STATE_WAITING_LOCK: { 
        Integer afState = result.get(CaptureResult.CONTROL_AF_STATE); 
        if (afState == null) { 
         captureStillPicture(); 
        } else if (CaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED == afState || 
          CaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED == afState) { 
         // CONTROL_AE_STATE can be null on some devices 
         Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE); 
         if (aeState == null || 
           aeState == CaptureResult.CONTROL_AE_STATE_CONVERGED) { 
          mState = STATE_PICTURE_TAKEN; 
          captureStillPicture(); 
         } else { 
          runPrecaptureSequence(); 
         } 
        } 
        break; 
       } 

この問題の良い解決方法を教えてください。 そして、このプログラムは、時々ここに墜落:

private void unlockFocus() { 
      try { 
       // Reset the auto-focus trigger 
       mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, 
         CameraMetadata.CONTROL_AF_TRIGGER_CANCEL); 
       setAutoFlash(mPreviewRequestBuilder); 
/*HERE*/ mCaptureSession.capture(mPreviewRequestBuilder.build(), mCaptureCallback, 
         mBackgroundHandler); 
       // After this, the camera will go back to the normal state of preview. 
       mState = STATE_PREVIEW; 
       mCaptureSession.setRepeatingRequest(mPreviewRequest, mCaptureCallback, 
         mBackgroundHandler); 
      } catch (CameraAccessException e) { 
       e.printStackTrace(); 
      } 
     } 

は、なぜ私のデバイスを集中することはできませんか?

+0

私は同じ問題を抱えています。私はafStateの値をチェックしました、それは常にCONTROL_AF_STATE_PASSIVE_FOCUSEDに残っていますが、CONTROL_AF_STATE_NOT_FOCUSED_LOCKEDまたはCONTROL_AF_STATE_FOCUSED_LOCKEDに到達することはできません –

+0

@ketom解決策は見つかりましたか? –

答えて

0

プログラムがCaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKEDに時々スタックしているようですが、ドキュメンテーション「AFアルゴリズムはフォーカスできませんでした。レンズは動いていません」 link

AF_TRIGGERをキャンセルしてもう一度開始してください。このような何か:

if (afState == CaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED) { 
      getRidOfNotFocusedLock(); 
} 

そして:

private void getRidOfNotFocusedLock(){ 
     try { 
      mPreviewRequestBuilder.set(
        CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest.CONTROL_AF_TRIGGER_CANCEL); 
      mCaptureSession.capture(
        captureRequestBuilder.build(), captureSessionCaptureCallback, backgroundHandler); 
      mPreviewRequestBuilder.set(
        CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest.CONTROL_AF_TRIGGER_START); 

     } catch (CameraAccessException e) { 
      e.printStackTrace(); 
     } 
    } 
関連する問題