📄 one_d.c
字号:
#include <ops/custom_defs.h>
#include "tc.h"
#include "coeffs.h"
#define TMP_20_21_H_BIAS 0x8000 /* bias for rounding by right shift */
#if LITTLE_ENDIAN==1
#define PACK16_LSB(a, b) PACK16LSB(b, a)
#define PACK16_MSB(a, b) PACK16MSB(b, a)
#else
#define PACK16_LSB(a, b) PACK16LSB(a, b)
#define PACK16_MSB(a, b) PACK16MSB(a, b)
#endif
int scale = 1;
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 * scale;
}
one_d_idct(data);
for (i= 0; i<8; i++) printf("%d ", data[i]);
printf("\n");
}
one_d_idct(short * data)
{
int r0, r1, r2, r3, r4, r5, r6, r7;
int z2, z3, z5, z0, zz5, zz2, zz3, zz0;
int tmp22, tmp23, tmp20, tmp21;
int tmp10, tmp13, tmp11, tmp12;
int tmp0, tmp1, tmp2, tmp3;
long * ldata;
ldata = (long *)data;
z0 = PACK16_LSB(data[0], data[4]);
z2 = PACK16_LSB(data[1], data[5]);
z5 = PACK16_LSB(data[2], data[6]);
z3 = PACK16_LSB(data[3], data[7]);
tmp22 = IFIR16(z5, MASK1);
tmp23 = IFIR16(z5, MASK2);
tmp20 = IFIR16(z0, MASK3) + TMP_20_21_H_BIAS;
tmp21 = IFIR16(z0, MASK4) + TMP_20_21_H_BIAS;
tmp10 = tmp20 + tmp23;
tmp13 = tmp20 - tmp23;
tmp11 = tmp21 + tmp22;
tmp12 = tmp21 - tmp22;
tmp0 = IFIR16(z2, D0) + IFIR16(z3, D1);
tmp1 = IFIR16(z2, D2) + IFIR16(z3, D3);
tmp2 = IFIR16(z2, D4) + IFIR16(z3, D5);
tmp3 = IFIR16(z2, D6) + IFIR16(z3, D7);
ldata[0] = PACK16_MSB(tmp11 + tmp2,tmp10 + tmp3);
ldata[1] = PACK16_MSB(tmp13 + tmp0,tmp12 + tmp1);
ldata[2] = PACK16_MSB(tmp12 - tmp1,tmp13 - tmp0);
ldata[3] = PACK16_MSB(tmp10 - tmp3,tmp11 - tmp2);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -