对V4L2的误解

时间:2013-05-04 21:54:14

标签: c++ linux v4l2

我在C ++程序中的缓冲区大小有一个小问题。 我使用V4L2从相机中获取YUYV图像(示例可用here

我想拍摄一张图片并将其放入我自己的图片结构中。 这是V4L2结构给出的缓冲区及其大小

(uchar*)buffers_[buf.index].start, buf.bytesused

在我的结构中,我创建了一个新的缓冲区(mybuffer),其大小为width * height * bitSize(字节大小为4,因为我抓住了YUYV或YUV422图像)。

问题在于我期望缓冲区 buf 与我创建的缓冲区大小相同。但事实并非如此,例如当我抓住640 * 480图像buf = 614400而mybuffer = 1228800(两倍大)时。

有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:1)

YUV422 2个像素使用 4个字节

YUV422 模式下,U ans V值在两个像素之间共享。 Image中的字节的排序方式与U0 Y0 V0 Y1 U2 Y2 V2 Y3等相同。

给出像这样的像素:

pixel 0   U0Y0V0
pixel 1   U0Y1V0
pixel 2   U2Y2V2
pixel 3   U2Y3V2