基于TMS320DM642DSP的H264编码器的优化与设计摘要.pptVIP

基于TMS320DM642DSP的H264编码器的优化与设计摘要.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
摘 要 背景介绍以及研究现状 前人的工作基础 所做主要工作与贡献 课题优化的结果 总结与展望 背 景 介 绍 H.264-最新视频压缩标准 压缩率高,网络适配性好 复杂度高,实时性不高,需要进行优化 TMS320DM642 主频600MHz 有专用图像处理指令,适合音视频开发 研 究 现 状 基于PC机 开发费用低,周期短,可使用现成的软件包 非实时操作系统,易受病毒攻击,成本昂贵 基于DSP 软件代码小、高度自动化、响应速度快,适合于实时和多任务的嵌入式应用 DSP芯片价格下降 研 究 现 状(续) 基于FPGA 专用性比较强 开发代价比较大,通用性不如DSP开发强 经过综合考虑,选择基于TMS320DM642专 用媒体处理器来实现H.264编码器。 前 人 工 作 主要研究基于PC下的X264编码技术 对X264中的运动搜索算法进行了研究 分析了X264的帧内预测算法,提出了一种快速的帧内预测算法 对X264帧间预测模式选择算法进行改进优化 主 要 工 作 目标 移植X264代码到DSP平台,实现基线配置(baseline)下CIF格式的实时编码 主要工作: 编译通过X264 项目级优化 C语言级优化 汇编级优化 存储器优化 编 译 通 过 库文件的改动 VC与CCS支持的库函数不同,如malloc,free等 变量的存取方式调整 .text 存放可执行代码 .cinit 存放初始化全局变量和静态变量表 .bss 存放静态和全局变量 .far 用于存放声明为far调用的全局和局部变量 .stack 存放系统栈 .system 存放动态存储空间分配堆 编译通过(续) 调整数据类型 CCS中1ong 表示40位长整型,VC中long和int都表示32位整型 本文把long直接改为整型int 移 植 结 果 移 植 结 果 项目级优化 选择编译选项(build options)中优化参数 -gp:装载时自动使能函数级分析 -o3:对文件级别进行最强的优化 -pm:联合所有源程序文件进行程序级优化 -op0:说明有外部变量引用和函数调用 -mt:源程序未使用混迭技术 C语言级优化 删除冗余代码 删除了解码部分,以及配置以外的功能模块(包括cabac.c和eval.c等) 用于跟踪的log函数,出错警告的assert信息,打印显示的printf函数浪费计算时间和存储空间 DM642是定点DSP,删除浮点运算 很多没必要的判断和跳转 C语言级优化 (续) 进一步调整数据类型 循环计数器使用int类型,避免使用short类型 定点乘法输入,使用short类型。int*int需5个时钟周期,short*short运算则只需1个时钟周期 始终保持不变的变量声明为const,对指针变量使用restrict关键字,可以明显的去除相关性 内联函数(intrinsics) 内联函数是直接与汇编指令映射的在线函数,用前下划线“_”特殊标识,其使用方法与调用函数一样,也可以使用C变量。 _add2(src1,src2) _avg2(src1,src2) ... 数 据 打 包 数据打包 DM642的寄存器为32bit,视频图像中像素用8bit表示 可一次访问4个或者8个bit数据,然后使用相应指令 举例 for( x = 0; x 16; x++ ) dst[x] = ( src1[x] + src2[x] + 1 ) 1; 可将上述的循环改写为: #pragma MUST_ITERATE(4,4,4) for( x = 0; x 16; x += 4 ) _mem4(dst[x]) = _avgu4(_mem4(src1[x]),_mem4(src2[x])); 软 件 流 水 循环次数 for ( i = 0; i N; i ++ ) /* i为循环计数*/ 编译器将自动把它转化为递减计数形式: for ( i = N; i != 0; i -- ) /* 递减计数形式 */ 循环展开 用户自己在程序中展开 其它优化技巧 尽量使用全局变量(global variable)和静态变量(static variable) 减少函数调用:宏(macro)调用和内联(inline)嵌入 条件分支语句的优化 尽量使用逻辑运算代替乘除运算 汇编级优化 线性汇编语言 TMS320C6000中独有的一种编程语言,介于高级语言和汇编语言之间 不需考虑:使用的寄存器,指令的并行与否, 延迟周期,使用的功能单元 线性汇编文件的扩展名必须是“.sa” 开头“.cproc”,结尾“.endproc”伪指令 编写汇编代码 针对各种块大小进行汇编改写 (16x16,16x8,8x1

文档评论(0)

docindoc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档