【发布时间】:2022-07-21 18:00:47
【问题描述】:
在使用ImageAnalysis.Analyzer 类中的analyze() 函数检索图片并对其进行操作(对其进行操作)时,我在不同的Android 设备上遇到了不同的行为。相同的代码在可靠的三星设备上运行时会返回我可以使用的常规图片。但在低端的安卓设备上运行时,就不行了。
分析代码:
private class NAnalyzer implements ImageAnalysis.Analyzer {
@Override
public void analyze(@NonNull ImageProxy image) {
time = System.nanoTime();
ImageProxy.PlaneProxy[] planes = image.getPlanes();
ByteBuffer yBuffer = planes[0].getBuffer(); //Y
ByteBuffer uBuffer = planes[1].getBuffer(); //U
ByteBuffer vBuffer = planes[2].getBuffer(); //V
int ySize = yBuffer.remaining();
int uSize = uBuffer.remaining();
int vSize = vBuffer.remaining();
byte[] nv21 = new byte[(ySize + uSize + vSize)];
yBuffer.get(nv21, 0, ySize);
vBuffer.get(nv21, ySize, vSize);
uBuffer.get(nv21, ySize + vSize, uSize);
YuvImage yuvImage = new YuvImage(nv21, ImageFormat.NV21, image.getWidth(), image.getHeight(), null);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
yuvImage.compressToJpeg(new Rect(0,0, yuvImage.getWidth(), yuvImage.getHeight()), 100, stream);
byte[] imageBytes = stream.toByteArray();
//raw = data container
raw = imageBytes;
//nRunnable - operates the picture
nRunnable.run();
image.close();
}
}
The low-end picture can be found here
我认为这是一个硬件问题,但如果有人知道,我将不胜感激。
【问题讨论】:
-
1) 哪些低端设备 2) 他们的Performance class 是什么 3) 什么是Operating Mode
-
@MorrisonChang 1) 未知的中国制造商,手机是 120 美元的价格范围 2) 无法检索它,手机上装有 Android 10... 3) 操作模式是:
ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST -
@MorrisonChang 刚刚在小米红米 Note 10 Pro(高端设备)上进行了测试,同样的事情发生了,出现了相同类型的图像。我将尝试测试不同的 YUV 格式,直到现在我只使用 Nv21。
-
有人对此有答案吗?我面临着完全相同的情况。它一直工作到现在,但突然停止在设备和模拟器上工作。经过几次重建后,模拟器再次开始工作,但 android 设备提供与 OP 相同的输出。我拥有小米 mi A2 Lite