Android camera2 коснитесь, чтобы сфокусироваться

#android #camera #camera2

#Android #камера #camera2

Вопрос:

Пытаюсь реализовать нажатие на focus использование camera2api .

     CaptureRequest.Builder afBuilder = mPreviewBuilder;

    Rect newRect=new Rect(0,0,200,200);
    MeteringRectangle meteringRectangle=new MeteringRectangle(newRect,METERING_WEIGHT_DONT_CARE);

    MeteringRectangle[] areas = afBuilder.get(CaptureRequest.CONTROL_AF_REGIONS);

    mPreviewBuilder.set(CaptureRequest.CONTROL_AF_REGIONS,areas);
    mPreviewBuilder.set(CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AF_MODE_AUTO);
    mPreviewBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_START);
    mPreviewSession.setRepeatingRequest(mPreviewBuilder.build(), mCaptureCallback, mBackgroundHandler);
  

В моем обратном вызове я постоянно застреваю в ACTIVE_SCAN состоянии и иногда переходит в FOCUS_NOT_LOCKED состояние. Кажется, я никогда не могу войти в FOCUS_LOCKED состояние, и предварительный просмотр никогда не выглядит сфокусированным.

Использование Samsung galaxy note 3.

Комментарии:

1. Я извлекаю java.lang.IllegalArgumentException: rect.left must be nonnegative . не могли бы вы, пожалуйста, направить меня!

2. Возможно, стоит начать новый вопрос по этому поводу. У вас есть дополнительная информация по проблеме, пример кода и т.д.?

3.Решаемая с помощью SENSOR_INFO_ACTIVE_ARRAY_SIZE . Я смешал старый код камеры с новым Camera2 MeteringRectangle

Ответ №1:

Во-первых, вы на самом деле не устанавливаете область автофокусировки — вы просто повторно используете область по умолчанию из mPreviewBuilder.

Во-вторых, даже если вы установите для региона значение [(0,0,200,200), METERING_WEIGHT_DONT_CARE], это верхний левый угол изображения, и, вероятно, это не то, что вы хотите?

В-третьих, и это самое главное, вы настраиваете повторный запуск автофокусировки. Это означает, что при каждом кадре вы просите камеру перезапустить фокусировку. Так что это никогда не завершится, потому что вы никогда не позволяете этому.

Вам нужно настроить AF_TRIGGER на ЗАПУСК только для одного захвата; вы все равно захотите установить AF_REGION и AF_MODE при повторном запросе, чтобы они были согласованы на протяжении всего сканирования автофокусировки, которое вы запускаете.

Комментарии:

1. Спасибо. Да, прямоугольники были скорее примером для этого поста. Я попробую отсортировать триггер, хотя это приложение для записи видео, просто чтобы поместить его в некоторый контекст.

2. Большое вам спасибо, это была повторяющаяся проблема с триггером!

3. @YRfreeDevelopers не могли бы вы любезно обновить OP с кодом исправления?

4. @Eddy Talvala, поэтому я не могу установить регион вручную, используя координаты?