--- encoder.c 2002/07/11 00:15:59 1.54 +++ encoder.c 2002/07/19 14:56:00 1.57 @@ -39,7 +39,7 @@ * MinChen * 14.04.2002 added FrameCodeB() * - * $Id: encoder.c,v 1.54 2002/07/11 00:15:59 chenm001 Exp $ + * $Id: encoder.c,v 1.57 2002/07/19 14:56:00 chl Exp $ * ****************************************************************************/ @@ -212,7 +212,6 @@ if (pParam->max_key_interval == 0) pParam->max_key_interval = 10 * pParam->fincr / pParam->fbase; - pEnc = (Encoder *) xvid_malloc(sizeof(Encoder), CACHE_LINE); if (pEnc == NULL) return XVID_ERR_MEMORY; @@ -237,6 +236,10 @@ pEnc->mbParam.m_quant_type = H263_QUANT; +#ifdef _SMP + pEnc->mbParam.num_threads = MIN(pParam->num_threads, MAXNUMTHREADS); +#endif + pEnc->sStat.fMvPrevSigma = -1; /* Fill rate control parameters */ @@ -418,6 +421,7 @@ pEnc->mbParam.m_seconds = 0; pEnc->mbParam.m_ticks = 0; pEnc->m_framenum = 0; + pEnc->last_pframe = 1; #endif pParam->handle = (void *) pEnc; @@ -1595,20 +1599,18 @@ } else { #ifdef _SMP - if (NUMTHREADS > 1) - bIntra = - SMP_MotionEstimation(&pEnc->mbParam, pEnc->current, pEnc->reference, - &pEnc->vInterH, &pEnc->vInterV, &pEnc->vInterHV, - iLimit); - else + if (pEnc->mbParam.num_threads > 1) + bIntra = + SMP_MotionEstimation(&pEnc->mbParam, pEnc->current, pEnc->reference, + &pEnc->vInterH, &pEnc->vInterV, &pEnc->vInterHV, + iLimit); + else #endif - - bIntra = - MotionEstimation(&pEnc->mbParam, pEnc->current, pEnc->reference, - &pEnc->vInterH, &pEnc->vInterV, &pEnc->vInterHV, - iLimit); - - + bIntra = + MotionEstimation(&pEnc->mbParam, pEnc->current, pEnc->reference, + &pEnc->vInterH, &pEnc->vInterV, &pEnc->vInterHV, + iLimit); + } stop_motion_timer(); @@ -1722,6 +1724,10 @@ *pBits = BitstreamPos(bs) - *pBits; + pEnc->time_pp = ((int32_t)pEnc->mbParam.fbase - (int32_t)pEnc->last_pframe + (int32_t)pEnc->mbParam.m_ticks) % (int32_t)pEnc->mbParam.fbase; + fprintf(stderr,"fbase=%d last_p=%d ticks=%d time_pp = %d\n",pEnc->mbParam.fbase,pEnc->last_pframe,pEnc->mbParam.m_ticks,pEnc->time_pp); + + pEnc->last_pframe = pEnc->mbParam.m_ticks; return 0; // inter } @@ -1777,7 +1783,11 @@ stop_inter_timer(); start_timer(); - MotionEstimationBVOP(&pEnc->mbParam, frame, pEnc->reference->mbs, f_ref, + fprintf(stderr,"m_ticks =%d\n",(int32_t)pEnc->mbParam.m_ticks+1); + MotionEstimationBVOP(&pEnc->mbParam, frame, + ((int32_t)pEnc->mbParam.fbase + (int32_t)pEnc->mbParam.m_ticks + 1 - (int32_t)pEnc->last_pframe) % pEnc->mbParam.fbase, + pEnc->time_pp, + pEnc->reference->mbs, f_ref, &pEnc->f_refh, &pEnc->f_refv, &pEnc->f_refhv, pEnc->current->mbs, b_ref, &pEnc->vInterH, &pEnc->vInterV, &pEnc->vInterHV); @@ -1843,7 +1853,7 @@ if ((mb->mode == MODE_INTERPOLATE || mb->mode == MODE_DIRECT) && mb->cbp == 0 && mb->mvs[0].x == 0 && mb->mvs[0].y == 0) { - mb->mode = 5; // skipped + mb->mode = MODE_DIRECT_NONE_MV; // skipped } if (mb->mode == MODE_INTERPOLATE || mb->mode == MODE_FORWARD) {