--- branches/dev-api-4/xvidcore/src/motion/motion_est.c 2003/03/27 17:09:59 953 +++ branches/dev-api-4/xvidcore/src/motion/motion_est.c 2003/03/29 11:06:34 962 @@ -661,7 +661,7 @@ CheckCandidateBits16(const int x, const int y, const int Direction, int * const dir, const SearchData * const data) { - static int16_t in[64], coeff[64]; + int16_t *in = data->dctSpace, *coeff = data->dctSpace + 64; int32_t bits = 0, sum; VECTOR * current; const uint8_t * ptr; @@ -723,7 +723,7 @@ } } - bits += cbpy_tab[15-(cbp>>2)].len; + bits += xvid_cbpy_tab[15-(cbp>>2)].len; bits += mcbpc_inter_tab[(MODE_INTER & 7) | ((cbp & 3) << 3)].len; if (bits < data->iMinSAD[0]) { @@ -746,7 +746,7 @@ CheckCandidateBits8(const int x, const int y, const int Direction, int * const dir, const SearchData * const data) { - static int16_t in[64], coeff[64]; + int16_t *in = data->dctSpace, *coeff = data->dctSpace + 64; int32_t sum, bits; VECTOR * current; const uint8_t * ptr; @@ -1012,6 +1012,7 @@ VECTOR currentMV[5]; VECTOR currentQMV[5]; int32_t iMinSAD[5]; + DECLARE_ALIGNED_MATRIX(dct_space, 2, 64, int16_t, CACHE_LINE); SearchData Data; memset(&Data, 0, sizeof(SearchData)); Data.iEdgedWidth = iEdgedWidth; @@ -1024,6 +1025,7 @@ Data.qpel = current->vol_flags & XVID_VOL_QUARTERPEL; Data.chroma = MotionFlags & XVID_ME_CHROMA16; Data.rrv = current->vop_flags & XVID_VOP_REDUCED; + Data.dctSpace = dct_space; if ((current->vop_flags & XVID_VOP_REDUCED)) { mb_width = (pParam->width + 31) / 32; @@ -2548,7 +2550,7 @@ int cbp = 0, bits = 0, t = 0, i, iDirection; SearchData Data2, *Data8 = &Data2; int sumx = 0, sumy = 0; - int16_t in[64], coeff[64]; + int16_t *in = Data->dctSpace, *coeff = Data->dctSpace + 64; memcpy(Data8, Data, sizeof(SearchData)); CheckCandidate = CheckCandidateBits8; @@ -2675,7 +2677,7 @@ bits += CodeCoeffInter_CalcBits(coeff, scan_tables[0]); cbp |= 1 << (5 - 5); } - bits += cbpy_tab[15-(cbp>>2)].len; + bits += xvid_cbpy_tab[15-(cbp>>2)].len; bits += mcbpc_inter_tab[(MODE_INTER4V & 7) | ((cbp & 3) << 3)].len; } } @@ -2690,7 +2692,7 @@ int bits = 1; //this one is ac/dc prediction flag. always 1. int cbp = 0, i, t, dc = 0, b_dc = 1024; const uint32_t iQuant = Data->lambda16; - int16_t in[64], coeff[64]; + int16_t *in = Data->dctSpace, * coeff = Data->dctSpace + 64; for(i = 0; i < 4; i++) { uint32_t iDcScaler = get_dc_scaler(iQuant, 1); @@ -2738,7 +2740,7 @@ bits += t = CodeCoeffIntra_CalcBits(coeff, scan_tables[0]) + dcc_tab[coeff[0] + 255].len; if (t != 0) cbp |= 1 << (5 - 5); - bits += cbpy_tab[cbp>>2].len; + bits += xvid_cbpy_tab[cbp>>2].len; bits += mcbpc_inter_tab[(MODE_INTRA & 7) | ((cbp & 3) << 3)].len; } }