2017-01-25 8 views
0

Мое приложение для андроида захватывает рамки предварительного просмотра. Необходимо, чтобы рамки не были размыты. Для этого необходимо ограничить время экспозиции датчика. Например, я хочу, чтобы время экспозиции было меньше 10 мс, а регулятор баланса белого использовал только ISO.Камера для Android, как установить верхний предел времени экспозиции?

Единственное решение, которое я нашел, фиксирование SENSOR_EXPOSURE_TIME и SENSOR_SENSITIVITY:

public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) 
{ 
    // measure ISO and exposure 
    mExposure = result.get(CaptureResult.SENSOR_EXPOSURE_TIME); 
    mSensitivity = result.get(CaptureResult.SENSOR_SENSITIVITY); 
    ... 
} 

void prepareCapturing() 
{ 
    // setting the necessary values of ISO and exposure 
    if (mExposure > 10.0 * 1e+6) 
    { 
     double exposure = 10.0 * 1e+6; 
     double sens = mExposure * mSensitivity/exposure; 

     mPreviewRequestBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, (long)exposure); 
     mPreviewRequestBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, (int)sens); 
    } 

    mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF); 
    setRepeatingRequest(); 
} 

я называю методом prepareCapturing перед запуском моего алгоритма предварительного просмотра кадра анализа.

Этот подход работает, но для его отключения необходимо отключить android.control.aeMode, поэтому баланс белого будет отключен.

Также я попытался использовать стандартные сюжетные режимы, такие как CONTROL_SCENE_MODE_ACTION, и CONTROL_SCENE_MODE_SPORTS, но время экспозиции в любом случае составляет около 40 мс.

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

ответ

0

Вы можете узнать нижние и верхние значения, поддерживаемые телефоном с помощью ключа SENSOR_INFO_EXPOSURE_TIME_RANGE

Проверьте на следующий метод, надеюсь, что это поможет вам :

/** 
* Get exposure time range. 
* 
* @param cameraCharacteristics The properties of the camera. 
* @return Long exposure compensation range. 
* @see <a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#SENSOR_INFO_EXPOSURE_TIME_RANGE"> 
* CameraCharacteristics.SENSOR_INFO_EXPOSURE_TIME_RANGE</a> 
*/ 
private static Range<Long> getExposureTimeRange(CameraCharacteristics cameraCharacteristics) { 
    return cameraCharacteristics.get(CameraCharacteristics.SENSOR_INFO_EXPOSURE_TIME_RANGE); 
} 
0

Основной API, который требует, чтобы автоэкспозиция оставалась ниже некоторого Максимальное время экспозиции - CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE. Например, если вы установите это значение на (30,30), то устройство камеры может не использовать время экспозиции более 1/30 секунды.

Список доступных диапазонов для устройства предоставляется CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES.

Нет прямого управления для установки значений максимальной/минимальной экспозиции самостоятельно, и если ни один из доступных целевых диапазонов FPS не ограничивает время экспозиции, единственным вашим вариантом является использование ручного управления экспозицией (если поддерживается).

Независимо от того, отключает ли AWB устройство, к сожалению, на некоторых устройствах выход из процедуры автоматической экспозиции имеет важное значение для работы алгоритма баланса белого.

 Смежные вопросы

  • Нет связанных вопросов^_^