[XviD-devel] About generate_GMCparameters() function
=?big5?q?anukeey?=
anukeey at yahoo.com.tw
Wed Jun 11 18:08:16 CEST 2003
Hi all:
I'm a newbei of xvid.
I suffered some problems with this function:
void generate_GMCparameters( const int num_wp, const
int res, const WARPPOINTS *const warp,const int width,
const int height, GMC_DATA *const gmc)
{
const int du0 = warp->duv[0].x;
const int dv0 = warp->duv[0].y;
const int du1 = warp->duv[1].x;
const int dv1 = warp->duv[1].y;
const int du2 = warp->duv[2].x;
const int dv2 = warp->duv[2].y;
gmc->W = width;
gmc->H = height;
gmc->rho = 4 - log2bin(res-1); // = {3,2,1,0} for
res={2,4,8,16}
gmc->alpha = log2bin(gmc->W-1);
gmc->Ws = (1 << gmc->alpha);
gmc->dxF = 16*gmc->Ws + RDIV( 8*gmc->Ws*du1, gmc->W
);
gmc->dxG = RDIV( 8*gmc->Ws*dv1, gmc->W );
gmc->Fo = (res*du0 + 1) << (gmc->alpha+gmc->rho-1);
gmc->Go = (res*dv0 + 1) << (gmc->alpha+gmc->rho-1);
if (num_wp==2) {
gmc->dyF = -gmc->dxG;
gmc->dyG = gmc->dxF;
} else if (num_wp==3) {
gmc->beta = log2bin(gmc->H-1);
gmc->Hs = (1 << gmc->beta);
gmc->dyF = RDIV( 8*gmc->Hs*du2, gmc->H );
gmc->dyG = 16*gmc->Hs + RDIV( 8*gmc->Hs*dv2, gmc->H
);
if (gmc->beta > gmc->alpha) {
gmc->dxF <<= (gmc->beta - gmc->alpha);
gmc->dxG <<= (gmc->beta - gmc->alpha);
gmc->alpha = gmc->beta;
gmc->Ws = 1<< gmc->beta;
} else {
gmc->dyF <<= gmc->alpha - gmc->beta;
gmc->dyG <<= gmc->alpha - gmc->beta;
}
}
gmc->cFo = gmc->dxF + gmc->dyF + (1 <<
(gmc->alpha+gmc->rho+1));
gmc->cFo += 16*gmc->Ws*(du0-1);
gmc->cGo = gmc->dxG + gmc->dyG + (1 <<
(gmc->alpha+gmc->rho+1));
gmc->cGo += 16*gmc->Ws*(dv0-1);
}
How to trace it with the spec ?
Thanks.
anukeey
-----------------------------------------------------------------
¨C¤Ñ³£ Yahoo!©_¼¯
¸Ó´«¤u§@¤F¶Ü? - À°§Aºâ¥X³Ì¦X¾Aªº¨D¾¤è¦V
http://fate.yahoo.com.tw/
More information about the XviD-devel
mailing list