📄 trimedia.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 + -