我对Android非常陌生,并试图:
似乎只有在静态捕获模式下才能获得原始数据捕获。这是对的吗?
如果是这样的话,是否可以对原始图像执行重复的CaptureRequests操作?使用13MP传感器可以预期什么样的性能?有参考代码吗?
事先非常感谢,
纪尧姆
编辑
以下是我迄今所做的工作:
- Is it OK to calculate framerate in onSurfaceTextureUpdated() ?
- I tried to set different dimensions to texture.setDefaultBufferSize() but it has no effect on framerate. Is this normal ?
原始分辨率为4208x3120。
最小帧持续时间为33 is
失速时间为200 is。
我得到的框架只预览大约25-30 fps。
当我预览并启用原始捕获时,每个帧的帧率约为15 fps。
我得到了一些"ImageReader_JNI:无法获取缓冲区项,很可能客户端试图获取比maxImages缓冲区更多的“消息,即使我每100帧原始捕获一次。
我很想得到以下方面的反馈:
非常感谢,
纪尧姆
发布于 2017-08-08 20:30:14
是否支持原始捕获,以及可以实现什么速率,都取决于设备。
如果设备支持原始能力,则可以使用带有RAW_SENSOR格式的ImageReader作为捕获目标。然后,该格式也将在可用输出格式中列出。您可以看到原始功能表中的createCaptureSession文档支持何种类型的流组合。
要确定捕获原始缓冲区的速度,请查看getOutputMinFrameDuration的输出,它告诉您当包含给定格式和分辨率组合的输出时,最大帧速率是多少。此外,getOutputStallDuration方法将告诉您是否需要在针对原始输出的两个连续请求之间额外延迟,以避免延迟预览。在一般情况下,不需要支持任何特定的原始缓冲区的输出速率。
但是,如果设备支持任何一种更高效的RAW10或RAW12格式,并且支持俘获功能,那么它保证支持以至少20 and的速率捕获这些格式。
您可以查看Google camera2raw示例,以获得基本的仍然捕获。但是,您当然可以连续捕获原始缓冲区,而不是与JPEG缓冲区一起捕获。但是在这种情况下,您的帧率可能很低,为了保持预览帧速率,您可能希望在每个N个预览帧中只发出一个原始捕获。
例如,如果RAW_SENSOR的失速持续时间为100 is,但最小帧持续时间为30 is,则可以通过捕获请求模式(R+P)、P、(R+P)、P、P、P .所以在每个原始捕获的开始之间至少有100 ms。这会让你得到~8 8fps生和30 8fps预览。
https://stackoverflow.com/questions/45515288
复制相似问题