onAutoFocus не вызывается в андроид камере - PullRequest
0 голосов
/ 11 сентября 2018

Я установил режим фокусировки как FOCUS_MODE_AUTO.

camParameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
cameraInstance.setParameters(camParameters);

Затем я начал предварительный просмотр.

cameraInstance.startPreview();

После этого я вызываю метод автофокуса.

List<String> focusModes = camParameters.getSupportedFocusModes();
                if(focusModes != null && focusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)) {
                    Log.d(TAG, "Phone supports autofocus!");
                    cameraInstance.autoFocus(autoFocusCallback);
                }

Вот мой обратный вызов с автофокусом.

private static android.hardware.Camera.AutoFocusCallback autoFocusCallback = new android.hardware.Camera.AutoFocusCallback() {

    @Override
    public void onAutoFocus (boolean success,
                             Camera camera) {
        if(success) {
            Log.d(TAG, "Sharp");
            camera.cancelAutoFocus();
        } else {
            Log.d(TAG, "Not Sharp");
            camera.autoFocus(autoFocusCallback);
        }
    }
};

Я обнаружил, что метод onAutoFocus не вызывается после просмотра предварительного просмотра камеры и заметил (в logcat), что постоянно появляется следующая ошибка.

01-01 08: 29: 07.135 765-10897 /? E / mm-камера: 5052: af_port_handle_set_focus_manual_pos_evt: не в режиме CAM_FOCUS_MODE_OFF (вручную), игнорировать настройки

01-01 08: 29: 07.316 765-10891 /? E / mm-camera: 739: af_process_update_fv_history: SW Статистика отсутствует! Начало ожидания

1 Ответ

0 голосов
/ 19 мая 2019

Вы можете попробовать, конечно, после запуска предварительного просмотра.Просто вызовите автофокус внутри SurfaceCreated , и он выполнит работу , когда FOCUS изменит состояние

Camera      mCamera;
SurfaceView mPreview;
public void surfaceCreated(SurfaceHolder arg0)
     {
     Camera.Parameters     params=mCamera.getParameters();
     params.setFocusMode  (params.FOCUS_MODE_CONTINUOUS_PICTURE);
     mCamera.setParameters(params);
     try
       {
       mCamera.setPreviewDisplay(mPreview.getHolder());
       mCamera.setPreviewCallback(this);
       mCamera.startPreview();
       mCamera.autoFocus(new AutoFocusCallback()
              {
              public void onAutoFocus(boolean focussed,Camera camera)
                   {
                   if(focussed)
                     Log.d(TAG, "Sharp");
                     else
                     Log.d(TAG, "Not Sharp");
                   }
              });
       }catch(Exception e){}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...