我正在开发一个光(LED)通信系统,该系统使用Android
手机摄像头作为接收器,对摄像头帧进行阈值处理。为此,我使用preview的回调方法onPreviewFrame
。为了更准确,需要每隔几帧延迟一帧的捕获,以便系统重新同步。
我的问题是:
- 如何延迟单个帧的捕获(而不是预览)
- 是否可能存在我不知道的相机fps速率的内部变化?如果是,我该如何限制或更改它们
*为了限制相机的fps速率,我使用setPreviewFpsRange
、setAutoWhiteBalanceLock
和setAutoExposureLock
。
您可以尝试在API 21级中添加的较新android.hardware.camera2包,该包取代了不推荐使用的相机类,并对相机功能提供了细粒度控制:
获取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();
}
}