APP下载

基于JPEG硬编码的嵌入式无线图像传输处理终端

2013-10-15沈龙梅张立文国珊珊宋占伟

吉林大学学报(信息科学版) 2013年4期
关键词:缓冲区解码级别

沈龙梅, 张立文, 国珊珊, 宋占伟

(吉林大学 电子科学与工程学院, 长春 130012)

0 引 言

当前, 在大型的多媒体教室和国际会议会场中, 主要通过大屏幕上的幻灯片进行图像信息传输, 但由于距离等因素并不能清晰直观地获取数据, 且不能对图像内容进行自动接收存储, 不便于后续的复习及预览。如果终端之间能实时地进行图像信息传输, 则可保证更高的工作效率。为此, 笔者将嵌入式处理器与WiFi(Wireless Fidelity)技术相结合, 设计了在局域网中进行无线图像信息交互的终端。系统分为一个服务器端与多个客户端, 每个终端通过无线网卡建立通信网络, 服务器端通过摄像头采集图像数据, 压缩编码[1-4]后广播给其他客户端, 客户端能自动接收存储图像并显示在液晶屏上, 实现多个终端之间同步浏览图像信息, 即实现了信息实时传输, 方便终端之间协调工作, 充分发挥了嵌入式处理器的灵活高效、 低功耗、 高性价比优势。

该终端可应用于任何需要实时传输图像信息场合, 如公共交通系统、 汽车服务和机场安检等。

1 系统整体设计方案

图1 系统的应用框图

系统硬件采用ARM11芯片S3C6410作为核心处理器, 烧写了Linux 2.6.28操作系统, 移植了最新的Qt4.7图形界面开发库, 配以采集速度快、分辨率高的Camera模块, 加载了W541U V2.0 2.4 GHz无线网卡, 形成了一套稳定高速的硬件平台。软件上采用最新的JPEG(Joint Photographic Experts Group)硬件编解码配以PP(Post Processor)处理器支持硬件缩放架构, 能实现图像数据高速处理及任意格式和分辨率转换, 传输协议采用无连接传输速度快的UDP(User Datagram Protocol)数据报协议, 无线网卡模式为Ad-Hoc, 实现局域网下自动组网自主连接。系统应用框图如图1所示, 服务器与客户端硬件框图分别如图2和图3所示。

图2 服务器端硬件框图

图3 客户端硬件框图

2 无线图像传输处理系统软件设计

2.1 嵌入式Linux下的图像采集及JPEG硬编码过程

一个视频捕获驱动对输入视频流有两种工作模式[5]: Overlay模式和Preview模式。在Overlay模式下使用硬件叠加进行视频显示, 硬件函数将采集数据直接送入显示区域中, 不需要经过VGA(Video Graphics Array)卡, 不占用CPU(Center Processing Unit)资源, 处理速度更快。在preview模式下, 将捕获硬件采集数据送到系统内存中, 经过GDI(Graphics Device Interface)函数处理后再在显示区域中显示。 该模式占用CPU资源, 但能对原始数据进行编码处理。笔者采用两种模式相结合方式, 服务器端的摄像头模块通过打开不同设备节点/dev/video0和/dev/video1, 将采集数据分两路处理: 一路通过设置VIDIOC_OVERLAY启动Overlay模式直接将采集格式设置为RGB565显示在液晶屏上, 不需经过任何处理, 显示速度快, 实现本地预览; 另一路将采集模式设置为Preview, 通过JPEG硬编码[6]处理将数据压缩成JPEG图片形式, 其流程图如图4所示。

图4 JPEG硬编码流程图

Preview模式下将采集类型设为V4L2_BUF_TYPE_VIDEO_CAPTURE, 水平像素数为640, 竖直像素数为480, 每个像素格式设为YUYV, 即YCbCr4∶2∶2, 将采集数据读到缓冲区中, 开始编码。首先调用SsbSipJPEGEncodeInit()进行初始化, 会返回一个整型句柄, 然后调用SsbSipJPEGGetEncodeIntBuf()获取输入缓冲区的地址。需要传入两个参数: 一个是SsbSipJPEGEncodeInit()获得整型句柄; 另一个是指定要分配缓冲区的大小。一般为水平像素×竖直像素×每个像素所占字节数, 如16位色, 可设为640×480×2。该缓冲区用于存储摄像头获取YUYV格式数据, 对其进行编码, 在编码前需要设置一些参数, 调用SsbSipJPEGSetConfig()进行设置, JPEG_SET_SAMPING_MODE()用于设置编码格式, 将其设置为JPG_422格式。对应的是YCbCr4∶2∶2, JPEG_SET_ENCODE_WIDTH()用于设置编码图像水平像素数, JPEG_SET_ENCODE_HEIGHT用于设置编码图像竖直像素数, JPEG_SET_ENCODE_QUALITY用于设置图像压缩率。这个参数很重要, 不同压缩级别下获得的图片分辨率及大小也不相同, 压缩级别分为4个级别, 其中一级分辨率最高, 图像最大, 而太大图像不适合于网络传输, 经测试选择压缩级别2。

JPEG硬编码支持缩略图的生成, 缩略图最大分辨率为320×240像素, 笔者将其设为160×120像素。设置参数后, 调用SsbSipJPEGEncodeExe()开始编码, 编码时可在图片中加入Exif(Exchangeable Image File)头文件信息, 编码结束后调用SsbSipJPEGGetEncodeOutBuf()即可获取输出缓冲区地址; 调用fwrite(out_buf, 1, jpg_size, jpg_fp)函数将内容写入JPEG格式的图片中即可得到编码后图片, 其中jpg_fp为打开图片句柄; 最后需调用SsbSipJPEGEncodeDeInit()释放获取系统资源, 避免缓冲区占用, 造成系统阻塞。

2.2 UDP协议下图像数据广播传输

UDP是一种无连接传输协议, 每个数据报都是一个独立信息, 包括源地址和目的地址, 因此, 可在网络上任意传输。由于该终端中服务器需要以广播形式向所有客户端发送图片信息, 所以, 采用支持广播方式的UDP协议。由于UDP协议在传输过程中容易出现丢包现象, 笔者采用分包发送接收纠错机制[7], 将服务器端编码后的图像数据直接传输容易丢包, 将其分为多个UDP包发送, 每包大小为2 048 Byte。在客户端接收时首先检测包数是否从0开始, 若不是, 则舍弃这幅图片接收, 自动接收下一幅, 开始接收后对相邻的两个接收包的编号进行检测, 判断是否相差1, 如果不是, 则舍弃重新接收。

该终端不仅可以以UDP广播模式实现图像信息传输, 也可应用于图像信息一对一交互场合, 此时只需在传输时将模式设置为一对一即可, 通过多线程实现两种模式之间切换。

2.3 JPEG硬解码及PP处理图片

客户端接收压缩后的图片不能直接显示在RGB565格式的液晶屏上, 需要经过JPEG硬解码[8]及PP处理器处理, JPEG硬解码流程图如图5所示。首先调用SsbSipJPEGDecodeInit()初始化, 返回一个整型句柄, 然后调用SsbSipJPEGGetDecodeInBuf()获取输入缓冲区。这个函数包含两个参数: 1) 初始化后返回句柄; 2) 获取缓冲区的大小, 设置为接收的JPEG图片大小。该缓冲区用于存储将要解码的JPEG图片, 可将接收图片读到内存中, 然后调用memcpy()将其映射到获取这个缓冲区中即可。需要设置一些参数, 接收图片参数获得可调用SsbSipJPEGGetConfig()实现, 分别可获取图片宽度、 高度和格式。调用SsbSipJPEGSetConfig()实现, 调用SsbSipJPEGDecodeExe()开启解码, 解码后调用SsbSipJPEGGetDecodeOutBuf(handle, &streamSize)获取输出缓冲区地址, 存储解码后的数据, 格式为编码前格式, 即YCbYCr4∶2∶2, 不能直接显示在Framebuffer上,需要格式和大小转换, 笔者采用PP处理器实现。

PP是S3C6410中支持图像和视频缩放模块, 其工作原理如图6所示。首先在内存中开辟一个PP帧内存, 将待处理数据拷入该区域中, 对其进行缩放处理, 经过PP处理后数据能达到需要的分辨率及格式。分为两路: 一路为DMA(Direct Memory Access)模式, 能直接输出至显存中显示; 另一路为FIFO(First In First Out)模式发送到硬件队列中, 可输出至外围设备中, 如LCD(Liquid Crystal Display)液晶屏、 电视等。工作流程如下, 首先打开设备节点/dev/s3c-pp, 设置缩放前后参数, 包括分辨率、 位图类型及图片格式等。缩放前参数需要通过JPEG硬编码中的SsbSipJPEGGetConfig()函数获得, 缩放后参数自行定义。然后将获得这些参数存储在结构体pp_param中, 通过命令ioctl(pp_fd, S3C_PP_SET_PARAMS, &pp_param)设置参数, 获得PP转换所需内存空间, 用memcpy()函数将解码后数据拷贝到该内存中, 由系统转换后数据输出至液晶屏。所以输出直接采用DMA模式, 使用ioctl(pp_fd, S3C_PP_START)转换, 转换完成后图像数据直接显示在LCD液晶屏上, 释放系统内存。

图5 JPEG硬解码流程图 图6 PP工作原理图

3 终端总体性能测试

3.1 JPEG硬编码时间测试

JPEG硬编码时间测试如表1所示。

表1 JPEG硬编码时间测试

实验条件为终端以read方式打开摄像头后, 图像格式设置为YUYV4∶2∶2, 分辨率为640×480像素, 在不同压缩级别下, 每编码完成一幅图片后, 在系统终端SecureCRT中打印出时间, 所以可检测每秒钟编码完成多少幅JPEG格式图片, 共进行10组实验, 实验数据如表1所示。

由表1可知, 在级别1下, 每秒采集帧数最多, 平均每秒能采集14.5帧, 采集1帧所需时间为68.97 ms, 随着压缩级别的升高, 每秒采集帧数逐渐下降。

3.2 图片压缩质量测试

4个压缩级别下的图片如图7所示。

图7 4个压缩级别下的图片质量

摄像头输入格式设为YUYV, 分辨率为640×480像素, 拍摄同一画面, 测试在不同压缩级别下图片质量。由图7可知, 级别1下图片最清晰, 图片所占字节数最多, 级别2图片质量只比级别1亮度差点, 图片所占空间变小, 级别3和级别4亮度和清晰度都较差, 图像所占空间随级别的增加而变得越来越小。

3.3 JPEG硬解码及PP处理图片时间测试

JPEG硬解码及PP处理图片时间测试如表2所示。

表2 JPEG硬解码及PP缩放图片时间测试

实验条件与编码测试时相同, 可以看出, 解码所需时间受压缩级别影响不大, 平均每帧解码时间为10 ms。

3.4 无线传输时间测试

由于WiFi的传输距离有限, 随着距离的增加信号能量减弱, 传输速率下降, 所以需要测试传输速率与传输距离之间关系。由于本终端主要应用于大型多媒体教室与国际会议会场, 所以测试距离范围选择10~200 m, 经测试在压缩级别2下平均一幅图片大小为40 kByte, 所以测试随着距离不同传输40 kByte的图像数据所需时间, 地点为大型多媒体教室, 传输模式为UDP广播, 测试结果如表3所示。

表3 传输速率与传输距离关系

从表1可看出, 随着距离增加传输速率逐渐下降, 在200 m以下, 平均每秒传输9.7帧, 即在多媒体教学中教室中最远距离每秒仍可接收到10帧的图像数据, 能满足人眼对图像需求。

3.5 JPEG硬编解码与现有Libjpeg库软编解码比较

在6410支持JPEG硬编解码前, 针对JPEG格式图片处理采用Libjpeg库软编解码[9]方案, Libjpeg是一用C语言编写的库[10], 能将数据压缩成JPEG形式并可对其解码。用同样实验条件测试软编解码时间, 数据如表4和表5所示。

表4 Libjpeg库软编码时间测试

表5 Libjpeg库软解码时间测试

在同样YUYV格式及640×480像素分辨率下, 4个压缩级别平均每秒得到的帧数分别为1.6,1.5,1.6,1,7, 即最快的软编码每帧时间为588.24 ms, 与硬编码的68.97 ms相比, 编码时间相差9倍。同理, 软解码4个压缩级别图片, 每秒帧数分别为3.6,4.7,4.6,4.5, 最快解码时间为212.77 ms, 是硬解码的两倍多, 由此可见, 采用JPEG硬件编解码在图像处理速度及清晰度方面都有很大提升。在图像压缩级别选取上, 既要考虑图像压缩质量, 又要保证图像大小适合网络传输。经测试, 选择压缩级别2, 该级别下图像质量清晰, 大小更适合于分包在UDP网络协议下传输。

3 结 语

针对大型多媒体教室、 国际会议会场、 机场、 码头和公交交通系统等需要实时图像信息传输场所, 将嵌入式处理器与WiFi模块及图像采集模块相结合, 并引入了JPEG硬件编解码及PP处理技术, 设计了基于JPEG硬件编解码的嵌入式无线图像处理终端。测试运行效果良好, 图像编解码速度和无线图像传输速度优良, 达到了终端功能及性能的实际要求。

参考文献:

[1] WANG Xu-guo, YU Shuang-lin. Development of the Video Capture and Process System Based on ARM [J]. Information Technology, 2011(9): 121-124.

[2]HUANG Xing, WANG Xiao-tao. A Design and Realization of Wireless Image Transmission of Image Monitoring System Based on Embedded Linux [J]. Information Research, 2011, 37(1): 42-46.

[3]DEEPALI JAVALE, BHARATI DIXIT. Performance Evaluation of Wireless Image Transmission: An Approach Using Embedded System [C]∥2012 12thInternational Conference on Hybrid Intelligent Systems(HIS). Pune: IEEE, 2012: 125-130.

[4]LIU Yan-xia, CAO Li-ting, SONG Yu-qiu. Application of WiFi Communication in Mobile Monitor [C]∥Proceedings-2009 Inter-National Symposium on Information Engineering and Electronic Commerce. Washington, DC, USA: IEEE, 2009: 313-317.

[5]王旭阳. 基于ARM的无线视频监控系统的设计与实现 [D]. 北京: 北京邮电大学计算机学院, 2012.

WANG Xu-yang. Design and Implementation of Wireless Video Surveillance System Based on ARM [D]. Beijing: College of Computer, Beijing University of Posts and Telecommunications, 2012.

[6]吴爱军, 许雪梅. 基于S3C2440A的嵌入式无线实时图像传输系统 [J]. 计算机系统应用, 2010, 19(1): 18-21.

WU Ai-jun, XU Xue-mei. Embedded Real-Time Wireless Image Transmission System Based on S3C2440A [J]. Computer Systems & Applications, 2010, 19(1): 18-21.

[7]孟祥磊, 干莽, 张婷, 等. 基于WIFI的嵌入式目标定位与检视终端 [J]. 吉林大学学报: 信息科学版, 2012, 30(5): 480-486.

MENG Xiang-lei, GAN Mang, ZHANG Ting, et al. WIFI-Based Embedded Target Location and View Terminal [J]. Journal of Jilin University: Information Science Edition, 2012, 30(5): 480-486.

[8]刘超. 图像捕捉、 发送单元的研发 [D]. 长春: 吉林大学电子科学与工程学院, 2010.

LIU Chao. Research and Development of Digital Image Capture and Sending Unit [D]. Changchun: College of Electronic Science and Engineering, Jilin University, 2010.

[9]田欣. 基于S3C6410的数字多媒体无线局域网接收端的研发 [D]. 长春: 吉林大学电子科学与工程学院, 2010.

TIAN Xin. R&D of S3C2440-Based Digital Wireless Local Area Network Multimedia Receiver [D]. Changchun: College of Electronic Science and Engineering, Jilin University, 2010.

[10]刘阳阳, 申铉京, 王一棋, 等. 基于ARM的智能监控系统的设计与实现 [J]. 吉林大学学报: 信息科学版, 2011, 29(2): 158-163.

LIU Yang-yang, SHEN Xuan-jing, WANG Yi-qi, et al. Design and Implementation of Embedded Intelligent Monitor System Based on ARM [J]. Journal of Jilin University: Information Science Edition, 2011, 29(2): 158-163.

猜你喜欢

缓冲区解码级别
《解码万吨站》
解码eUCP2.0
NAD C368解码/放大器一体机
Quad(国都)Vena解码/放大器一体机
级别分明
迈向UHD HDR的“水晶” 十万元级别的SIM2 CRYSTAL4 UHD
新年导购手册之两万元以下级别好物推荐
基于ARC的闪存数据库缓冲区算法①
你是什么级别的
一类装配支线缓冲区配置的两阶段求解方法研究