Android Camera2 RAW 流媒体

Android Camera2 RAW streaming

我是 Android 的新手,正在尝试:

原始数据捕获似乎只能在静态捕获模式下使用。这是正确的吗?

如果可以,是否可以对 RAW 图像执行重复的 CaptureRequests?使用 13MP 传感器可以获得什么样的性能?任何参考代码?

非常感谢,

纪尧姆

编辑:

这是我到目前为止所做的:

原始分辨率为 4208x3120

最短帧持续时间为 33 毫秒

停顿持续时间为 200 毫秒

我获得的仅预览帧率约为 25-30 fps。

当我预览并启用每帧原始捕获时获得的帧速率约为 15 fps。

我收到一些 "ImageReader_JNI: Unable to acquire a buffer item, very likely client tried to acquire more than maxImages buffers" 消息,即使我每 100 帧进行一次原始捕获也是如此。

我很乐意就以下方面获得一些反馈:

非常感谢,

纪尧姆

是否完全支持 RAW 捕获,以及可以完成的速率都取决于设备。

如果设备支持 RAW capability, then you can use an ImageReader with the RAW_SENSOR format as a capture target. The format will then also be listed in the available output formats. You can see what kinds of stream combinations are supported in the documentation for createCaptureSession 中的 RAW 功能 table。

要确定捕获 RAW 缓冲区的速度,请查看 getOutputMinFrameDuration, which tells you what the maximum frame rate when including an output of given format and resolution combination. In addition, the getOutputStallDuration 方法的输出,它会告诉您是否需要在针对 RAW 输出的两个连续请求之间增加额外延迟,以避免拖延预览。在一般情况下,不需要支持任何特定的 RAW 缓冲区输出速率。

但是,如果设备支持更高效的 RAW10 或 RAW12 格式,并且支持 BURST_CAPTURE 功能,则保证支持以至少 20fps 的速率捕获这些格式。

您可以查看 Google camera2raw 基本静态捕捉示例。但是,您当然可以连续捕获 RAW 缓冲区,而不是与 JPEG 缓冲区一起捕获。但是在这种情况下您的帧速率可能非常低,并且为了保持预览帧速率,您可能希望每 N 个预览帧中只发布一个 RAW 捕获。

例如,如果 RAW_SENSOR 的停顿持续时间为 100 毫秒,但最短帧持续时间为 30 毫秒,您可以 运行 通过 (R+P) 的捕获请求模式连续预览,P,P,P,(R+P),P,P,P... 这样每个原始捕获的开始之间至少有 100 毫秒。这将使您获得 ~8fps RAW 和 30fps 预览。