Мое приложение для андроида захватывает рамки предварительного просмотра. Необходимо, чтобы рамки не были размыты. Для этого необходимо ограничить время экспозиции датчика. Например, я хочу, чтобы время экспозиции было меньше 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. активный баланс белого?