Проблема
Мой телефон поддерживает все ручные настройки.Протестировано с (https://github.com/pinguo-yuyidong/Camera2), которое позволяет нам настраивать с помощью seekbar.
Я хочу установить фиксированное значение в Lens Focus Distance при предварительном просмотре, пока я не закрою приложение.
После того как я отключил режим автофокусировки и установил значение расстояния фокусировки на объективе со значением. Предварительный просмотр не показывает никакого эффекта, но значение фокусировки 2 изменилось.
Как мне решить эту проблему?
Пример кода (Java)
private CaptureRequest mPreviewRequest;
private void startCameraPreview() throws CameraAccessException {
SurfaceTexture texture = textureview.getSurfaceTexture();
texture.setDefaultBufferSize(imageDimensions.getWidth(), imageDimensions.getHeight());
Surface surface = new Surface(texture);
mPreviewRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
mPreviewRequestBuilder.addTarget(surface);
System.out.println("Focus 1 ====== "+mPreviewRequestBuilder.get(CaptureRequest.LENS_FOCUS_DISTANCE));
cameraDevice.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(@NonNull CameraCaptureSession session) {
if (cameraDevice == null) {
return;
}
cameraSession = session;
try {
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,CaptureRequest.CONTROL_AF_MODE_OFF);
mPreviewRequestBuilder.set(CaptureRequest.LENS_FOCUS_DISTANCE, 7.5f);
mPreviewRequest = mPreviewRequestBuilder.build();
cameraSession.setRepeatingRequest(mPreviewRequest, mCaptureCallback, backgroundHandler);
System.out.println("Focus 2 ====== "+mPreviewRequestBuilder.get(CaptureRequest.LENS_FOCUS_DISTANCE));
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
@Override
public void onConfigureFailed(@NonNull CameraCaptureSession session) {
Toast.makeText(getApplicationContext(),"Failed",Toast.LENGTH_SHORT).show();
}
}, null);
}
private static final int STATE_PREVIEW = 0;
private int mState = STATE_PREVIEW;
private CameraCaptureSession.CaptureCallback mCaptureCallback = new CameraCaptureSession.CaptureCallback() {
private void process(CaptureResult result){
switch(mState){
case STATE_PREVIEW:{
break;
}
}
}
};
Вывод
Фокус 1 ====== 0.0
Фокус 2 ====== 7,5
Я не вижу разницы при изменении значения.