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(); } }