--- encoder.c 2002/03/24 05:47:08 1.9 +++ encoder.c 2002/03/28 12:24:41 1.12 @@ -96,7 +96,7 @@ if (pParam->max_quantizer < pParam->min_quantizer) pParam->max_quantizer = pParam->min_quantizer; - if ((pEnc = (Encoder *) xvid_malloc(sizeof(Encoder), 16)) == NULL) + if ((pEnc = (Encoder *) xvid_malloc(sizeof(Encoder), CACHE_LINE)) == NULL) return XVID_ERR_MEMORY; /* Fill members of Encoder structure */ @@ -161,7 +161,7 @@ return XVID_ERR_MEMORY; } - pEnc->pMBs = xvid_malloc(sizeof(MACROBLOCK) * pEnc->mbParam.mb_width * pEnc->mbParam.mb_height, 16); + pEnc->pMBs = xvid_malloc(sizeof(MACROBLOCK) * pEnc->mbParam.mb_width * pEnc->mbParam.mb_height, CACHE_LINE); if (pEnc->pMBs == NULL) { image_destroy(&pEnc->sCurrent, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height); @@ -253,7 +253,7 @@ if ((pEnc->mbParam.global_flags & XVID_LUMIMASKING) > 0) { - int * temp_dquants = (int *) xvid_malloc(pEnc->mbParam.mb_width * pEnc->mbParam.mb_height * sizeof(int), 16); + int * temp_dquants = (int *) xvid_malloc(pEnc->mbParam.mb_width * pEnc->mbParam.mb_height * sizeof(int), CACHE_LINE); pEnc->mbParam.quant = adaptive_quantization(pEnc->sCurrent.y, pEnc->mbParam.width, temp_dquants, pFrame->quant, pFrame->quant, @@ -364,18 +364,21 @@ static int FrameCodeI(Encoder * pEnc, Bitstream * bs, uint32_t *pBits) { +#ifdef LINUX + DECLARE_ALIGNED_MATRIX(dct_codes,6,64,int16_t,16); + DECLARE_ALIGNED_MATRIX(qcoeff,6,64,int16_t,16); +#else CACHE_ALIGN int16_t dct_codes[6][64]; CACHE_ALIGN int16_t qcoeff[6][64]; +#endif uint16_t x, y; pEnc->iFrameNum = 0; pEnc->mbParam.rounding_type = 1; pEnc->mbParam.coding_type = I_VOP; - BitstreamWriteVolHeader(bs, pEnc->mbParam.width, pEnc->mbParam.height, pEnc->mbParam.quant_type); - BitstreamWriteVopHeader(bs, I_VOP, pEnc->mbParam.rounding_type, - pEnc->mbParam.quant, - pEnc->mbParam.fixed_code); + BitstreamWriteVolHeader(bs, &pEnc->mbParam); + BitstreamWriteVopHeader(bs, &pEnc->mbParam); *pBits = BitstreamPos(bs); @@ -390,7 +393,7 @@ CodeIntraMB(pEnc, pMB); - MBTransQuantIntra(&pEnc->mbParam, x, y, dct_codes, qcoeff, &pEnc->sCurrent); + MBTransQuantIntra(&pEnc->mbParam, pMB, x, y, dct_codes, qcoeff, &pEnc->sCurrent); start_timer(); MBPrediction(&pEnc->mbParam, x, y, pEnc->mbParam.mb_width, qcoeff, pEnc->pMBs); @@ -418,9 +421,13 @@ static int FrameCodeP(Encoder * pEnc, Bitstream * bs, uint32_t *pBits, bool force_inter, bool vol_header) { float fSigma; - +#ifdef LINUX + DECLARE_ALIGNED_MATRIX(dct_codes,6,64,int16_t,16); + DECLARE_ALIGNED_MATRIX(qcoeff,6,64,int16_t,16); +#else CACHE_ALIGN int16_t dct_codes[6][64]; CACHE_ALIGN int16_t qcoeff[6][64]; +#endif int iLimit; uint32_t x, y; @@ -430,7 +437,9 @@ IMAGE *pCurrent = &pEnc->sCurrent; IMAGE *pRef = &pEnc->sReference; - image_setedges(pRef,pEnc->mbParam.edged_width, pEnc->mbParam.edged_height, pEnc->mbParam.width, pEnc->mbParam.height); + start_timer(); + image_setedges(pRef,pEnc->mbParam.edged_width, pEnc->mbParam.edged_height, pEnc->mbParam.width, pEnc->mbParam.height, pEnc->mbParam.global_flags & XVID_INTERLACING); + stop_edges_timer(); pEnc->mbParam.rounding_type = 1 - pEnc->mbParam.rounding_type; @@ -459,11 +468,9 @@ pEnc->mbParam.coding_type = P_VOP; if(vol_header) - BitstreamWriteVolHeader(bs, pEnc->mbParam.width, pEnc->mbParam.height, pEnc->mbParam.quant_type); + BitstreamWriteVolHeader(bs, &pEnc->mbParam); - BitstreamWriteVopHeader(bs, P_VOP, pEnc->mbParam.rounding_type, - pEnc->mbParam.quant, - pEnc->mbParam.fixed_code); + BitstreamWriteVopHeader(bs, &pEnc->mbParam); *pBits = BitstreamPos(bs); @@ -502,12 +509,14 @@ } pMB->quant = pEnc->mbParam.quant; - pMB->cbp = MBTransQuantInter(&pEnc->mbParam, x, y, dct_codes, qcoeff, pCurrent); + pMB->field_pred = 0; + + pMB->cbp = MBTransQuantInter(&pEnc->mbParam, pMB, x, y, dct_codes, qcoeff, pCurrent); } else { CodeIntraMB(pEnc, pMB); - MBTransQuantIntra(&pEnc->mbParam, x, y, dct_codes, qcoeff, pCurrent); + MBTransQuantIntra(&pEnc->mbParam, pMB, x, y, dct_codes, qcoeff, pCurrent); } start_timer();