下午好,
我注意到在指定设备-Galaxy A23(SM-A236B)上请求Camera2 ImageFormat.YUV_420_888 VGA数据时,Y、U和V通 prop 有意外的大小和行跨距。
请求类似的图像读取器(忽略语法正确性!):
mImageReader = ImageReader.NewInstance(640, 480, ImageFormatType.Yuv420888, 5);
产量:
Y row stride = 1024 / Y size bytes = 491136
UV row stride = 1024 / UV pixel stride = 2 / UV size bytes = 245375
何时应:
Y row stride = 640 / Y size bytes = 307200
UV row stride = 640 / UV pixel stride = 2 / UV size bytes = 153599
这在该设备可用的所有Android版本中都可见。
除了Y(我所使用的)不是预期的,它确实破坏了我的YUV2RGBA代码(如果需要,可以粘贴这个以供将来讨论)。
是否有人知道此设备上的Camera2实现是否存在问题,或者他们返回的不是YUV_420_888?
2条答案
按热度按时间mm5n2pyu1#
对于任何遇到这个的人来说,这款手机在Y通道上有填充物。
对于问题的示例,640(请求的宽度)和1024(实际y行跨距)之间的数据全为零。
(Kind的)相关问题here。
k4emjkb12#
我们不期望
stride == width
,如果是这样的话,stride
就根本不需要存在了。许多硬件图像处理块具有导致
stride
值必须大于width
的存储器对准要求;在这种情况下,看起来像照相机图像信号处理器(或其子单元之一)需要图像缓冲器行的大小至少为1 KB。这就是为什么同时存在行步长和像素步长,以便高效地生成和访问各种布局的YUV数据。忽略它们或假设
stride == width
或pixel stride == 1
(或2)是让应用在某些设备子集上崩溃的好方法。