安卓:如何延迟相机拍摄的特定帧



我正在开发一个光(LED)通信系统,该系统使用Android手机摄像头作为接收器,对摄像头帧进行阈值处理。为此,我使用preview的回调方法onPreviewFrame。为了更准确,需要每隔几帧延迟一帧的捕获,以便系统重新同步。

我的问题是:

  1. 如何延迟单个帧的捕获(而不是预览)
  2. 是否可能存在我不知道的相机fps速率的内部变化?如果是,我该如何限制或更改它们

*为了限制相机的fps速率,我使用setPreviewFpsRangesetAutoWhiteBalanceLocksetAutoExposureLock

您可以尝试在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();
    }
}

最新更新