DSP优化案例1
来源:互联网 发布:简历封面 知乎 编辑:程序博客网 时间:2024/06/05 12:39
int ScaleImage(void *p_src, int src_width, int src_height, int src_fmt,
int src_offset1, int src_offset2, int src_offset3, void *p_dest, int dest_width, int dest_height,
int dest_offset1, int dest_offset2, int dest_offset3)
{
if(p_src==0) return -1;
if(p_dest==0) return -2;
Cache_inv(p_src, 6*(src_offset3-src_offset2), Cache_Type_ALL, TRUE);
unsigned int x,y;
long srcx_16,srcy_16;
char *ySrcline,*uSrcline,*vSrcline;
char *yDstline,*uDstline,*vDstline;
long xrIntFloat_16=(src_width<<16)/dest_width+1; //16.16格式定点数
long yrIntFloat_16=(src_height<<16)/dest_height+1; //16.16格式定点数
if((src_width<dest_width)&&(src_height<dest_height))
{
yDstline=p_dest+dest_offset1+(dest_height-1)*dest_width;
srcy_16=yrIntFloat_16*(src_width-1);
for (y=dest_height-1;y>=0;--y)
{
ySrcline= p_src+src_offset1+(srcy_16>>16);
long srcx_16=xrIntFloat_16*(src_width-1);
for (x=dest_width-1;x>=0;--x)
{
yDstline[x]=ySrcline[srcx_16>>16];
srcx_16-=xrIntFloat_16;
}
srcy_16-=yrIntFloat_16;
yDstline-=dest_width;
}
dest_width=dest_width>>1;
dest_height=dest_height>>1;
src_width=src_width>>1;
src_height=src_height>>1;
uDstline=p_dest+dest_offset2+(dest_height-1)*dest_width;
vDstline=p_dest+dest_offset3+(dest_height-1)*dest_width;
srcy_16=yrIntFloat_16*(src_width-1);
for ( y=dest_height-1;y>=0;--y)
{
uSrcline= p_src+src_offset2+(srcy_16>>16);
vSrcline= p_src+src_offset3+(srcy_16>>16);
srcx_16=xrIntFloat_16*(src_width-1);
for (x=dest_width-1;x>=0;--x)
{
uDstline[x]=uSrcline[srcx_16>>16];
vDstline[x]=vSrcline[srcx_16>>16];
srcx_16-=xrIntFloat_16;
}
srcy_16-=yrIntFloat_16;
uDstline-=dest_width;
vDstline-=dest_width;
}
}
else
{
yDstline=p_dest+dest_offset1;
srcy_16=0;
for (y=0;y<dest_height;++y)
{
ySrcline=p_src+src_offset1+(srcy_16>>16);
srcx_16=0;
for (x=0;x<dest_width;++x)
{
yDstline[x]=ySrcline[srcx_16>>16];
srcx_16+=xrIntFloat_16;
}
srcy_16+=yrIntFloat_16;
yDstline+=dest_width;
}
dest_width=dest_width>>1;
dest_height=dest_height>>1;
src_width=src_width>>1;
src_height=src_height>>1;
uDstline=p_dest+dest_offset2;
vDstline=p_dest+dest_offset3;
srcy_16=0;
for (y=0;y<dest_height;++y)
{
uSrcline=p_src+src_offset2+(srcy_16>>16);
vSrcline=p_src+src_offset3+(srcy_16>>16);
srcx_16=0;
for (x=0;x<dest_width;++x)
{
uDstline[x]=uSrcline[srcx_16>>16];
vDstline[x]=vSrcline[srcx_16>>16];
srcx_16+=xrIntFloat_16;
}
srcy_16+=yrIntFloat_16;
uDstline+=dest_width;
vDstline+=dest_width;
}
}
Cache_wb(p_src, 6*(src_offset3-src_offset2), Cache_Type_ALL, TRUE);
return 0;
}
int src_offset1, int src_offset2, int src_offset3, void *p_dest, int dest_width, int dest_height,
int dest_offset1, int dest_offset2, int dest_offset3)
{
if(p_src==0) return -1;
if(p_dest==0) return -2;
Cache_inv(p_src, 6*(src_offset3-src_offset2), Cache_Type_ALL, TRUE);
unsigned int x,y;
long srcx_16,srcy_16;
char *ySrcline,*uSrcline,*vSrcline;
char *yDstline,*uDstline,*vDstline;
long xrIntFloat_16=(src_width<<16)/dest_width+1; //16.16格式定点数
long yrIntFloat_16=(src_height<<16)/dest_height+1; //16.16格式定点数
if((src_width<dest_width)&&(src_height<dest_height))
{
yDstline=p_dest+dest_offset1+(dest_height-1)*dest_width;
srcy_16=yrIntFloat_16*(src_width-1);
for (y=dest_height-1;y>=0;--y)
{
ySrcline= p_src+src_offset1+(srcy_16>>16);
long srcx_16=xrIntFloat_16*(src_width-1);
for (x=dest_width-1;x>=0;--x)
{
yDstline[x]=ySrcline[srcx_16>>16];
srcx_16-=xrIntFloat_16;
}
srcy_16-=yrIntFloat_16;
yDstline-=dest_width;
}
dest_width=dest_width>>1;
dest_height=dest_height>>1;
src_width=src_width>>1;
src_height=src_height>>1;
uDstline=p_dest+dest_offset2+(dest_height-1)*dest_width;
vDstline=p_dest+dest_offset3+(dest_height-1)*dest_width;
srcy_16=yrIntFloat_16*(src_width-1);
for ( y=dest_height-1;y>=0;--y)
{
uSrcline= p_src+src_offset2+(srcy_16>>16);
vSrcline= p_src+src_offset3+(srcy_16>>16);
srcx_16=xrIntFloat_16*(src_width-1);
for (x=dest_width-1;x>=0;--x)
{
uDstline[x]=uSrcline[srcx_16>>16];
vDstline[x]=vSrcline[srcx_16>>16];
srcx_16-=xrIntFloat_16;
}
srcy_16-=yrIntFloat_16;
uDstline-=dest_width;
vDstline-=dest_width;
}
}
else
{
yDstline=p_dest+dest_offset1;
srcy_16=0;
for (y=0;y<dest_height;++y)
{
ySrcline=p_src+src_offset1+(srcy_16>>16);
srcx_16=0;
for (x=0;x<dest_width;++x)
{
yDstline[x]=ySrcline[srcx_16>>16];
srcx_16+=xrIntFloat_16;
}
srcy_16+=yrIntFloat_16;
yDstline+=dest_width;
}
dest_width=dest_width>>1;
dest_height=dest_height>>1;
src_width=src_width>>1;
src_height=src_height>>1;
uDstline=p_dest+dest_offset2;
vDstline=p_dest+dest_offset3;
srcy_16=0;
for (y=0;y<dest_height;++y)
{
uSrcline=p_src+src_offset2+(srcy_16>>16);
vSrcline=p_src+src_offset3+(srcy_16>>16);
srcx_16=0;
for (x=0;x<dest_width;++x)
{
uDstline[x]=uSrcline[srcx_16>>16];
vDstline[x]=vSrcline[srcx_16>>16];
srcx_16+=xrIntFloat_16;
}
srcy_16+=yrIntFloat_16;
uDstline+=dest_width;
vDstline+=dest_width;
}
}
Cache_wb(p_src, 6*(src_offset3-src_offset2), Cache_Type_ALL, TRUE);
return 0;
}
0 0
- DSP优化案例1
- DSP程序优化方法(1)
- DSP程序优化方法(1)
- DSP优化
- dsp优化
- 【DSP开发】DSP程序优化
- DSP 6000程序优化(1)
- DSP程序优化方法(1)
- SQL优化案例(1)
- SQL优化案例-1
- SQL优化案例1
- DSP 优化心得
- DSP的优化
- DSP程序优化方法
- DSP 优化心得收藏
- dsp 优化心得
- DSP程序优化方法
- DSP程序优化方法
- 小白对R中var()函数的误解
- linux 时间设置tnpdate
- HBase的那些事
- 如何写论文的“引言”部分
- Spring自定义配置文件读取类
- DSP优化案例1
- 中国大陆开源镜像站汇总
- 从源码的角度解析View的事件分发
- Leetcode Add and Search Word - Data structure design
- 三天独立开发的iOS端CSDN博客阅读器上线了
- [LeetCode] Reverse Linked List(递归与非递归反转链表)
- [leetcode][string] Length of Last Word
- C语言中的main返回值
- ubuntu12.04+hadoop2.2.0+zookeeper3.4.5+hbase0.96.2+hive0.13.1伪分布式环境部署