对V4L2的误解

A misunderstanding of V4L2

本文关键字:误解 V4L2      更新时间:2023-10-16

我在一个c++程序中遇到了一个关于缓冲区大小的小问题。我使用V4L2从相机抓取YUYV图像(这里有一个示例)

我想取一个图像并把它放到我自己的图像结构中。下面是V4L2结构给出的缓冲区及其大小

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

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

问题是我期望缓冲区但是与我创建的缓冲区大小相同。但情况并非如此,例如,当我抓取640*480的图像,但f=614400和mybuffer=1228800(两倍大)。

有人知道为什么会这样吗?

YUV422 使用 4字节/ 2像素

YUV422模式下,UV值在两个像素之间共享。图像中的字节顺序为U0 Y0 V0 Y1 U2 Y2 V2 Y3

给出如下像素:

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