Автофокусировка Android при непрерывном режиме автоматической фокусировки не поддерживается
У меня есть камера внутри приложения, и я хочу, чтобы она автоматически фокусировалась так же, как это делает камера телефона. Я нашел режимы FOCUS_MODE_CONTINUOUS_VIDEO
и FOCUS_MODE_CONTINUOUS_PICTURE
, но они не поддерживаются некоторыми телефонами Gingerbread от HTC, на которых я тестирую.
Это то, что я делаю, чтобы определить, могу ли я использовать эти режимы:
Camera.Parameters parameters = mCamera.getParameters();
List<String> supportedFocusModes = parameters.getSupportedFocusModes();
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH &&
supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
}
else if (supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
}
else if (supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)) {
// auto focus on request only
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
}
Запустив несколько разных телефонов Gingerbread HTC, я не получаю непрерывные режимы, но я получаю "авто". Это позволяет мне автоматически фокусироваться по требованию (когда я вызываю mCamera.autoFocus(null)
, но камера не будет перефокусироваться, если пользователь перемещает камеру.
Я не могу установить режим фокусировки на что-либо, что камера не поддерживает, если я это сделаю, это будет пустым.
Одно из решений, которое я пробовал, - вызвать mCamera.autoFocus(null)
на таймере. Но это заставляет камеру постоянно фокусироваться, даже если она уже находится в фокусе.
Есть ли способ реализовать непрерывный опыт автоматической фокусировки на этих телефонах? Когда я смотрю на приложение для камеры HTC на этих телефонах, у него есть непрерывная автофокусировка - когда вы перемещаетесь по фокусам камеры и не перефокусируете изображение, когда изображение находится в фокусе.
Ответы
Ответ 1
У нас было требование поддерживать очень широкий спектр телефонов. Поэтому в конечном итоге мое решение заключалось в том, чтобы обрабатывать каждый случай по-разному.
Для сценария телефонов без постоянной поддержки автофокуса я реализовал утилиту для прослушивания акселерометра с помощью SensorManager и запускает mCamera.autoFocus(...) всякий раз, когда пользователь перемещает камеру.
Были также несколько старых планшетов, которые поддерживали фиксированный фокус (кто бы использовал такую вещь!), И в этом случае изображение нужно было сделать немедленно - не на обратном вызове фокуса.
И для большинства современных телефонов фрагмент кода выше был хорош для использования FOCUS_MODE_CONTINUOUS_PICTURE.
Ответ 2
У меня есть аналогичный pb на моем Samsung S4, и я решил его с:
camera.setParameters(parameters);
camera.autoFocus(null);
Это предлагается в документе Google здесь.
Чтобы параметры камеры вступили в силу, ваше приложение должно вызвать setParameters(Camera.Parameters)
.