📄 one_d.c
字号:
#include <ops/custom_defs.h>
#include "coeffs.h"
int scale = 2;
main(int argc, char **argv)
{
int i, dataword;
short data[8] ;
if (argc > 2 && !strcmp(argv[1], "-scale"))
scale = atoi(argv[2]);
for (i=0; i<8; i++) {
scanf("%d", &dataword);
data[i] = dataword ;
}
one_d_dct(data, scale);
for (i= 0; i<8; i++) printf("%d ", data[i]);
printf("\n");
}
#if defined(__LITTLE_ENDIAN__)
#define PACK16_MSB(a, b) PACK16MSB(b, a)
#define READ_NORM(a) ROLI(16, (a))
#define READ_REV(a) (a)
#else
#define PACK16_MSB(a, b) PACK16MSB(a, b)
#define READ_NORM(a) (a)
#define READ_REV(a) ROLI(16, (a))
#endif
#define HROUND(x) (((x) << scale) + 0x8000)
one_d_dct(long *tab, int scale)
{
int tmp0, tmp1, tmp2, tmp3, tmp101, tmp132, tmp176, tmp145,
tmp201, tmp232;
int s0, s1, s2, s3, s4, s5, s6, s7;
tmp0 = READ_NORM((tab)[0]);
tmp1 = READ_REV ((tab)[1]);
tmp2 = READ_NORM((tab)[2]);
tmp3 = READ_REV ((tab)[3]);
tmp101 = DSPIDUALADD(tmp0,tmp3);
tmp132 = DSPIDUALADD(tmp1,tmp2);
tmp176 = DSPIDUALSUB(tmp0,tmp3);
tmp145 = DSPIDUALSUB(tmp1,tmp2);
tmp201 = DSPIDUALADD(tmp101,tmp132);
tmp232 = DSPIDUALSUB(tmp101,tmp132);
s0 = IFIR16(tmp201,C8);
s4 = IFIR16(tmp201,C9);
s2 = IFIR16(tmp232,C10);
s6 = IFIR16(tmp232,C11);
s7 = IFIR16(tmp145,C0) + IFIR16(tmp176,C1);
s3 = IFIR16(tmp145,C2) + IFIR16(tmp176,C3);
s5 = IFIR16(tmp145,C4) + IFIR16(tmp176,C5);
s1 = IFIR16(tmp145,C6) + IFIR16(tmp176,C7);
tab[0] = PACK16_MSB(HROUND(s0), HROUND(s1));
tab[1] = PACK16_MSB(HROUND(s2), HROUND(s3));
tab[2] = PACK16_MSB(HROUND(s4), HROUND(s5));
tab[3] = PACK16_MSB(HROUND(s6), HROUND(s7));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -