基于arm的远程监控系统设计毕业论文(编辑修改稿)内容摘要:

以下两行: \ \ 交叉编译 mjpegstream 执行以下命令进行编译并打包: cd /opt/mini6410/ webcamera/ mjpgstreamer mini2440 read only / export CC=armlinuxgcc make make package 在当前目录下会生成 mjpgstreamer mini2440 , 将它拷入 SD 卡备用。 Mini6410 上的摄像头 \ Bin”目录下找到我们编译好的可执行文件,文件名为 mjpgstreamer mini6410。 11 4. 基于 V4L 的 视频采集程序以及图像压缩理论 V4L2 Video for Linux two(Video4Linux2)简称 V4L2,是 V4L 的改进版。 V4L2是linux 操作系统下用于采集图片、视频和音频数据的 API 接口,配合适当的视频采集设备和相应的驱动程序,可以实现图片、视频、音频等的采集。 在远程会议、可视电话、视频监控系统和嵌入式多媒体终端中都有广泛的应用。 在 Linux 下,所有外设都被看成一种特殊的文件,成为 “设备文件 ”,可以象访问普通文件一样对其进行读写。 一般来说,采用 V4L2驱动的 摄像头设备文件是 /dev/v4l/video0。 为了通用,可以建立一个到 /dev/video0的链接。 V4L2支持两种方式来采集图像:内存映射方式 (mmap)和直接读取方式 (read)。 V4L2在include/linux/ 文件中定义了一些重要的数据结构,在采集图像的过程中,就是通过对这些数据的操作来获得最终的图像数据。 Linux 系统 V4L2的能力可在 Linux 内核编译阶段配置,默认情况下都有此开发接口。 V4L2从 Linux 版本的内核中开始出现 [15]. V4L2规范中不 仅定义了通用 API 元素 (Common API Elements),图像的格式 (Image Formats),输入 /输出方法 (Input/Output),还定义了 Linux 内核驱动处理视频信息的一系列接口 (Interfaces),这些接口主要有: 视频采集接口 ——Video Capture Interface。 视频输出接口 —— Video Output Interface。 视频覆盖 /预览接口 ——Video Overlay Interface。 视频输出覆盖接口 ——Video Output Overlay Interface。 编解码接口 ——Codec Interface。 应用程序通过 V4L2进行视频采集的原理 V4L2支持内存映射方式 (mmap)和直接读取方式 (read)来采集数据,前者一般用于连续视频数据的采集,后者常用于静态图片数据的采集,本文重点讨论内存映射方式的视频采集。 应用程序通过 V4L2接口采集视频数据分为五个步骤: 首先,打开视频设备文件,进行视频采集的参数初始化,通过 V4L2接口设 12 置视频图像的采集窗口、采集的点阵大小和格式。 其次,申请若干 视频采集的帧缓冲区,并将这些帧缓冲区从内核空间映射到用户空间,便于应用程序读取 /处理视频数据。 第三,将申请到的帧缓冲区在视频采集输入队列排队,并启动视频采集。 第四,驱动开始视频数据的采集,应用程序从视频采集输出队列取出帧缓冲区,处理完后,将帧缓冲区重新放入视频采集输入队列,循环往复采集连续的视频数据。 第五,停止视频采集。 视频采集的参数初始化 在 Linux 下,摄像头硬件已经被映射为设备文件 “/dev/video0”,用 open 函数打开这个设备文件,获得其文件描述符 fd_v4l2,然后对这个文件描述符进行参数初始化。 (1) 设置视频的采集窗口参数 设置采集窗口就是在摄像头设备的取景范围之内设定一个视频采集区域。 主要是对结构体 v4l2_crop 赋值, v4l2_crop 由一个 v4l2_buffer_type 枚举类型的type 和 v4l2_rect 类型的结构体 c 构成,来描 述视频采集窗口的类型和大小。 type设置为视频采集类型 V4L2_BUF_TYPE_VIDEO_CAPTURE。 c 是表示采集窗口的大小的结构体,它的成员 Left 和 Top 分别表示视频采集区域的起始横坐标和纵坐标, width 和 height 分别表示采集图像的宽度和高度。 赋值后,用 ioctl 函数通过这个结构体对 fd_v4l2进行设置。 struct v4l2_crop { enum v4l2_buf_type type。 struct v4l2_rect c。 }。 (2)设置视频点阵格式和点阵大小 主要是对结构体 v4l2_format 进行赋值,它由 type 和联合体 fmt 构成,来描述视频设备当前行为和数据的格式。 把 type 赋值为视频采集类型 V4L2_BUF_TYPE_VIDEO_CAPTURE,表示定义了一个视频采集流类型的 buffer。 fmt 中, pix 为表示图形格式的v4l2_pix_format 型结构体。 需要设定 pix 里的几个变量, pixelformat 表示采集 13 格式,设置为 V4L2_PIX_FMT_YUV420。 width、 height 表示图像的宽度、高度,以字节为单位。 sizeimage 表示图像所占的存储空间大小,以字节为单位。 bytesperline 表示每一行的字节数。 赋值后,用 ioctl 函数通过这个结构体对fd_ v4l2进行设置。 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 __u8 raw_data[200]。 // userdefined } fmt。 }。 (3)设置视频采集的帧率 结构体 v4l2_streamparm 来描述视频流的属性,它由 type 和联合体 parm构成。 type 同上,由于选的是 V4L2_BUF_TYPE_VIDEO_CAPTURE,所以仅需设定 parm 中的 v412_capture 型结构体 capture 即可。 在其中, v4l2_fract型结构体 timeperframe 表示平均每一帧所占的时间,由其元素 numerator 和denominator 共同决定,该时长为 numerator/denominator。 而 capturemode 则表示采集模式,采集高质量图片值为 1,一般设为 0。 赋值之后,用 ioctl 函数通过这个结构体对 fd_ v4l2进行设置。 struct v4l2_streamparm { enum v4l2_buf_type type。 union { struct v4l2_captureparm capture。 struct v4l2_outputparm output。 __u8 raw_data[200]。 /* userdefined */ } parm。 }。 申请并设置视频采集的帧缓冲区 14 前期初始化完成后,只是解决了一帧视频数据的格式和大小问题,而连续视频帧数据的采集需要用帧缓冲区队列的方式来解决,即要通过驱动程序在内存中申请几个帧缓冲区来。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。