Есть ли шансы сократить время затвора с помощью доступа к камере Android NDK?

Я написал приложение для Android, которое захватывает предварительный просмотр с камеры. Важно иметь короткое время затвора, которое должно быть как минимум постоянным.

В настоящее время я использую следующий код для достижения низкого времени затвора:

Parameters params = camera.getParameters();
params.setSceneMode(Parameters.SCENE_MODE_SPORTS);
params.setWhiteBalance(Parameters.WHITE_BALANCE_DAYLIGHT);
params.setFlashMode(Parameters.FLASH_MODE_OFF);
params.setFocusMode(Parameters.FOCUS_MODE_INFINITY);

params.setPreviewFpsRange(9000, 29453);
params.setPreviewFrameRate(29453);
params.setJpegQuality(100);
params.setPreviewFormat(ImageFormat.NV21);

params.setPreviewSize(1280,720);
params.setAntibanding(Parameters.ANTIBANDING_OFF);
params.setExposureCompensation(params.getMinExposureCompensation());
params.set("iso", 1250);
camera.setParameters(params);

SetSceneMode (), кажется, не поддерживается в прошивке моего телефона (getSupportedSceneModes возвращает пустой список). Установка «ISO», возможно, не имеет никакого эффекта (пока не смотрели на картинку, только вычислили частоту кадров). Просто где-то нашел этот код и использовал его ... может быть, это просто неправильная строка?

Пока что происходит следующее: частота кадров изменяется от 9 до 29 453 кадров в секунду, что является единственным поддерживаемым диапазоном частоты кадров. Такparams.setPreviewFpsRange(29453, 29453); тоже не работает. Частота кадров высока (20-30 кадр / с) при хороших условиях освещения (обычный день, в помещении, направлен на окно) и становится очень низкой (8-10 кадр / с) для среднего / слабого освещения (дневной свет, в помещении, прямо от окна) условия.

Подробнее: мне нужна не высокая частота кадров, а низкая выдержка. Собранные данные должны использоваться для внутренней навигации (или: внутренняя локализация на первом этапе). Приложение должно делать снимки, когда человек просто нормально гуляет, и человек не заботится о том, как он / она носит телефон. Человек может даже бегать или "раскачиваться" телефон (как вы обычно двигаете руками при ходьбе). Так что обычно происходит много «размытия в движении», так как вскоре время затвора становится слишком длинным. Ситуация сильно отличается от "Я хочу сделать фотографию" ситуации, когда фотография пытается удерживать камеру неподвижно. На самом деле мы не хотим получать «хорошие фотографии», но хотим время от времени обнаруживать некоторые края стен. Я ожидаю много "шума" на картинке, но, надеюсь, все равно работает ...

Идея состоит в том, что есть вероятность получить больше контроля над параметрами камеры с помощью NDK. Кто-нибудь сталкивался с NDK и может ответить, стоит ли попробовать?

Дополнительная информация: я использую HTC Desire Z (также называемый: «T-Mobile G2» или «HTC Vision») в качестве тестового устройства.

Ответы на вопрос(1)

Ваш ответ на вопрос