java – Android camera2捕获突发太慢了
我正在尝试修改
android-Camera2Basic代码来捕获一连串的图片.但是,在我的Nexus 5上运行L 5.0.1,我无法以超过200-300ms的速度获得图片之间的延迟.
我尝试了一大堆东西,但这是最基本的.这是我修改的Camera2Basic代码的唯一部分.我的预览TextureView只有50x50dp,但这不要紧,对吧? 对于什么是值得的,这个代码只有延迟约50-100ms在我的Nexus 6,与L 5.1. private void captureStillPicture() { try { List<CaptureRequest> captureList = new ArrayList<CaptureRequest>(); mPreviewRequestBuilder.addTarget(mImageReader.getSurface()); for (int i=0;i<10;i++) { captureList.add(mPreviewRequestBuilder.build()); } mCaptureSession.stopRepeating(); mCaptureSession.captureBurst(captureList,cameraCaptureCallback,null); mPreviewRequestBuilder.removeTarget(mImageReader.getSurface()); } catch (CameraAccessException e) { e.printStackTrace(); } } CameraCaptureSession.CaptureCallback cameraCaptureCallback = new CameraCaptureSession.CaptureCallback() { @Override public void onCaptureCompleted(CameraCaptureSession session,CaptureRequest request,TotalCaptureResult result) { Log.d("camera","saved"); mPictureCounter++; if (mPictureCounter >= 10) unlockFocus(); } }; 解决方法
您遇到的问题是您请求的图像输出格式的工件. JPEG编码过程在摄像机管道上施加了大的停顿时间,因此在发生编码时,在一次曝光结束和下一次开始之间存在大量停机时间.
引用的30fps速率可以通过将ImageReader上的输出图像格式设置为YUV来实现,因为这是相机的“本机”输出.这将是在捕获图像时存储图像的方式,然后您将需要执行JPEG编码,分离相机的内联处理. 例如,在Nexus 5上,JPEG编码的输出停止时间为243ms,您已经观察.对于YUV_420_888输出,为0ms.同样,由于其大尺寸,RAW_SENSOR编码引入了200ms的停顿时间. 还要注意,即使您通过选择“更快”的格式删除停顿时间障碍物,仍然有最小帧时间,具体取决于输出图像大小.但是对于Nexus 5的全分辨率输出,这是33ms,这是你期待的. 相关信息在相机元数据的StreamConfigurationMap对象here中.查看getOutputStallDuration(int格式,Size大小)和getOutputMinFrameDuration(int格式,Size size)方法进行确认. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – 使用JList .setModel()方法,将类作为参数
- java – 使用JFrame构造函数的最佳实践?
- java – 从URI获取锚点
- java – 理解Integer.highestOneBit()方法实现背后的逻辑
- java – 在Google Drive API v3中等效的File.setTitle方法
- java按照关键字指定的key删除redis(支持模糊删除)
- java删除文件和文件夹具体实现
- JDK 1.6的JavaCompiler:如何将类字节直接写入byte []数组?
- java – Hibernate相当于EclipseLink的批量查询提示?
- Struts2 使用OGNL遍历map方法详解