我是Android的新手,因此尝试:
似乎原始数据捕获仅在静态捕获模式下可用。它是否正确 ?
如果可以的话,可以对RAW图像执行重复的CaptureRequests吗?使用13MP传感器可以期待什么样的性能?有参考代码吗?
提前谢谢了,
纪尧姆
编辑:
到目前为止,这是我所做的:
在onSurfaceTextureUpdated()中计算/更新帧速率
问题:
将原始ImageReader的表面添加到cameraDevice.createCaptureSession()
原始分辨率为4208x3120
最小帧持续时间为33ms
失速持续时间为200ms
我仅用于预览的帧速率约为25-30 fps。
预览并启用原始捕获时获得的帧率约为15 fps。
我收到一些“ ImageReader_JNI:无法获取缓冲区项目,很可能客户端尝试获取超过maxImages缓冲区的消息”,即使我每100帧进行一次原始捕获也是如此。
我希望获得一些反馈:
非常感谢,
纪尧姆
是否完全支持RAW捕获以及可以完成的速率都取决于设备。
如果设备支持RAW功能,则可以将RAW_SENSOR格式的ImageReader用作捕获目标。然后,该格式还将以可用的输出格式列出。您可以在RAW功能表的createCaptureSession文档中查看支持哪些流组合。
要确定捕获RAW缓冲区的速度,请查看getOutputMinFrameDuration的输出,该输出告诉您包括给定格式和分辨率组合的输出时的最大帧速率。另外,getOutputStallDuration方法将告诉您是否需要在两个连续的针对RAW输出的请求之间有额外的延迟,以避免延迟预览。通常情况下,不需要支持RAW缓冲区的任何特定输出速率。
但是,如果设备支持更高效的RAW10或RAW12格式,并且支持BURST_CAPTURE功能,则可以保证以至少20fps的速率捕获这些格式。
您可以查看用于基本静止图像的Google camera2raw示例。但是,您当然可以连续捕获RAW缓冲区,而不是与JPEG缓冲区一起捕获。但是在这种情况下,您的帧速率可能会非常低,并且为了保留预览帧速率,您可能希望仅在每N个预览帧中发出一个RAW捕获。
例如,如果RAW_SENSOR的停顿持续时间为100ms,但是最小帧持续时间为30ms,则可以通过以下捕获请求模式运行连续预览:(R + P),P,P,P,(R + P), P,P,P ...,因此每个原始捕获的开始之间至少要间隔100毫秒。这样您将获得〜8fps RAW和30fps预览。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句