主页(http://www.pttcn.net):基于MPEG-4视频标准数字视频录像机的设计与实现(2) 显示开机画面,其主要通过AT2042的JPEG解码功能来实现。首先配置AT2042的JPEG解码功能,将要显示图像先以头文件的形式添加到程序中,当需要显示时再将图像数据发送给AT2042。 2.2 Linux系统的配置及设备驱动程序的编写 系设备驱动程序主要完成以下的功能: AT2042设备驱动子模块系统调用是操作系统内核和上层应用程序之间的接口,AT2042设备驱动子模块是操作系统内核和AT2042硬件设备之间的接口。操作系统内核向AT2042设备驱动子模块提供内核API和其他的内核支持。AT2042设备驱动子模块为上层应用程序屏蔽了AT2042硬件的细节,这样在应用程序看来,AT2042硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对AT2042硬件设备进行操作。AT2042设备驱动子模块作为系统内核的一部分,主要完成对AT2042的初始化、编解码数据的读写、以及编解码功能参数的设置。包含的功能函数主要有模块入口函数、设备操作函数集合和中断服务程序等。 2.3 数字视频录像机应用软件的设计与实现 OSD层支持16色的调色板。由于AT2042自身没有相应的ROM存储OSD所要显示的图片及文字数据,故在利用OSD功能来显示图片或文字时,首先要将需显示的图片或文字数据加载到AT2042的SDRAM中,然后调用显示功能将图片或文字显示在OSD层上。 这个功能的实现过程中主要调用以下2个函数: 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)将编码后的视频文件拷贝到PC机上,应用Media Player、暴风音影和风雷音影等视频播放软件对编码结果进行测试,同时可以对比解码播放的效果。因为本系统中视频文件是以PES流形式保存到储存介质。PES满足ISO13818标准,所以PC平台上的普通视频播放器都能播放该文件。图12是用风雷音影播放器对编码结果进行解码播放的截图。 由图可以看出,解码出的视频文件是720X576像素点,解码播放的速率为25.59 f/s。画面没有出现失真现象,没有明显的块效应。由表1中的数据可得,在使用AT2042对静止图像编码时,可实现接近100:1的压缩比,在对动态画面进行编码时,可以实现40:1的压缩比。 4 结 语 (中国集群通信网 | 责任编辑:陈晓亮) |