📄 idct.c
字号:
#include "jddatatype.h"
void idct (INT16 * data)
{
UINT8 i;
INT32 x0, x1, x2, x3, x4, x5, x6, x7, x8;
static const INT16 ic1 = 251;
static const INT16 is1 = 50;
static const INT16 ic3 = 213;
static const INT16 is3 = 142;
static const INT16 ir2c6 = 277;
static const INT16 ir2s6 = 669;
static const INT16 ir2 = 181;
for (i = 0; i < 8; i ++)
{
x0 = data [0] << 9;
x1 = data [1] << 7;
x2 = data [2];
x3 = data [3] * ir2;
x4 = data [4] << 9;
x5 = data [5] * ir2;
x6 = data [6];
x7 = data [7] << 7;
x8 = x7 + x1;
x1 -= x7;
x7 = x0 + x4;
x0 -= x4;
x4 = x1 + x5;
x1 -= x5;
x5 = x3 + x8;
x8 -= x3;
x3 = ir2c6 * (x2 + x6);
x6 = x3 + (- ir2c6 - ir2s6) * x6;
x2 = x3 + (- ir2c6 + ir2s6) * x2;
x3 = x7 + x2;
x7 -= x2;
x2 = x0 + x6;
x0 -= x6;
x6 = ic3 * (x4 + x5);
x5 = (x6 + (- ic3 - is3) * x5) >> 6;
x4 = (x6 + (- ic3 + is3) * x4) >> 6;
x6 = ic1 * (x1 + x8);
x1 = (x6 + (- ic1 - is1) * x1) >> 6;
x8 = (x6 + (- ic1 + is1) * x8) >> 6;
x7 += 512;
x2 += 512;
x0 += 512;
x3 += 512;
data [0] = (INT16) ((x3 + x4) >> 10);
data [1] = (INT16) ((x2 + x8) >> 10);
data [2] = (INT16) ((x0 + x1) >> 10);
data [3] = (INT16) ((x7 + x5) >> 10);
data [4] = (INT16) ((x7 - x5) >> 10);
data [5] = (INT16) ((x0 - x1) >> 10);
data [6] = (INT16) ((x2 - x8) >> 10);
data [7] = (INT16) ((x3 - x4) >> 10);
data += 8;
}
data -= 64;
for (i = 0; i < 8; i ++)
{
x0 = data [0] << 9;
x1 = data [8] << 7;
x2 = data [16];
x3 = data [24] * ir2;
x4 = data [32] << 9;
x5 = data [40] * ir2;
x6 = data [48];
x7 = data [56] << 7;
x8 = x7 + x1;
x1 -= x7;
x7 = x0 + x4;
x0 -= x4;
x4 = x1 + x5;
x1 -= x5;
x5 = x3 + x8;
x8 -= x3;
x3 = ir2c6 * (x2 + x6);
x6 = x3 + (- ir2c6 - ir2s6) * x6;
x2 = x3 + (- ir2c6 + ir2s6) * x2;
x3 = x7 + x2;
x7 -= x2;
x2 = x0 + x6;
x0 -= x6;
x4 >>= 6;
x5 >>= 6;
x1 >>= 6;
x8 >>= 6;
x6 = ic3 * (x4 + x5);
x5 = (x6 + (- ic3 - is3) * x5);
x4 = (x6 + (- ic3 + is3) * x4);
x6 = ic1 * (x1 + x8);
x1 = (x6 + (- ic1 - is1) * x1);
x8 = (x6 + (- ic1 + is1) * x8);
x7 += 1024;
x2 += 1024;
x0 += 1024;
x3 += 1024;
data [0] = (INT16) ((x3 + x4) >> 11);
data [8] = (INT16) ((x2 + x8) >> 11);
data [16] = (INT16) ((x0 + x1) >> 11);
data [24] = (INT16) ((x7 + x5) >> 11);
data [32] = (INT16) ((x7 - x5) >> 11);
data [40] = (INT16) ((x0 - x1) >> 11);
data [48] = (INT16) ((x2 - x8) >> 11);
data [56] = (INT16) ((x3 - x4) >> 11);
data ++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -