1

아래의 코드 단편은 고정 초점 길이의 미리보기에 대한 CaptureRequest를 만들지 못했습니다. 미리보기에 표시된 이미지는 TotalCaptureRequest의 보고서에 다르게 표시되어 있더라도 항상 무한대로 초점을 맞추고 있습니다. [코드] CamId : 0 LensFace : BACK HwdSupportLevel : FULL SensorOrientation고정 초점 길이의 미리보기를 만드는 데 필요한 최소 CaptureRequest는 무엇입니까

mPreviewBuilder = mCameraDevice.createCaptureRequest(SCameraDevice.TEMPLATE_PREVIEW); 
mPreviewBuilder.set(SCaptureRequest.LENS_FOCUS_DISTANCE, 9.5f); 
mPreviewBuilder.set(SCaptureRequest.CONTROL_AF_MODE, SCaptureRequest.CONTROL_AF_MODE_OFF); 

내 장치가 다시 카메라에 대해 다음 속성을보고하는 삼성 갤럭시 S7입니다 : 여기

는 코드입니다 : 90 LensCalibration는 : CALIBRATED LensMinFocusDist : 10.0 [/ 코드]

여기

onCaptureComplete()

callback: AF_STATE: 0 Lens Focus Distance: 9.555555 LENS_STATE: 0 HAS FOCUS RANGE: true Focus Range Min: 9.762765, Max: 9.348346 
동안 캡처 내 로그입니다 나는 일반 된 안드로이드 카메라 2 API를뿐만 아니라 삼성 SDK와 함께이 시도했다 6,

은 (여기 : http://developer.samsung.com/galaxy/camera)

삼성의 자신의 카메라 응용 프로그램뿐만 아니라 카메라 FV-5 지원 같은 문제없이이 기능을 제공합니다.

어떻게 작동합니까?

상황에 대한 몇 가지 더 많은 코드를 추가

/** 
* Start the camera preview. 
*/ 
private void startPreview() { 
    if (null == mCameraDevice || !mTextureView.isAvailable() || null == mPreviewSize) { 
     return; 
    } 
    try { 
     closePreviewSession(); 
     SurfaceTexture texture = mTextureView.getSurfaceTexture(); 
     assert texture != null; 
     texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight()); 
     mPreviewBuilder = mCameraDevice.createCaptureRequest(SCameraDevice.TEMPLATE_PREVIEW); 
     //mPreviewBuilder.set(SCaptureRequest.CONTROL_CAPTURE_INTENT, SCaptureRequest.CONTROL_CAPTURE_INTENT_MANUAL); 
     //mPreviewBuilder.set(SCaptureRequest.CONTROL_MODE, SCaptureRequest.CONTROL_MODE_OFF); 
     mPreviewBuilder.set(SCaptureRequest.CONTROL_AF_MODE, SCaptureRequest.CONTROL_AF_MODE_OFF); 
     mPreviewBuilder.set(SCaptureRequest.CONTROL_AE_MODE, SCaptureRequest.CONTROL_AE_MODE_ON); 
     mPreviewBuilder.set(SCaptureRequest.LENS_FOCUS_DISTANCE, 9.5f); 

     Surface previewSurface = new Surface(texture); 
     mPreviewBuilder.addTarget(previewSurface); 

     mCameraDevice.createCaptureSession(Arrays.asList(previewSurface), new SCameraCaptureSession.StateCallback() { 

      @Override 
      public void onConfigured(SCameraCaptureSession cameraCaptureSession) { 
       mPreviewSession = cameraCaptureSession; 
       updatePreview(); 
      } 

      @Override 
      public void onConfigureFailed(SCameraCaptureSession cameraCaptureSession) { 
       Toast.makeText(getApplicationContext(),"Failed", Toast.LENGTH_SHORT).show(); 
      } 
     }, mBackgroundHandler); 


    } catch (CameraAccessException e) { 
     e.printStackTrace(); 
    } 
} 


/** 
* Update the camera preview. {@link #startPreview()} needs to be called in advance. 
*/ 
private void updatePreview() { 
    if (null == mCameraDevice) { 
     return; 
    } 
    try { 
     setUpCaptureRequestBuilder(mPreviewBuilder); 
     HandlerThread thread = new HandlerThread("CameraPreview"); 
     thread.start(); 
     mPreviewSession.setRepeatingRequest(mPreviewBuilder.build(), mCaptureCallBack, mBackgroundHandler); 
     Log.i(TAG, "New Session values, control mode " + mPreviewBuilder.get(SCaptureRequest.CONTROL_MODE) + 
       ", AF mode: " + mPreviewBuilder.get(SCaptureRequest.CONTROL_AF_MODE) + 
       ", Focus value; " + +mPreviewBuilder.get(SCaptureRequest.LENS_FOCUS_DISTANCE)); 
    } catch (CameraAccessException e) { 
     e.printStackTrace(); 
    } 
} 

답변

0

당신이 당신의 mPreviewBuilder에면을 추가 했습니까?

Surface surface = new Surface(texture); 
//Add surfaces 
mPreviewBuilder.addTarget(surface); 
surfaces.add(surface); 

둘째, 당신의 AF_MODE 해제하기 전에 CaptureSesion를 통해 setRepeatingRequest으로 sesion를 업데이트 마지막으로 LENS_FOCUS_DISTANCE을 설정하고 설정합니다. 그것으로 작동해야합니다.

mCaptureSession.setRepeatingRequest(mPreviewBuilder.build(), 
       callback, mHandler); 

확인은 로그인하여 CaptureRequest의 값은 모두 잘 있는지 확인하고 당신은 당신의 AF 이상의 무언가 중복되지 않습니다

Log.i(TAG, "New Session values, control mode " + mPreviewRequestBuilder.get(CaptureRequest.CONTROL_MODE) + 
      ", AF mode: " + mPreviewRequestBuilder.get(CaptureRequest.CONTROL_AF_MODE) + 
      ", Focus value; " + +mPreviewRequestBuilder.get(CaptureRequest.LENS_FOCUS_DISTANCE)); 
+0

@Durdins 여전히 작동하지 않습니다. 다음은 로그의 값입니다. 새 세션 값, 제어 모드 1, AF 모드 : 0, 초점 값; 9.5 – unshul

+0

은 captureRequest에 올바른 값이 있음을 의미합니다. 미리보기를 업데이트하고 있습니까? 새 값을 설정 한 후 CaptureSession에 대해 새 setRepeatingRequest를 수행하고 새 요청 작성자 값으로 미리보기를 업데이트해야합니다. –

+0

@Durdins : 제안과 요청을 설정하고 있습니다 (원본 게시물을 다음과 같이 업데이트했습니다. 더 많은 컨텍스트) 그러나 포커스 값은 여전히 ​​미리보기에 영향을 미치지 않는 것 같습니다. – unshul