自定义struct my_dest_mgr与struct my_src_mgr结构体,扩充相应变量;改写Lib Jpeg库操作中的有关函数和源代码jdatae.c和jdatas.c文件,并将成员函数及数据结构封装为My Jpeg格式的自定义的编码与解码类型。压缩指令,可利用参数重设视频图片的质量和分辨率指数,Size代表恢复处理后的图片规格;解压缩指令,图片规格则由Size输入。
图11 Lib Jpeg库解码流程图
3. 6 视频图像数据在网络上的传输
因为单一的嵌入式板子上仅有有限的可利用资源库,所以若想在开发板上实现程序开发及调试功能是绝对不可能的。通常情况下,我们可以在宿主机上编译程序后,可根据不同需要通过连接串口线、网口线和JTAG接口线,下载程序到目标机上也就是开发板上,然后就可以进行交叉编译调试。
对于目标机及合宿主机之间的信息传输,则要考虑到二者相异的处理器工作原理,在宿主机上建立程序,程序识别可执行文件的方式是先编译再连接定位,最终构筑能与目标机匹配的编译环境。目标机与宿主机之间程序的移植方式可采用烧写到目标机中的方法,之后就可在目标机上进行调试工作。
目标机上的Bootloader启动后,输入/输出重新定位到串口或者网口,在主机上的控制台中输入命令,可以控制目标机。编写具有处理PC和终端之间在网络上的传输功能的Deal-send工作线程和一个接收功能的Deal-receive,用以辅助终端实现采集的视频图像的显示。网络传输通信流程图如图12所示。
嵌入式视频监控图像监控终端 视频图像监控PC
图12 网络传输通信流程
建立解码显示功能的工作线程于监控中心PC端,再启动Socket函数产生一个由Bind函数绑定端口的UDP数据报类型的套接字。最后通过Send to向监控终端发送服务请求, 由Recvfrom等待并判断是否有服务应答请求。设置定时发送直至结束通信。
3.7 视频图像实时显示
系统视频图像的显示是通过调用SDL库来实现的。SDL(Simple Direct Media Layer)是一个跨平台且开源的多媒体库,可用来对多媒体应用程序进行开发,而且能用于商业途径,它支持主流的操作系统,包括Windows CE、Linux和Windows。SDL所使用的3D图形接口是OpenGL,同时还支持对键盘、声音、2D图像和鼠标等的底层处理。
在使用SDL库之前,需要调用SDL_Init( )函数对SDL库进行初始化,通过调用SDL_SetVideoMode( )函数用来设置视频显示模式,这之间涵盖对抓取图片的宽度与高度设置和每一相似像素所占位数值的设定[6]。所有准备工作完成以后再利用Readjpeg( )函数设置一定的参数值在缓冲区中实现视频流数据的映射并显示。若要利用此系统对远程的视频图像实现监控,则视频图像的显示可以利用QT完成。调用SDL库函数进行视频显示的流程图如图13所示。
图13 视频显示流程图
利用几个相关QT图形类再通过QImage、QPixmap和QLabel等相应的图形类实现实时显示视频图像和JPEG格式的图片保存。使用QT丰富的图形库做辅助,实现友好的图形用户界面的快速开发是不成问题的。
4. 系统测试与分析
对视频采集程序运行效率进行测试,测试过程中的CPU最高占有率为7.6%,平均占有率是4.0%,说明该系统运行效率较高。该系统经过调试后运行良好,采集图像清晰,硬件电路可靠,能很好地对特定环境进行实时视频监控。系统正常工作时的CPU占用率如图14所示。视频监控系统的视频访问模块主要用于对监控终端的访问,实现视频预览,同时也是其它一系列功能的前提。视频访问模块通过用户输入的摄像头名称、IP地址、端口信号实现对视频监控终端的访问。 基于ARM的视频监控系统设计+源程序+流程图(6):http://www.751com.cn/zidonghua/lunwen_1341.html