Почему camera2 использует ImageReader для получения изображения YUV, всего лишь под 10-15 кадрами
Я использую Camera2 API для камеры, и мне нужно повторно обработать предварительное изображение, поэтому используйте ImageReader, чтобы получить кадр, обработать этот кадр, а затем нарисовать этот кадр на поверхности
но у меня была проблема, кадр всего 10 кадров в секунду, выглядит медленно
ImageReader.OnImageAvailableListener mYuv1ImageListener =
new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Image img = reader.acquireLatestImage();
if (img == null) {
Logger.debug(TAG, "Null image returned YUV1");
return;
}
Logger.debug(TAG, "no Null image returned YUV1");
Image.Plane plane0 = img.getPlanes()[0];
Image.Plane plane1 = img.getPlanes()[1];
Image.Plane plane2 = img.getPlanes()[2];
final ByteBuffer buffer0 = plane0.getBuffer();
final ByteBuffer buffer1 = plane1.getBuffer();
final ByteBuffer buffer2 = plane2.getBuffer();
final byte[] ybuff, ubuff, vbuff;
if (buffer0.hasArray()) {
ybuff = buffer0.array();
} else {
ybuff = new byte[buffer0.capacity()];
buffer0.get(ybuff);
}
if (buffer1.hasArray()) {
ubuff = buffer1.array();
} else {
ubuff = new byte[buffer1.capacity()];
buffer1.get(ubuff);
}
if (buffer2.hasArray()) {
vbuff = buffer2.array();
} else {
vbuff = new byte[buffer2.capacity()];
buffer2.get(vbuff);
}
int width = img.getWidth();
int height = img.getHeight();
img.close();
mMyCameraCallback.frameDataAvailable(ybuff, ubuff, vbuff, width, height); process image and draw this frame on surface
};