在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1400|回复: 0

基于DAVINCI的3G视频服务器的设计

[复制链接]
发表于 2009-9-29 11:26:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
摘要

视频编解码系统一般的实现可以采用DSP,ASIC专用芯片,FPGA可编程逻辑芯片,基于DSP处理器设计的系统具备易于升级,易于扩展等优点所以在视频系统设计中被大量采用。TI DAVINCI 6446处理器是TI公司最新的双核视频处理芯片,TI公司提供一种基于CODE ENGINEAPI机制封装了复杂的DSP的编解码接口,给ARM应用程序提供一种简单明了的系统调用来实现视频的处理,但是同时这种机制也存在一个问题,就是如果要对机制本身进行一些修改或者扩展,添加自定义的接口或者算法,需要开发者去深入了解复杂的code engine机制,成都宇鸿科技提出一种跳过code engine机制,直接使用coff文件加载双核中的dsp处理器,直接根据共享内存实现armDSP的通信。DSP直接运行一些开源的编解码算法比如XVID,或者T264。该方法具备算法移植简单,armdsp接口自定义,
系统框架非常简单的优点。本文提出的DAVINCI 开发系统开发的时候只需要CCS开发工具和montvistalinux arm编译环境,整个产品开发可以不需要仿真器的参与。

实现:
1DSP的手动加载实现   DAVINCIN 6446双核处理器出来之前的DM642或者不含armdavinci DM6437芯片都是可以通过PCI HPI接口进行DSP程序的加载的,首先开发者使用CCS工具生成目标coff文件,通过TI提供的BIN文件转换工具转换成二进制的加载文件。加载程序DSPboot读取该文件,把文件中的每一个程序段根据相应的加载地址加载到DSP的内存空间或者L2RAM,最后把处于RESET状态的dsp 恢复运行,DSP从入口地址开始运行。
Dsp加载的流程如下:

1: 使用CCS工具编译和生成out文件
2:使用TI提供的out文件到bin文件的转换工具转换成加载工具识别的bin文件
3:将bin文件放在开发平台的文件系统中,可以通过TFTP/ftp/nfs或者u盘等多种方式进行。
4:运行DSPboot程序加载dsp运行程序
5:运行dspdebug程序显示dsp的调试打印信息,根据这些信息进行DSP端代码的调试,
DSP的优化等等。

2:视频编码算法的移植本文以XVIDDAVINCI 6446上的移植为例子,展示如何用CCS编译生成在DSP上的可执行代码。
1:首先新建一个CCS工程,并且把所有的XVIDc源码文件拷贝到工程的文件夹下面
编译的时候有几个问题:

2:没有configure文件,需要用户手动在portb.h中加入了以下的定义:
#define ARCH_IS_GENERIC
#define ARCH_IS_32BIT

#define ARCH_IS_LITTLE_ENDIAN
3ccs不允许数组初始化的时候用变量,改变一下数组的代码编写方式编译通过。
4:很多函数没有定义,是c标准库,目前加的是 rts6400_eh.lib

按照上述步骤编译XVID
接下来就是编写系统的内存分布CMD文件,可以参考tiexample目录下的CMD文件编写,在刚开始的时候可以直接把所有的段都映射到DDR内存里面。
3:视频编码算法的优化有关xvid或者T264等开源软件的优化,网络上已经有很多资料,这里不多说,主要原则有以下几点:
1:对XVID 的一些针对PC的特性进行裁减,使之适合嵌入式编码器。
2:对xvid的代码进行线性汇编优化,比如核心的DCT IDCT运算,计算运动向量的SAD计算函数。
3:充分利用DSPEDMA技术,把当前dsp运算需要的数据搬移到运行速度快的L2Ram中,同时在后台用EDMA准备下次DSP运算所需要的数据,这样时钟让dsp核心在CACHE中找到可以使用的内存,大大提供整个系统的并成程度。
Xvid不经过任何优化的情况下,一秒种大概只编译1/3帧左右,经过良好的优化,在一个DAVINCI 处理器上实现4cif或者1D1的实时编码是完全可行的。
4:基于共享内存的armdsp交互设计利用前面CCS生成的dsp二进制代码,就可以利用dspboot加载工具让dsp开始运行。接下来就是需要设计armdsp如何进行数据交互,要完成一个图像的编码,xvid需要几个参数:
1YUV原始数据的输入:
2:编码后的MPEG4数据的输出。
3:编码的参数控制。
整个系统实现主要由以下任务完成:
1:采集线程:
   负责从驱动视频AD techwell系统或者TI TVP系列,然后送入davincibt656接口,最后通过resize 得到所需要编码的分辨率,本文以CIF 352*288分辨率为例。
   最后采集线程把resize以后的原始输入数据写入一个固定的内存比如 0x83c00000;
2:dsp 编码线程:
Dsp运行一个死循环,每次循环开始先从0x83c00000地址处读大小为352*288*2大小的数据拷贝到自己的编码缓冲区,然后执行encode_main 函数完成一次图像的编码,然后把编码后的数据输出的固定内存比如0x83e00000;并且同时做上标记DSP已经完成一次编码。
3:ARM 端处理线程:
Arm只负责编码后的数据的网络发送或者系统存储,arm端判断去0x83e00000处的内存是否有dsp编码后的数据,如果有则通过网络发送到指定的客户端电脑去,由电脑实现视频的解码和显示。

5PC端客户端软件的实现:Pc端客户端软件的实现主要参考XVID的解码例子,最后把解码后的数据通过direct draw或者其他方式实现。
63G的实现利用成都宇鸿科技本身的3G驱动技术,实现在davinci上的3G上网卡的驱动,同时配合VPN可以实现在外网通过IP访问内置在视频服务器上的web对路由器进行设置和状态查询,同时可设置基于时间的定时拨号机制,实现7*24小时的无人值守工作环境。

该开发平台由成都宇鸿科技提供,
您只需要1999元即可以购置上述一套DSP开发环境,用于DSP程序的开发,XVID算法的优化。
适用于:
1:在校教师和研究生寻找一种低成本的DSP开发平台,用来进行快速的,算法教学,算法评估,算法测试,算法优化。
2:公司调研相关视频项目,需要在DSP上评估算法等等。

如果您有什么疑问,请直接联系我们
web: http://www.easycdma.cn
phone: 028-85287381,13208176277(),13548025254()
QQ453213674
1040715209

addr: 成都市郭家桥西街9号海德花苑C9A

product: http://www.easycdma.cn/

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-3-11 01:16 , Processed in 0.017267 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表