android 三星Galaxy设备上的错误Camera2 YUV_420_888数据

drkbr07n  于 2023-03-06  发布在  Android
关注(0)|答案(2)|浏览(243)

下午好,
我注意到在指定设备-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?

mm5n2pyu

mm5n2pyu1#

对于任何遇到这个的人来说,这款手机在Y通道上有填充物。
对于问题的示例,640(请求的宽度)和1024(实际y行跨距)之间的数据全为零。
(Kind的)相关问题here

k4emjkb1

k4emjkb12#

我们不期望stride == width,如果是这样的话,stride就根本不需要存在了。
许多硬件图像处理块具有导致stride值必须大于width的存储器对准要求;在这种情况下,看起来像照相机图像信号处理器(或其子单元之一)需要图像缓冲器行的大小至少为1 KB。
这就是为什么同时存在行步长和像素步长,以便高效地生成和访问各种布局的YUV数据。忽略它们或假设stride == widthpixel stride == 1(或2)是让应用在某些设备子集上崩溃的好方法。

相关问题