--- trunk/xvidcore/src/encoder.c 2002/03/29 07:03:24 84 +++ trunk/xvidcore/src/encoder.c 2002/03/29 07:24:57 87 @@ -188,7 +188,9 @@ image_destroy(&pEnc->sReference, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height); image_destroy(&pEnc->vInterH, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height); image_destroy(&pEnc->vInterV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height); + image_destroy(&pEnc->vInterVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height); image_destroy(&pEnc->vInterHV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height); + image_destroy(&pEnc->vInterHVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height); xvid_free(pEnc); destroy_vlc_tables(); @@ -422,11 +424,11 @@ 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); + 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; @@ -436,49 +438,18 @@ else iLimit = pEnc->mbParam.mb_width * pEnc->mbParam.mb_height + 1; - if ((pEnc->mbParam.global_flags & XVID_HALFPEL) > 0) - { - IMAGE *vInterV = NULL; - IMAGE *vInterVf = NULL; - IMAGE *vInterHV = NULL; - IMAGE *vInterHVf = NULL; - - // interpolate fields together if field ME is used - if (pEnc->mbParam.global_flags & XVID_INTERLACING && - pEnc->mbParam.global_flags & XVID_FIELDME) - { - vInterVf = &pEnc->vInterVf; - vInterHVf = &pEnc->vInterHVf; - } - - // perform normal interpolation, unless only field-based ME is allowed - if (!(pEnc->mbParam.global_flags & XVID_INTERLACING) || - !(pEnc->mbParam.global_flags & XVID_FIELDMEONLY)) - { - vInterV = &pEnc->vInterV; - vInterHV = &pEnc->vInterHV; - } - + if ((pEnc->mbParam.global_flags & XVID_HALFPEL) > 0) { start_timer(); - image_interpolate(pRef, - &pEnc->vInterH, - vInterV, vInterVf, - vInterHV, vInterHVf, - pEnc->mbParam.edged_width, - pEnc->mbParam.edged_height, - pEnc->mbParam.rounding_type); + image_interpolate(pRef, &pEnc->vInterH, &pEnc->vInterV, &pEnc->vInterHV, + pEnc->mbParam.edged_width, pEnc->mbParam.edged_height, + pEnc->mbParam.rounding_type); stop_inter_timer(); } start_timer(); - bIntra = MotionEstimation(pEnc->pMBs, - &pEnc->mbParam, - &pEnc->sReference, - &pEnc->vInterH, - &pEnc->vInterV, &pEnc->vInterVf, - &pEnc->vInterHV, &pEnc->vInterHVf, - &pEnc->sCurrent, - iLimit); + bIntra = MotionEstimation(pEnc->pMBs, &pEnc->mbParam, &pEnc->sReference, + &pEnc->vInterH, &pEnc->vInterV, + &pEnc->vInterHV, &pEnc->sCurrent, iLimit); stop_motion_timer(); if (bIntra == 1) @@ -513,8 +484,8 @@ x, y, &pEnc->sReference, &pEnc->vInterH, - &pEnc->vInterV, &pEnc->vInterVf, - &pEnc->vInterHV, &pEnc->vInterHVf, + &pEnc->vInterV, + &pEnc->vInterHV, &pEnc->sCurrent, dct_codes, pEnc->mbParam.width,