Andrew Huang <bluedrum@163.com, > 转载请注明名字或网址,
一.V4L格式分类
从V4L设备的视频数据格式五花八门,但是细分下来实现三大类。 1) RGB类. 即将视频频每一点数据用RGB的格式表示,这种解析相对简单,但是数据量较大 2)YUV类
3)JPEG 压缩类 即输出的一帧数据就是一个幅JPG图像数据,这一种格式对软件处理相当简单,但是对硬件处理能力要求较高,现在很多摄像头不带了,在我手头这么多摄像头中,也只有老式的ZC301的支持这种格式, 这个包念V4L2_PIX_FMT_JPEG 和V4L2_PIX_FMT_MPEG两种格式。
4)还有一些是保留格式,针对一些特殊设备,不具有通用性。比如象 V4L2_PIX_FMT_SN9C10X 是sn9c10的专用格式。
应用程序在解析时,需要按格式解析,才能正确显示, 二。采集前格式设置 在视频前采集,一般要设置采集格式,用VIDIOC_S_FMT来进行设置 - /*
-
* V I D E O I M A G E F O R M A T
-
*/
-
struct v4l2_pix_format {
-
__u32 width;
-
__u32 height;
-
__u32 pixelformat;
-
enum v4l2_field field;
-
__u32 bytesperline; /* for padding, zero if unused */
-
__u32 sizeimage;
-
enum v4l2_colorspace colorspace;
-
__u32 priv; /* private data, depends on pixelformat */
-
};
- /* Stream data format
-
*/
-
struct v4l2_format {
-
enum v4l2_buf_type type;
-
union {
-
struct v4l2_pix_format pix; /* V4L2_BUF_TYPE_VIDEO_CAPTURE */
-
struct v4l2_window win; /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
-
struct v4l2_vbi_format vbi; /* V4L2_BUF_TYPE_VBI_CAPTURE */
-
struct v4l2_sliced_vbi_format sliced; /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
-
__u8 raw_data[200]; /* user-defined */
-
} fmt;
-
};
不同的设备,设置的使用union fmt中不同成员,其中 Capture设备使用 v4l2_pix_format.其中的pixelformat 就是前文所述格式. 设置样例: - CLEAR (fmt);
-
-
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-
fmt.fmt.pix.width = 640;
-
fmt.fmt.pix.height = 480;
-
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
-
fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;
-
-
if (-1 == xioctl (fd, VIDIOC_S_FMT, &fmt))
-
errno_exit ("VIDIOC_S_FMT");
三。
有问题发邮件到 bluedrum@163.com 或在微博 http://weibo.com/bluedrum 留言
|