本文共 2439 字,大约阅读时间需要 8 分钟。
/*
use this table to multiply the block[j] in the decode_macroblock stage; after multiply,shift to right 13 bits; (17-4)*/
#define C2 30274 // 2 C(PI/8) 1.84776
#define C4 23171 // SQRT(2) 1.41421 #define C6 12540 // 2 SIN (PI/8) 0.76537#define C6pC2 42814 2.61313#define C6sC2 (-17734) // -1.08239#define RC0 14#define RC1 18#define ROUND (1<// do 80 times of multiply; fastidct :176;
#define idct_unit(a,b) {x4 = x5 - x3;
t1 = x5 + x3; x3 = (x2+x6)< x2 = (x2-x6)*C4-x3; t0 = x1 + x7; x6= x1 - x7; x7= (t0 + t1)< x5 = (t0 - t1)*C4; t0=C6*(x4+x6); x4=C6sC2*x4-t0; x6=C6pC2*x6-t0; t0=x6-x7; x1=(a-b)< t1=t0-x5; x6=(a+b)< x0=x4-t1; x4=x3+x6; x6-=x3; x3=x1+x2; x5=x1-x2; } static void IDCTaan_c(short* block){ int x0,x1,x2,x3,x4,x5,x6,x7; int t0,t1; short *blk;// Field one blk = block; for(int i=0; i<8; i++) { if (!( (x1 = blk[1]) | (x2 = blk[2]) | (x3 = blk[3]) | (x4 = blk[4]) | (x5 = blk[5]) | (x6 = blk[6]) | (x7 = blk[7]))) { // blk[0]= blk[1]=blk[2]=blk[3]=blk[4] =blk[5]=blk[6]=blk[7]=(blk[0]); } else {idct_unit(blk[0],blk[4])
blk[0]=(x4+x7)>>RC0 ;
blk[7]=(x4-x7)>>RC0 ; blk[1]=(x3+t0)>>RC0 ; blk[6]=(x3-t0)>>RC0 ; blk[2]=(x5-t1)>>RC0 ; blk[5]=(x5+t1)>>RC0 ; blk[3]=(x6-x0)>>RC0 ; blk[4]=(x6+x0)>>RC0 ; } blk+=8; }two
blk=block; for ( i=0; i<8; i++) { if (!((x1 = blk[8]) | (x2 = blk[16]) | (x3 = blk[24]) | (x4 = blk[32]) | (x5 = blk[40]) | (x6 = blk[48]) | (x7 = blk[56]))) { blk[0]=blk[8]=blk[16]=blk[24] =blk[32]=blk[40]=blk[48]=blk[56]= iclp[blk[0]>>4]; } else { idct_unit(blk[0*8],blk[4*8])blk[0*8]=iclp[(x4+x7+ROUND)>>RC1];
blk[7*8]=iclp[(x4-x7+ROUND)>>RC1]; blk[1*8]=iclp[(x3+t0+ROUND)>>RC1]; blk[6*8]=iclp[(x3-t0+ROUND)>>RC1]; blk[2*8]=iclp[(x5-t1+ROUND)>>RC1]; blk[5*8]=iclp[(x5+t1+ROUND)>>RC1]; blk[3*8]=iclp[(x6-x0+ROUND)>>RC1]; blk[4*8]=iclp[(x6+x0+ROUND)>>RC1]; } blk++; }}来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10748419/viewspace-983500/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10748419/viewspace-983500/