4

简短的问题是:解决 a 中像素值的公式是什么CVPixelBuffer

我正在尝试将 a 转换为CVPixelBuffer平面字节数组,并注意到一些奇怪的事情: TheCVPixelBuffer是从 a 获得的CMSampleBuffer。它的宽度和高度是852x640像素。总和像素,考虑到每个像素的字节数545280,这将需要字节数。21811204

现在第一个奇怪的事情是,每行CVPixelBuffer返回相同的字节数,这对于像素3456来说是足够的空间。864这些额外的12像素从何而来?如果最终图像中的一行只有852像素宽,但实际上864一行中有像素CVPixelBuffer,我怎么知道需要复制哪些字节?或者这些字节中的哪些未使用?顺便说一句,它们是未使用的吗?

另一件事是报告的数据大小CVPixelBuffers,即2211848字节。3456现在,如果我们将每行的字节数乘以640行数,我们将得到2211840字节数。再次,我们留下了8额外的字节。这些8字节是怎么回事?它们没有被使用吗?他们在最后吗?

欢迎任何对此事有所启发的建议,谢谢。

4

1 回答 1

3

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

于 2016-07-05T16:13:18.550 回答