内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体






基于MPEG-4视频标准数字视频录像机的设计与实现(2)

时间:2009-09-10 来源:消费电子设计 作者:小甜甜 点击:

    显示开机画面,其主要通过AT2042的JPEG解码功能来实现。首先配置AT2042的JPEG解码功能,将要显示图像先以头文件的形式添加到程序中,当需要显示时再将图像数据发送给AT2042。

2.2 Linux系统的配置及设备驱动程序的编写
    本系统使用的是Linux2.4.18内核,在内核配置中需增加以下几个内容:由于本系统中要实现对视频编码数据的存储,故要添加内核配置中USB support选项中的USB Mass storage support;在调试时需要通过以太网来烧些程序,故内核配置时需添加LAN91C111网卡驱动,方法为在NetWork device support选项下选择SMC91111 support,同时内核要支持各种文件系统,需在File system选项下进行相应配置。

    系设备驱动程序主要完成以下的功能:

    AT2042设备驱动子模块系统调用是操作系统内核和上层应用程序之间的接口,AT2042设备驱动子模块是操作系统内核和AT2042硬件设备之间的接口。操作系统内核向AT2042设备驱动子模块提供内核API和其他的内核支持。AT2042设备驱动子模块为上层应用程序屏蔽了AT2042硬件的细节,这样在应用程序看来,AT2042硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对AT2042硬件设备进行操作。AT2042设备驱动子模块作为系统内核的一部分,主要完成对AT2042的初始化、编解码数据的读写、以及编解码功能参数的设置。包含的功能函数主要有模块入口函数、设备操作函数集合和中断服务程序等。

2.3 数字视频录像机应用软件的设计与实现
    (1)界面显示与菜单功能的设计与实现。界面和菜单的显示是通过AT2042的OSD(on Screen Display)功能来实现的,AT2042共有3个显示层面,分别为底层是背景层、中间是回放层,顶层是OSD层。

    OSD层支持16色的调色板。由于AT2042自身没有相应的ROM存储OSD所要显示的图片及文字数据,故在利用OSD功能来显示图片或文字时,首先要将需显示的图片或文字数据加载到AT2042的SDRAM中,然后调用显示功能将图片或文字显示在OSD层上。

这个功能的实现过程中主要调用以下2个函数:
    void at2042_load_font(uns8 * font_data,uns32font_data_size)该函数的主要功能是把要显示的数据加载到AT2042的SDRAM中,同时设置显示位置,即垂直、水平像素点的位置。

    void osd_on_off(uns8 temp)该函数的功能是打开或关闭OSD模式。

(2)MPEG-4视频编码实现。该功能主要利用AT2042来实现。首先,配置相应的编码寄存器,例如编码模式、编码像素点、编码帧率及设置编码流格式(PES,PS,TS)等。本系统中采用MPEG-4模式、720X576、每秒25帧及生成PES流来对视频数据进行编码。

AT2042视频编码的流程如图9所示。

    实现这一功能主要通过对以下几个函数的调用:

  void set_encoder_parameter(uns16 hsize,uns16vsize,uns8 rate,uns8 mode)该函数用来设置编码参数;

  void video_encoder_start(uns8 mode)该函数用来启动AT2042的编码功能;

  void video_encoder_stop(uns8 mode)该函数用来关闭AT2042的编码功能;

    0 0 (请您对文章做出评价)void encoding_stream_read(uns8 * data,uns32 data_size)该函数实现将编码数据从MuxFIFO中读出。

(3)解码功能实现。实现的具体流程如图10所示。
    实现这些功能主要通过对以下几个函数的调用:

  void set_decoder_parameter(uns16 hsize,uns16 vsize,uns8 rate,uns8 mode)该函数用来设置解码参数;

  void video_decoder_start(uns8 mode)该函数用来启动AT2042的解码功能;

  void video_decoder_stop(uns8 mode)该函数用来关闭AT2042的解码功能;

  void get_file_length(const char * file_name)该函数用来获取文件的长度;

  void video_replay(const char * file_name,uns8mode)该函主要实现对视频文件的播放控制,mode控制播放模式(暂停、快进、快退)。

3 测试结果
实验结果进行测试,可以采用2套方案来完成。
    (1)使用自行设计的硬件平台,在该平台上完成对视频编解码的测试。图11为在本系统平台上对编码数据的解码播放截图。

    (2)将编码后的视频文件拷贝到PC机上,应用Media Player、暴风音影和风雷音影等视频播放软件对编码结果进行测试,同时可以对比解码播放的效果。因为本系统中视频文件是以PES流形式保存到储存介质。PES满足ISO13818标准,所以PC平台上的普通视频播放器都能播放该文件。图12是用风雷音影播放器对编码结果进行解码播放的截图。

    由图可以看出,解码出的视频文件是720X576像素点,解码播放的速率为25.59 f/s。画面没有出现失真现象,没有明显的块效应。由表1中的数据可得,在使用AT2042对静止图像编码时,可实现接近100:1的压缩比,在对动态画面进行编码时,可以实现40:1的压缩比。

4 结 语
    本文详细介绍基于专用视频编解码芯片AT2042的数字视频录像机系统的硬件设计和软件开发流程。该系统已实现对视频数据的编码和解码,同时实现了MPEG-4/MPEG-2/MPEG-1 H.263视频标准,并已作为成型产品推向市场。


(中国集群通信网 | 责任编辑:陈晓亮)

中国集群通信网,国内首家集群通信专业网站。

Copyright © PttCn.Net, All Rights Reserved.   

联系我们 联系我们 中国集群通信网 对讲机学堂 对讲机世界