基于DM 368视频采集的数据流同步传输

2014-11-20 08:19李明磊唐小琦
电视技术 2014年7期
关键词:数据流线程编码

李明磊,唐小琦,宋 宝

(华中科技大学机械科学与工程学院,湖北武汉430074)

视频采集系统是数字图像获取的最基本手段,是进行数字图像处理、机器视觉、网络视频监控的前提[1]。传统的模拟视频已经很成熟,但是其管理不方便,最大的缺点是模拟视频清晰度远远不够[2]。传统的视频采集卡也比较昂贵[3]。在追求高清的时代下,第三代纯数字化视频采集系统应运而生[4]。数字化视频采集系统基于CCD或CMOS传感器,清晰度高,可以达到1 080p或更高,CMOS传感器性价比高,更适合做视频采集[5]。

一个基于网络的完整的视频采集系统一般都包含视频的采集、视频的大小重整、视频的压缩和编码以及视频的流化等模块,最后通过网络或者其他方式传输出去供后端使用。不同模块间的视频数据流的同步问题是保证视频流畅的关键技术,如果同步做的不好,则会出现后端得到的视频卡顿、不流畅等现象。本文基于DM368平台,设计了一个视频采集系统来实现网络视频监控,重点讨论了各个模块间的视频流同步问题。

1 软硬件实现

本系统的硬件实现如图1所示。

本系统采用基于ARM9的Davinci系列的DM368平台,其CPU频率可达到432 MHz,内置专用的视频协处理器、高清视频图像协处理器(HDVICP)和MPEG-4 JPEG协处理器(MJCP)。支持多种编码格式,如H.264,MPEG-4,MPEG-2,MJPEG等,支持1 080p 30帧的高清数据图像传输。内置硬件 H3A(Auto Focus,Auto Exposure,Auto White Balance)模块,用于统计图像信息,并把统计信息传递给上层的自动白平衡和自动曝光算法[6]。图像传感器采用CMOS传感器OV2715,分辨率高达1080 p。

系统的软件部分采用嵌入式操作系统Linux,其内核版本是2.6.18。软件系统框图如图2所示。

基于网络的视频采集系统的软件部分一般由视频采集、图像大小调整、图像处理、视频压缩编码和视频流化等部分组成。本文在实现了这些模块的基础上,重点讨论了各个模块间的视频数据同步问题。

2 视频采集的数据流分析

视频数据的硬件数据流程如图3所示。

根据硬件数据流,设计的软件数据流如图4所示。

OV2715图像传感器采集到Bayer模式的RAW图像数据后,直接输出数字信号,通过数据总线传递给DM368的ISIF模块,该模块主要完成数据的采集功能。ISIF通过内部总线把数据传递给IPIPE模块,该模块主要把RAW数据转换为YUV数据,并进行颜色校正、白平衡处理、自动曝光处理等功能。IPIPE中的RSZ即Resize模块,把输入的1 920×1 080的图像调整为所需要的图像像素大小。经过调整后的图像传递给HDVCP(高清视频图像协处理器)模块,该模块是由硬件完成H.264的编码工作。编码之后通过Stream模块进行流化,即把编码后的数据取出来存储到一个Circular Buffer中,供后续的流媒体服务器提取。

图1 硬件系统框图

图2 软件系统框图

图3 硬件数据流程图

图4 软件数据流程

通过建立 CaptureThr,Resizethr,EncodeThr,StreamThr,AewbThr,MainThr六大线程来完成上述工作,各个线程之间通过缓冲区进行数据交互。

以视频数据获取线程CaptureThr为例,其软件启动流程如图5所示。

图5 程序流程图

主进程启动时会传递视频参数如分辨率、帧率等信息。程序开始时,先解析这些信息。然后创建各个线程,最后创建主线程,此时各个线程都处于idle状态。待所有参数配置好后,利用消息机制运行主线程,主线程向各个线程发送运行的消息,各个线程正常循环运行。

主线程MainThr主要完成对各个线程的调度工作,CaptureThr线程完成对 Sensor,ISIF,IPIPE,H3A 等硬件模块的配置并把视频数据存到buffer1中,ResizeThr线程从此buffer1中读出数据并进行resize处理。处理后交给后续模块,依次类推。AewbThr主要通过获取H3A模块的数据信息进行自动白平衡和自动曝光的计算,并把得出的RGB增益、曝光时间等参数传递回硬件模块中。

3 视频流同步传输的实现

整个流程的难点在于各个模块间的数据同步,如果前后模块数据同步没做好,就会出现丢帧的现象,表现在视频上,视频会出现卡顿现象,画面不流畅。

本文采用循环Buffer的思路,以CaptureThr和ResizeThr两个模块为例,其具体原理如图6所示。

当Sensor的列同步信号VSYNC到来时,DM368会产生一个硬件中断,通知CaptureThr有数据到来,CaptureThr会把数据存到Buffer[i]中,同时通过Linux的完成量机制[7]置位Buffer的FullFlag,以此来通知等待的 ResizeThr线程有数据到来,ResizeThr读取完后会清除FullFlag。如果ResizeThr的数据还没有处理完,没有来得及读取数据,则CaptureThr会把下一次到来的数据存储到Buffer[i+1]中,这样就可以保证数据不会丢失。Buffer数组的大小根据系统需求的不同而各异。软件设计时,用一个宏定义Buffer_NUM来定义Buffer数组的大小,根据不同的数据处理量来选择不同的Buffer数组,从而满足系统的要求。

图6 循环buffer原理

4 实验效果

本视频采集系统结合后续的嵌入式流媒体服务器,可以直接通过网络观看前端的情况。实验表明,该图像采集系统图像清晰,色彩还原性好,画面流畅,无丢帧现象。图7是实验结果。

图7 图像效果

图7a是直接从Sensor输出的bayer模式的RAW数据,是从ISIF模块抓取出来的;图7b是经过插值之后把Bayer模式的raw格式转化为YUV格式后的图片,但是还没有进行颜色校正、滤波等的处理;图7c是经过各种图像处理并压缩编码流化后在IE中看到的图像效果;图7d是实验平台。由各个图可见,在图像处理之前明显有很多噪点等,处理后的图像清晰、平滑无噪点。

图8是程序运行过程中打印出的各个模块的帧率,由图可知,各个模块的帧率都很稳定,后面模块的帧率大于等于前面模块的帧率,所以数据流完全满足了系统要求。

图8 各个模块的帧率(截图)

5 结语

本文介绍了基于DM368平台的视频采集模块的软硬件设计,重点讨论了各个内部模块间的数据流同步技术。此测试环境还与网络环境等有关。实验表明,在良好网络环境下,该同步方法很好地保证了各个模块间的数据流畅传输,运行稳定可靠。

[1]杨建全,梁华,王友成.视频监控技术的发展与现状[J].现代电子技术,2006,29(21);84-88.

[2]肖自美,郑伟国,梁凡,等.多媒体通信技术的现状及发展[J].多媒体世界,1996(1):4-8.

[3]周祖荣,陈荣珍.基于S3C44B0微处理器视频采集系统的设计[J].科技信息,2010(3):56-57.

[4]陈远明,唐小琦,宋宝.基于DM36x平台的音视频网络通信的设计与实现[J].计算机应用,2011,31(2):20-22.

[5]康厚俊.CMOS图像传感器与CCD的比较及发展现状[J].才智,2008(9):239-240.

[6] TMS320DM36x digitalmedia system-on-chip(DMSoC)ARM subsystem user’s guide[EB/OL].[2013-02-09].http://focus.ti.com.cn/cn/lit/ug/sprufg5a/sprufg5a-pdf.

[7] JONATHAN C,ALESSANDRO R,GREG K.Linux device driver[M].3rd ed.USA:O’Reilly Media,Inc.,2005:114-116.

猜你喜欢
数据流线程编码
基于C#线程实验探究
基于SAR-SIFT和快速稀疏编码的合成孔径雷达图像配准
汽车维修数据流基础(上)
《全元诗》未编码疑难字考辨十五则
汽车维修数据流基础(下)
子带编码在图像压缩编码中的应用
基于国产化环境的线程池模型研究与实现
Genome and healthcare
浅谈linux多线程协作
基于数据流聚类的多目标跟踪算法