我正在尝试使用 camera2 API 在预览期间获取视频帧数据帧。我如何获得指向每个帧数据的指针。在本站显示帧预览之前,将帧数据指针连同包含视频数据格式的结构一起发送到 C++ 函数(JNI 原生)。这是可能的?请帮助我,给我一些建议?我提前致谢。
关于从 Java 预览中获取帧,您可以ImageReader
在捕获中添加一个。特别是,您需要实现 ImageReader.OnImageAvailableListener (doc here)。从那个 ImageReader 你可以使用类似的代码获取原始字节:
ImageReader.OnImageAvailableListener mOnImageAvailableListener =
new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Image img = null;
img = reader.acquireLatestImage();
Result rawResult = null;
try {
if (img == null) throw new NullPointerException("cannot be null");
ByteBuffer buffer = img.getPlanes()[0].getBuffer();
byte[] data = new byte[buffer.remaining()];
buffer.get(data);
Bitmap b = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
} catch (ReaderException ignored) {
} catch (NullPointerException ex) {
} finally {
mQrReader.reset();
if (img != null)
img.close();
}
}
};
您必须创建一个ImageReader
,并设置其侦听器
mImageReader = ImageReader.newInstance(...);
mImageReader.setOnImageAvailableListener(mOnImageAvailableListener, (...));
您可以通过这种方式添加到您的捕获会话中:
Surface surface = new Surface(texture);
Surface mImageSurface = mImageReader.getSurface();
mPreviewRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
mPreviewRequestBuilder.addTarget(mImageSurface);
mPreviewRequestBuilder.addTarget(surface);
请注意,这是指导您的伪代码,可能还没有准备好直接粘贴和工作,但会为您提供有关如何进行的良好指南。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句