Intereting Posts
Как удалить белый экран во время загрузки моего приложения? Предупреждение «Избегайте передачи null в качестве корня представления» при раздувании представления для использования AlertDialog Google Map на Android не загружается Проблема при ограничении ввода символов на числа на андроид хром с javascript / jquery Можно ли заблокировать таблицу SQLite для текущего потока? Что означает значение «String … params», если оно передается как параметр? Отправка данных с Android на сервер с данными JSON Как изменить цвет значка панели инструментов Погода API-данных осведомленности о погоде застряла в течение нескольких дней в разных местах и ​​изменении погоды Использование библиотеки AppCompat для поддержки ActionBar Как создать клиент чата XMPP для facebook? Как предотвратить захват экрана в Android Android Получить текущую дату (со временем 0: 00: 000) в миллисекундах? Задача Gradle Javadoc без предупреждений ActivityManager: Исключение при запуске java.lang.IllegalArgumentException: val.length> 91

Android: Как задержать захват определенного кадра, снятого камерой?

Я работаю над световой (светодиодной) системой связи, использующей телефонную камеру Android в качестве приемника, который создает пороговые значения на кадрах камеры. Для этого я использую метод обратного вызова предварительного просмотра onPreviewFrame . Чтобы быть более точным, необходимо задержать захват кадра каждые несколько кадров, чтобы система повторно синхронизировалась.

Мои вопросы:

  1. Как задержать захват (а не предварительный просмотр) одного кадра?
  2. Возможно ли, что есть внутренние изменения частоты кадров fps, о которых я не знаю, и если да, то как мне ограничить или изменить их?

* Чтобы ограничить скорость fps камеры, я использую setPreviewFpsRange , setAutoWhiteBalanceLock и setAutoExposureLock .

Вы можете попробовать новый пакет android.hardware.camera2, добавленный в API уровня 21, который заменяет класс устаревших камер и обеспечивает мелкозернистый контроль над функциональностью камеры:

Получить службу CameraManager

 CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE); 

Получить список камер, доступных на вашем устройстве

 String[] cameraIdList = manager.getCameraIdList(); 

Перейдите через CameraList, чтобы выбрать камеру с требуемыми характеристиками

 for(String cameraId:cameraIdList) { CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); } 

Создать класс обратного вызова камеры с предварительным просмотром и запросами на захват

 private class CameraCallback extends CameraDevice.StateCallback { @Override public void onOpened(CameraDevice camera) { CaptureRequest previewRequest = camera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW).build(); CaptureRequest stillCaptureRequest = camera.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE).build(); } }