⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trimedia.c

📁 用于TM1300/PNX1300系列DSP(主要用于视频处理)的各种滤波器源码
💻 C
字号:
#define	CLIP_(a, l, h) ((a) < (l) ? (l) : ((a) > (h) ? (h) : (a)))

IFIR16(int a, int b)
{
	union { short e[2]; int i; } u_a, u_b;

	u_a.i = a;
	u_b.i = b;
	return u_a.e[0]*u_b.e[0] + u_a.e[1]*u_b.e[1];
}

ROLI(int sh, unsigned a)
{
	return a << sh | a >> (32 - sh);
}

DSPIDUALADD(int a, int b)
{
        union { short e[2]; int i; } u_a, u_b;

        u_a.i = a;
        u_b.i = b;
	u_a.e[0] = CLIP_(u_a.e[0]+u_b.e[0], -0x8000, 0x7FFF);
	u_a.e[1] = CLIP_(u_a.e[1]+u_b.e[1], -0x8000, 0x7FFF);
	return u_a.i;
}

DSPIDUALSUB(int a, int b)
{
        union { short e[2]; int i; } u_a, u_b;

        u_a.i = a;
        u_b.i = b;
	u_a.e[0] = CLIP_(u_a.e[0]-u_b.e[0], -0x8000, 0x7FFF);
	u_a.e[1] = CLIP_(u_a.e[1]-u_b.e[1], -0x8000, 0x7FFF);
	return u_a.i;
}

PACK16MSB(unsigned long a, unsigned long b)
{
  return (a&0xFFFF0000) | (b >> 16);
}


PACK16LSB(unsigned long a, unsigned long b)
{
  return a<<16 | (b & 0x0000FFFF);
}


dualasr(int a, int shift)
{
  short w1 = ((int)a >> 16), w2 = (a) & 0xFFFF;
  w1 >>= shift;
  w2 >>= shift;
  return w1 << 16 | (w2 & 0xFFFF);
}

dualiclipi(int a, int lim)
{
  short w1 = ((int)a >> 16), w2 = (a) & 0xFFFF;
  lim &= 0x7FFF;
  w1 = CLIP_(w1, -lim-1, lim);
  w2 = CLIP_(w2, -lim-1, lim);
  return w1 << 16 | (w2&0xFFFF);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -