1. 处理的数据先EDMA到片内,具有更高的效率!
以YUV2RGB为例:
#pragma DATA_SECTION(onchipBuf0_y,".INTPROCBUFF");
#pragmaDATA_ALIGN(onchipBuf0_y,);
#pragma DATA_SECTION(onchipBuf1_y,".INTPROCBUFF");
#pragmaDATA_ALIGN(onchipBuf1_y,);
#pragma DATA_SECTION(onchipBuf0_u,".INTPROCBUFF");
#pragmaDATA_ALIGN(onchipBuf0_u,);
#pragma DATA_SECTION(onchipBuf1_u,".INTPROCBUFF");
#pragmaDATA_ALIGN(onchipBuf1_u,);
#pragma DATA_SECTION(onchipBuf0_v,".INTPROCBUFF");
#pragmaDATA_ALIGN(onchipBuf0_v,);
#pragma DATA_SECTION(onchipBuf1_v,".INTPROCBUFF");
#pragmaDATA_ALIGN(onchipBuf1_v,); #pragma DATA_SECTION(onchipBuf0_r,".INTPROCBUFF");
#pragmaDATA_ALIGN(onchipBuf0_r,);
#pragma DATA_SECTION(onchipBuf1_r,".INTPROCBUFF");
#pragmaDATA_ALIGN(onchipBuf1_r,);
#pragma DATA_SECTION(onchipBuf0_g,".INTPROCBUFF");
#pragmaDATA_ALIGN(onchipBuf0_g,);
#pragma DATA_SECTION(onchipBuf1_g,".INTPROCBUFF");
#pragmaDATA_ALIGN(onchipBuf1_g,);
#pragma DATA_SECTION(onchipBuf0_b,".INTPROCBUFF");
#pragmaDATA_ALIGN(onchipBuf0_b,);
#pragma DATA_SECTION(onchipBuf1_b,".INTPROCBUFF");
#pragmaDATA_ALIGN(onchipBuf1_b,);
//片上缓冲区
unsigned charonchipBuf0_y[PROC_WIDTH];
unsigned charonchipBuf1_y[PROC_WIDTH];
unsigned charonchipBuf0_u[PROC_WIDTH_2];
unsigned charonchipBuf1_u[PROC_WIDTH_2];
unsigned charonchipBuf0_v[PROC_WIDTH_2];
unsigned charonchipBuf1_v[PROC_WIDTH_2];
unsigned charonchipBuf0_r[PROC_WIDTH];
unsigned charonchipBuf1_r[PROC_WIDTH];
unsigned charonchipBuf0_g[PROC_WIDTH];
unsigned charonchipBuf1_g[PROC_WIDTH];
unsigned charonchipBuf0_b[PROC_WIDTH];
unsigned charonchipBuf1_b[PROC_WIDTH];
//原始图像 YUV
extern unsigned charsrc_Y[IMGWIDTH*IMGHEIGHT];//720*576
extern unsigned charsrc_U[IMGWIDTH_2*IMGHEIGHT];
extern unsigned charsrc_V[IMGWIDTH_2*IMGHEIGHT];
//RGB图像
extern unsigned charsrc_R[PROC_WIDTH*PROC_HEIGHT];//352*288
extern unsigned charsrc_G[PROC_WIDTH*PROC_HEIGHT];
extern unsigned charsrc_B[PROC_WIDTH*PROC_HEIGHT]; void yuv2rgb888()
{ int i=,j=;
int y,u,v,r,g,b;
int v359,v183,u88,u454;
unsigned char *py,*pu,*pv,*pr,*pg,*pb;
// const int dif=0x8080;//
for ( i = ; i <; i ++ )
{
//copy一行到片上 144-432行,180列~180+352列
DAT_copy(src_Y+(i+)*IMGWIDTH+, onchipBuf0_y, PROC_WIDTH);
DAT_copy(src_U+(i+)*(IMGWIDTH>>)+, onchipBuf0_u,PROC_WIDTH_2);
DAT_copy(src_V+(i+)*(IMGWIDTH>>)+, onchipBuf0_v, PROC_WIDTH_2);
py=onchipBuf0_y;
pu=onchipBuf0_u;
pv=onchipBuf0_v;
pr=onchipBuf0_r;
pg=onchipBuf0_g;
pb=onchipBuf0_b;
#pragmaMUST_ITERATE(,, );
for(j=;j
{ y=(*py);//u-=128; v-=128;//y-=16;y不减16
u=(*pu)-;
v=(*pv)-;
v359=*v>>;
u88=*u>>;
v183=*v>>;
u454=*u>>;
r= y+v359; // r=y+1.402*v;
r&=~(r>>);
r = (r |((-r)>>) ) & 0xFF;
g= y-u88-v183; //g=y-0.34414*u-0.71414*v;
g&=~(g>>);
g = (g |((-g)>>) ) & 0xFF;
b= y+u454; //b=y+1.772*u;
b&=~(b>>);
b = (b |((-b)>>) ) & 0xFF;
*pr++=r;
*pg++=g;
*pb++=b;
//
py++; y=(*py); //y-=16; y减了16之后比原来灰度暗了16左右。∴不减。
r= y+v359; //r=y+1.402*v;
r&=~(r>>);
r = (r |((-r)>>) ) & 0xFF;
g= y-u88-v183; //g=y-0.34414*u-0.71414*v;
g&=~(g>>);
g = (g |((-g)>>) ) & 0xFF;
b= y+u454; // b=y+1.772*u;
b&=~(b>>);
b = (b |((-b)>>) ) & 0xFF;
*pr++=r;
*pg++=g;
*pb++=b;
py++; pu++;pv++;
}
//处理完后,copy给片外r、g、b[352*288]
DAT_copy(onchipBuf0_r,src_R+i*PROC_WIDTH, PROC_WIDTH);
DAT_copy(onchipBuf0_g,src_G+i*PROC_WIDTH, PROC_WIDTH);
DAT_copy(onchipBuf0_b,src_B+i*PROC_WIDTH, PROC_WIDTH);
}
}
耗时clock对比
放在片外:          1888 3080 clocks
先EDMA到片上:  197 7300 clocks!
约比在片外处理快10倍。
-------------------------------------------------
2. 另外,代码中将0~255的限定使用(0):
                r&=~(r>>);
r = (r | ((-r)>>) ) & 0xFF;
g &=~(g>>);
g = (g | ((-g)>>) ) & 0xFF;
b &=~(b>>);
b = (b | ((-b)>>) ) & 0xFF;

代替(1),能实现更好的软件流水。

      if ( r>)    r=;          else if ( r< )  r=;
if ( g> ) g=; else if ( g< ) g=;
if ( b> ) b=; else if ( b< ) b=;

说明:如下图所示,后者(1)不能软件流水~(都在片内处理的情况下)t1=14634366 clocks ≈10*t0!!!

=> 优化后

【DM642学习笔记十】DSP优化记录的更多相关文章

  1. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- Direct12优化

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- Direct12优化 第一章:向量代数 1.向量计算的时候,使用XMV ...

  2. python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例

    python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...

  3. Learning ROS for Robotics Programming Second Edition学习笔记(十) indigo Gazebo rviz slam navigation

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 moveit是书的最后一章,由于对机械臂完全不知,看不懂 ...

  4. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...

  5. python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法

    python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法 同一台机器同时安装 python2.7 和 python3.4不会冲突.安装在不同目录,然 ...

  6. python3.4学习笔记(十六) windows下面安装easy_install和pip教程

    python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...

  7. python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)

    python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...

  8. python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL

    python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...

  9. python3.4学习笔记(十) 常用操作符,条件分支和循环实例

    python3.4学习笔记(十) 常用操作符,条件分支和循环实例 #Pyhon常用操作符 c = d = 10 d /= 8 #3.x真正的除法 print(d) #1.25 c //= 8 #用两个 ...

随机推荐

  1. 在MsSql中,创建链接服务器

    建立链接服务器,主要为了跨服务器数据库操作 创建链接服务器 --创建远程链接服务器 EXEC sys.sp_addlinkedserver @server = 'SyncServer', -- 目标服 ...

  2. VS2010-MFC(常用控件:标签控件Tab Control 上)

    转自:http://www.jizhuomi.com/software/205.html 前面两节讲了树形控件Tree Control,本节开始讲解标签控件Tab Control,也可以称为选项卡控件 ...

  3. DELPHI指针的使用

    DELPHI指针的使用 大家都认为,C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上.因此,说指针是C语言的灵魂,一点都不为过.同时,这种说法也让很多人产生误解,似乎只有C语言的指针才 ...

  4. SpringCloud学习笔记(八):Zuul路由网关

    概述 是什么? Zuul包含了对请求的路由和过滤两个最主要的功能: 其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器功能则负责对请求的处理过程进行干预,是实现请 ...

  5. 17.splash_case01

    # 抓取今日头条,对比渲染和没有渲染的效果 import requests from lxml import etree # url = 'http://localhost:8050/render.h ...

  6. 提问(prompt 消息对话框)用于询问一些需要与用户交互的信息。弹出消息对话框(包含一个确定按钮、取消按钮与一个文本输入框)

    提问(prompt 消息对话框) prompt弹出消息对话框,通常用于询问一些需要与用户交互的信息.弹出消息对话框(包含一个确定按钮.取消按钮与一个文本输入框). 语法: prompt(str1, s ...

  7. MySQL之从忘记密码到重置密码

    在对MySQL的应用中,难免会有忘记登陆密码的情况:接下来,将简单介绍下MySQL忘记密码如何登陆和重置密码的操作过程. 首先来说下新版MySQL(5.7+)的重置密码过程: 由于忘记登陆密码,所以正 ...

  8. Eclipse 常用快捷键 (动画讲解)【转】

    Eclipse 常用快捷键 (动画讲解)[转] Eclipse有强大的编辑功能, 工欲善其事,必先利其器, 掌握Eclipse快捷键,可以大大提高工作效率. 小坦克我花了一整天时间, 精选了一些常用的 ...

  9. JavaWeb中请求转发和请求重定向的区别

    针对于JavaWeb中请求与重定向的一个cheatsheep: 1.转发 1)完成一次转发,用户浏览器发送一次请求 2)转发之后,浏览器URL地址栏不改变(服务器帮忙完成) 3)请求域中数据不丢失 4 ...

  10. IDEA将代码推送至远程GitHub仓库

    1 在项目根路径下添加.gitignore文件 2 创建本地git仓库 3 git add操作 快捷键 ctrl+alt+a 4 git commit操作 快捷键ctrl+k 5 git push操作 ...