2017-03-20 2 views
1

비디오 녹화 중에 수동 초점이있는 나 자신을위한 안드로이드 카메라 응용 프로그램 (관심있는 사람들이 있다면 그것을 공유 할 수 있습니다)을 개발하고 싶습니다.수동 초점 안드로이드 카메라 2 API를 사용

Google 샘플 Camera2 app에 SeekBar를 추가했지만 수동 포커스를 구현하는 방법을 찾을 수 없습니다.

나는 Manual focus in camera2, android을 찾았지만 내 LG G4에서는 작동하지 않습니다. 재고 카메라 앱은 비디오 모드에서 수동 초점을 허용하지 않으므로 거의 완벽합니다.

누구나 아이디어가 있습니까?

편집 : 여기에서 SeekBar 리스너의 코드입니다 :

당신은 당신이 실제로에서 실행중인 장치가 카메라 2에서 수동 제어를 지원하는지 확인해야
@Override 
public void onStopTrackingTouch(SeekBar seekBar) {} 

@Override 
public void onStartTrackingTouch(SeekBar seekBar) { 
    mPreviewBuilder.set(CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AF_MODE_OFF); 
} 

@Override 
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
    float minimumLens = characteristics.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE); 
    float num = (((float)progress) * minimumLens/100); 
    mPreviewBuilder.set(CaptureRequest.LENS_FOCUS_DISTANCE, num); 
} 

답변

3

.

키는 카메라 장치의 available capabilitiesMANUAL_SENSOR인지 여부입니다. 그렇다면 autofocus mode을 OFF로 설정 한 다음 lens focus distance을 원하는 값으로 설정하여 렌즈를 제어 할 수 있습니다. MANUAL_SENSOR가 표시되지 않으면 장치가 수동 포커스 제어를 지원하지 않을 가능성이 높습니다 (일부 제조업체는 기본 카메라 앱에 개인 인터페이스를 사용하여 수동 포커스 제어를 구현합니다).

미리보기를 제어하는 ​​데 사용하는 반복 요청에 모두 포함되어야합니다.

+0

는 APK (HTTPS 있습니다를 : //play.google.com/store/apps/details?id=com.sdgsystems.camera2probe)를 사용하여 기기가 Camera2 API를 지원하고 LG G4가 완벽하게 지원되고 MANUAL_SENSOR가 표시되는지 확인합니다. 오토 포커스 모드를 OFF로 설정하려고했지만 SeekBar 값으로 렌즈 초점 거리를 설정할 때 아무 것도하지 않습니다. 내가 가지고있는 코드를 추가하기 위해 메인 포스트를 편집했다. – Rallph

+1

미리보기 빌더 값을 업데이트 한 후 어디에서 mSession.setRepeatingRequest (mPreviewBuilder.build())를 호출합니까? –

+0

나는 실제로 그것을 부르지 않지만'onProgressChanged()'를 시도했을 때 작동한다. 고맙다! – Rallph

0

에디 Talvala는 그의 대답에 제대로 모든 것을 설명하지만 여전히 복잡 느끼는 경우에, 여기에서 무한대까지 초점 (값 0F이있는) 설정하는 코드입니다 :

CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); 
int[] capabilities = characteristics 
    .get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES); 

boolean isManualFocusSupported = IntStream.of(capabilities) 
    .anyMatch(x -> x == CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR); 

if (isManualFocusSupported) { 
    previewBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_OFF); 
    previewBuilder.set(CaptureRequest.LENS_FOCUS_DISTANCE, 0f); 
} 
관련 문제