APP下载

基于S3C6410的USB视频压缩、回放系统

2014-07-02刘仁贵胡亮兵侯成英王庭良侯镇锋

电视技术 2014年13期
关键词:解码编码器摄像头

刘仁贵,胡亮兵,侯成英,王庭良,侯镇锋

(1.西北工业大学明德学院,陕西西安710124;2.南京电子技术研究所,江苏南京210039; 3.西安博厚电子科技有限公司,陕西西安710075)

基于S3C6410的USB视频压缩、回放系统

刘仁贵1,胡亮兵2,侯成英3,王庭良1,侯镇锋1

(1.西北工业大学明德学院,陕西西安710124;2.南京电子技术研究所,江苏南京210039; 3.西安博厚电子科技有限公司,陕西西安710075)

阐述了在嵌入式Linux下,将市面上常见的USB摄像头作为视频输入设备,将其输出的JPEG格式图像数据通过S3C6410内部的硬件H.264编码器压缩成视频文件的方法,并基于此方法,设计了一个基于S3C6410和USB摄像头的视频采集、压缩、存储系统,采用了高级语言与汇编语言相结合的方法,在USB摄像头每秒最快输出15帧640×480图像的情况下,系统整体可以达到13 f/s(帧/秒)的录制效果。该系统具有取材方便、成本低、存储时间长、实用性强等特点。

嵌入式系统;USB摄像头;JPEG;H.264

JPEG作为一种图像压缩标准,广泛应用于网络、数码等领域。目前市面上常见的USB PC Camera的输出即为JPEG格式的图像数据,由于JPEG的压缩率相对较低,其图像质量较高,但占用存储空间较大,不适合应用于对存储空间敏感的系统中。相对于JPEG和其他图像、视频压缩标准而言,H.264标准是由视频联合工作组提出的新一代数字视频编码标准,H.264的最大特点是采用帧内压缩和帧间压缩,具有很高的压缩率,在同等图像质量的条件下,H.264的压缩率是MPEG-2的2倍以上,是MPEG-4的1.5~2倍,因此,在同等带宽下,H.264能提供更高的图像质量,成为目前主流压缩标准,广泛应用于流媒体、安防、管道探伤等领域[1]。

本文阐述了在Linux2.6.28下,以中星微ZC0301PLH为控制器的USB PC Camera作为视频输入设备,利用S3C6410的JPEG硬件解码器和H.264硬件编码器,将摄像头输出的640×480大小的JPEG图像数据解码后再压缩成视频文件的方法。

1 原理概述

YUV420格式的图像数据有两种存储类型,一种是打包的,即Y,U,V分量是交错存储,也就是将一个像素的所有分量连续存放到一起。另一种是平面的,即YUV420P。在平面的YUV420中,Y,U,V三个分量是分片存储的,形如YYYY…UU…VV…。

S3C6410的H.264硬件编码器要求输入的图像数据必须是YUV420P格式的,以ZC0301PLH为控制器的USB PCCamera输出的是JPEG格式的图像数据,而JPEG图像数据不能直接送入S3C6410的H.264编码器,因此要把JPEG图像数据解码并转换成YUV420P图像数据。这一过程可以用软件实现,但时间开销大,速度慢。由于S3C6410内部集成了JPEG硬件解码器,可以将JPEG图像数据解码成打包的 YUV422数据,因此可以利用S3C6410内部的JPEG硬件解码器先把USB PC Camera输出的JPEG图像快速解码成打包的YUV422,然后将打包的YUV422数据转换成平面的YUV420P数据再送入S3C6410内部的H.264硬件编码器进行压缩编码,最后将压缩后的视频文件存入SD卡或者U盘等存储设备,即可完成视频的录制工作。系统的工作流程如图1所示。

图1 系统流程

2 系统硬件

基于USB PC Camera的视频压缩系统[2]主要由USB PC Camera和S3C6410核心功能模块组成,S3C6410核心功能模块通过USB接口读取图像数据,并完成图像数据解码、转换、压缩和存储功能,同时,PC机通过USB读取U盘或者SD卡中的视频文件。系统硬件原理框图如图2所示。

图2 系统原理框图

3 视频采集

V4L2(Video For Linux Two)是Linux内核中关于音、视频设备的内核驱动,提供给应用程序访问音、视频设备的通用接口,在本系统中,采用V4L2接口控制USB摄像头[3],由于需要连续、快速采集图像,因此使用mmap(内存映射)方式读取摄像头数据,这样可以大大提高了图像数据读取的效率。视频采集流程如图3所示。

在使用V4L2前,需要正确配置内核,添加V4L2驱动[4],其配置过程如下:

内核配置完成后,保存退出,编译并重新烧写内核。驱动添加成功后,应用程序即可通过V4L2驱动提供的接口函数控制USB摄像头,读取其输出的JPEG图像数据,完成图像数据的采集工作。

4 JPEG解码

图像数据采集完成后,即要对采集到的JPEG图像数据解码。图像数据解码由S3C6410内部的JPEG硬件解码器完成。三星公司提供了JPEG解码的API函数[5],通过API函数,应用程序可以方便、快速地完成JPEG图像数据到YUV422数据的解码。三星公司提供的JPEG解码函数及功能如下(见图4):

图3 视频采集流程图

SsbSipJPEGDecodeInit():JPEG解码初始化,用于初始化变量和分配内存空间;

SsbSipJPEGGetDecodeInBuf(handle,size):获取解码输入缓存地址和大小,handle为SsbSipJPEGDecodeInit()函数的返回值,size为要解码的图像的高和宽的乘积;

SsbSipJPEGDecodeExe():执行解码;

SsbSipJPEGGetDecodeOutBuf():获取解码输出缓存内存地址;

SsbSipJPEGDecodeDeInit():释放解码资源。

5 YUV422到YUV420P的变换

JPEG图像数据经过S3C6410硬件解码器解码后得到的是YUYV格式的YUV422数据,Y,U,V分量呈交错排列,每两个Y共用一组UV分量,Y,U,V分量的比例为4∶2∶2,其具体排列如图5所示。

网络虽然是一个虚拟世界,但网络传播的具体表现符合狂欢化的本质特征。人们可以通过语言文字和视觉影像两种传播手段来审视网络传播的大众狂欢。

图4 JPEG解码流程图

图5 YUV422数据格式

YUV420并不是没有V分量。在Y分量上,YUV420在每个像素上都保留一个Y分量,但并不是每行都取U和V分量,而是在一行只取U分量,在其紧接着的下一行只取V分量,再在下一行只取U分量,如此重复,即4∶2∶0,4∶0∶2,4∶2∶0,4∶0∶2,……,因此,统称为YUV420。YUV420与YUV422相比,两者Y分量的总数相同,但U、V分量,YUV420只有YUV422的一半。

YUV420P属于YUV420,为平面的YUV420,Y,U,V分量分片存放,即先存储所有的Y分量,然后存储所有的U分量,再存储所有的V分量,YUV420P的数据格式如图6所示。

图6 YUV420P数据格式

由上述可知,要将YUV422数据转换成YUV420P数据,最简单的办法就是保留所有Y分量,隔行抽取U,V分量(如图5圆圈标示的U,V分量),并分片存储,即可完成数据的转换。

在进行数据转换时,由于YUV422数据的Y,U,V分量是交叉排列,需要对YUV422数据逐字节提取。对于640×480大小的图像,其 YUV422格式数据大小为614 400(640×480×2)字节,若用高级语言实现逐字节提取,将消耗CPU大量的时间。笔者在S3C6410平台上,用高级语言实现YUV422到YUV420P转换时,完成一次转换,平均耗时100 ms左右,整个系统只能达到6 f/s(帧/秒)的的录制效果,效果很差。

汇编语言相对于高级语言来说,具有高效性。本系统中的YUV422数据到YUV420P数据转换采用了汇编语言来实现,将其写成子程序,在高级语言中遵守TPCS (ARM Thumb Procedure Call Standard)规则调用该汇编子程序,充分发挥了两种语言的优势。

YUV422数据到YUV420P数据转换可以先将Y,U,V分量全部提取出来,然后隔行抽取U和V,提取Y,U,V分量的汇编语言代码如下:

笔者将YUV422数据到YUV420P数据转换过程改用汇编语言实现后,其效率极大提高,仅耗时约20 ms左右,系统整体达到13 f/s的录制效果,效果较好。

6 视频压缩和存储

1)SsbSipH264EncodeInit(width,height,frame_rate,bitrate,gop_num):该函数用于初始化H.264硬件编码器。width表示图像的宽度,height表示图像的高度,frame_rate表示帧频,bitrate表示比特率或码率,gop_num表示两个相离关键帧之间最多包含多少个帧。

2)SsbSipH264EncodeGetInBuf(handle,0):该函数用于获取视频的输入地址,返回值为视频流的输入首地址。通过memcpy(p_inbuf,yuv_buf,frame_size)函数即可把需要编码的视频流数据输入到编码器。其中p_inbuf机即为SsbSipH264EncodeGetInBuf(handle,0)函数的返回值,yuv_buf为要编码的YUV420P数据,frame_size一帧图像数据的大小。

3)SsbSipH264EncodeExe(handle):执行H.264编码。

4)SsbSipH264EncodeGetOutBuf(handle,size):输出已编码好的数据。返回值为已编码图像的首地址;size表示已编码图像的大小。

5)SsbSipH264EncodeDeInit(handle):关闭硬编码设备。

S3C6410硬件H.264编码过程如图7所示。

图7 H.264硬件编码流程

7 系统测试

图8为晚上用30W像素普通USB摄像头作为视频输入设备的测试效果。

图8 压缩后视频文件回放效果

8 总结

系统在对JPEG图像解码和对视频数据进行H.264编码时,采用了硬件解码器和硬件编码器,大大地提高了解、编码的速度,同时,在对需要进行大量数据处理、耗时多的YUV422转YUV420P过程,则由汇编语言实现,极大地提高了程序的运行效率,在USB摄像头每秒最快输出15帧的情况下,整体可以达到13 f/s的效果,视频播放较为流畅,且图像清晰。在该平台的基础上,可以搭建多种低成本的应用,具有较强的实用价值,目前该设备已经成功应用于管道成像探伤检测系统中。

[1]郑世宝.智能视频监控技术与应用[J].电视技术,2009,33(1): 94-96.

[2]张晓东,李秀娟,张杰.基于ARM的嵌入式远程监控系统设计[J].现代电子技术,2008,31(6):22-23.

[3]张玉萍,邹澎.基于Qt/Embedded视频采集方案的设计与实现[J].电视技术,2012,36(23):65-68.

[4]宋宝华.Linux设备驱动开发详解[M].北京:人民邮电出版社,2006.

[5]S3C6400/6410 JPEG encoder/decoder API specification(Linux)(REV 3.10)[EB/OL].[2013-10-29].http://www.samsungsemi.com/.

[6]API document S3C6400/6410 multi-format codec(REV 3.20)[EB/ OL].[2013-10-29].http://www.samsungsemi.com/.

USB Video Com pression and Review System Based on S3C6410

LIU Rengui1,HU Liangbing2,HOU Chengying3,WANG Tingliang1,HOU Zhenfeng1
(1.Ming De College of NWPU,Xi’an 710124,China;2.Nanjing Research Institute of Electronics Technology,Nanjing 210039,China; 3.XEVET Co.,Ltd.,Xi’an 710175,China)

A newmethod on how to build a usefuland portable video compression and review system is proposed in the paper.The embedded video system,based on the S3C6410,uses the USB PC Camera as the video input device,and the JPEG image from the USB PC Camera is transformed to H.264 video files by the inner JPEG Decoder and the H.264 encoder of the S3C6410,and the video files can be stored in SD card or USBmass storage device. Assemble language is used in the system tomake up theweakness of the high-level language.The Experimental results show that the system can achieve 13 f/s@640×480 image quality as themaximum frame number of the USB PC Camera output is15 f/s.The video files can be reviewed by PC,and the video is clear and stable with strong practical and broad application prospects.

embedded system;USB PC camera;JPEG;H.264

TP316.89

B

刘仁贵(1983— ),学士,助理实验师,研究方向为嵌入式系统软、硬件设计;

胡亮兵(1982— ),博士,电讯总体工程师,研究方向为雷达信号与信息处理;

侯成英(1984— ),女,学士,工程师,研究方向为电路设计;

王庭良(1979— ),学士,助理研究员,研究方向为通信与信息系统;

侯镇锋(1986— ),学士,研究实习员,研究方向为网络及信息安全。

�� 雯

2013-12-17

【本文献信息】刘仁贵,胡亮兵,侯成英,等.基于S3C6410的USB视频压缩、回放系统[J].电视技术,2014,38(13).

猜你喜欢

解码编码器摄像头
浙江首试公路非现场执法新型摄像头
融合CNN和Transformer编码器的变声语音鉴别与还原
《解码万吨站》
摄像头连接器可提供360°视角图像
解码eUCP2.0
NAD C368解码/放大器一体机
Quad(国都)Vena解码/放大器一体机
基于FPGA的同步机轴角编码器
应用旋转磁场编码器实现角度测量
奔驰360°摄像头系统介绍