在C++中如何使用Android NDK Camera2捕获预览帧并保存为JPEG?

问题描述 投票:0回答:1

我想做的是使用 NDK Camera2 从相机捕获预览帧,并将它们编码为二进制缓冲区中的 JPEG 图像。

为此,我搜索了一些使用NDK Camera2和C++在SurfaceView或TextureView上显示预览帧的示例,包括这个流行的示例。但所有这些示例都使用(或依赖?)JNIEnv 和 SurfaceView 来显示预览帧,并且在我的用例中,我的 C++ 代码预计不会使用或依赖 Android 视图。我不需要显示预览,我只需要将预览帧以 JPEG 格式保存在二进制缓冲区中。你能解释一下如何做到这一点吗?谢谢!

android c++ image-processing android-ndk android-camera2
1个回答
0
投票

您可以使用camera2 NDK API直接捕获JPEG,但由于这些通常用于高质量快照,因此您可能无法以预览速率(30fps)执行此操作。

或者,如果您通过 NDK ImageReader 从相机接收 YCbCr_420_888 格式缓冲区,则可以使用像 libjpeg-turbo 这样的库在内存中压缩为 JPEG。您可能需要调整 YUV 数据之间的布局,具体取决于您的压缩库接受的内容。 (例如,通过使用 libyuv

或者,您可以使用 libyuv 之类的工具转换为 RGB,然后使用 NDK 位图压缩方法 保存 JPEG。虽然这些相对较新,所以可能无法在您需要的 API 级别上工作。

© www.soinside.com 2019 - 2024. All rights reserved.