如何正确处理CVPixelBuffer中的像素?

5
简短的问题是:如何用公式在CVPixelBuffer中寻址像素值?
我正在尝试将CVPixelBuffer转换为平面字节数组,并注意到一些奇怪的事情:CVPixelBuffer是从CMSampleBuffer获取的。它的宽度和高度为852x640个像素。总共有545280个像素,每个像素需要4个字节,因此需要2181120个字节。
现在第一个奇怪的事情是,同样的CVPixelBuffer返回每行3456个字节,足够容纳864个像素。这额外的12个像素从哪里来?如果最终图像中的一行只有852个像素,但实际上在CVPixelBuffer中有864个像素,我如何知道哪些字节需要被复制?或者哪些字节未使用?顺便问一下,它们是否未使用?
另一个问题是CVPixelBuffers报告的数据大小为2211848个字节。现在,如果我们将3456个字节每行乘以640行,我们将得到2211840个字节。所以再次,我们剩下了8个额外的字节。这8个字节的问题是什么?它们未使用吗?它们在结尾吗?
欢迎任何能够解决这个问题的建议,谢谢。
1个回答

3

在内部,您的CMSampleBuffer会将每行数据填充到16字节的倍数,以便可以使用处理器内部的128位宽寄存器有效地传输数据。这是我的猜测。如果您使用其rowbytes参数和范围为(0,0)至(851,639)的(x,y)访问像素数据,则不应遇到任何问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接