--- trunk/xvidcore/src/encoder.c 2002/05/01 13:00:02 152 +++ trunk/xvidcore/src/encoder.c 2002/06/07 10:36:08 189 @@ -32,9 +32,11 @@ * * History * + * 08.05.2002 fix some problem in DEBUG mode; + * MinChen * 14.04.2002 added FrameCodeB() * - * $Id: encoder.c,v 1.32 2002-05-01 13:00:01 suxen_drol Exp $ + * $Id: encoder.c,v 1.38 2002-06-07 10:36:08 edgomez Exp $ * ***************************************************************************/ @@ -264,15 +266,15 @@ #ifdef BFRAMES // TODO: handle malloc() == NULL - pEnc->max_bframes = pParam->max_bframes; + pEnc->mbParam.max_bframes = pParam->max_bframes; pEnc->bquant_ratio = pParam->bquant_ratio; - if (pEnc->max_bframes > 0) + if (pEnc->mbParam.max_bframes > 0) { int n; - pEnc->bframes = malloc(pEnc->max_bframes * sizeof(FRAMEINFO *)); + pEnc->bframes = malloc(pEnc->mbParam.max_bframes * sizeof(FRAMEINFO *)); - for (n = 0; n < pEnc->max_bframes; n++) + for (n = 0; n < pEnc->mbParam.max_bframes; n++) { pEnc->bframes[n] = malloc(sizeof(FRAMEINFO)); pEnc->bframes[n]->mbs = malloc(sizeof(MACROBLOCK) * pEnc->mbParam.mb_width * pEnc->mbParam.mb_height); @@ -299,9 +301,14 @@ if (pParam->rc_bitrate) { - RateControlInit(pParam->rc_bitrate, pParam->rc_reaction_delay_factor, - pParam->rc_averaging_period, pParam->rc_buffer, pParam->fbase * 1000 / pParam->fincr, - pParam->max_quantizer, pParam->min_quantizer); + RateControlInit(&pEnc->rate_control, + pParam->rc_bitrate, + pParam->rc_reaction_delay_factor, + pParam->rc_averaging_period, + pParam->rc_buffer, + pParam->fbase * 1000 / pParam->fincr, + pParam->max_quantizer, + pParam->min_quantizer); } init_timer(); @@ -316,10 +323,10 @@ // ================================================================= #ifdef BFRAMES - if (pEnc->max_bframes > 0) + if (pEnc->mbParam.max_bframes > 0) { int n; - for (n = 0; n < pEnc->max_bframes; n++) + for (n = 0; n < pEnc->mbParam.max_bframes; n++) { image_destroy(&pEnc->bframes[n]->image, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height); free(pEnc->bframes[n]->mbs); @@ -327,7 +334,7 @@ } free(pEnc->bframes); } -#endif BFRAMES +#endif //==================================================================== image_destroy(&pEnc->current->image, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height); @@ -365,6 +372,11 @@ Bitstream bs; uint32_t bits; +#ifdef _DEBUG + float psnr; + char temp[128]; +#endif + ENC_CHECK(pEnc); ENC_CHECK(pFrame); @@ -432,7 +444,14 @@ SWAP(pEnc->current, pEnc->reference); - pEnc->current->quant = (pFrame->quant == 0) ? RateControlGetQ(0) : pFrame->quant; + pEnc->current->quant = (pFrame->quant == 0) ? RateControlGetQ(&pEnc->rate_control, 0) : pFrame->quant; + + if(pEnc->current->quant < 1) + pEnc->current->quant = 1; + + if(pEnc->current->quant > 31) + pEnc->current->quant = 31; + pEnc->current->global_flags = pFrame->general; pEnc->current->motion_flags = pFrame->motion; pEnc->current->seconds = pEnc->mbParam.m_seconds; @@ -450,7 +469,7 @@ stop_conv_timer(); #ifdef _DEBUG - image_copy(&pEnc->sOriginal, &pEnc->sCurrent, pEnc->mbParam.edged_width, pEnc->mbParam.height); + image_copy(&pEnc->sOriginal, &pEnc->current->image, pEnc->mbParam.edged_width, pEnc->mbParam.height); #endif @@ -500,7 +519,7 @@ /* note: sequences like "IIBB" decode fine with msfdam but, go screwy with divx5.00 */ } - else if (pEnc->bframenum_tail >= pEnc->max_bframes) + else if (pEnc->bframenum_tail >= pEnc->mbParam.max_bframes) { dprintf("--- PFRAME ---"); @@ -562,7 +581,10 @@ if (pFrame->quant == 0) { - RateControlUpdate(pEnc->current->quant, pFrame->length, pFrame->intra); + RateControlUpdate(&pEnc->rate_control, + pEnc->current->quant, + pFrame->length, + pFrame->intra); } pEnc->iFrameNum++; @@ -623,7 +645,7 @@ if (pFrame->quant == 0) { - pEnc->current->quant = RateControlGetQ(0); + pEnc->current->quant = RateControlGetQ(&pEnc->rate_control,0); } else { @@ -716,7 +738,10 @@ if (pFrame->quant == 0) { - RateControlUpdate(pEnc->current->quant, pFrame->length, pFrame->intra); + RateControlUpdate(&pEnc->rate_control, + pEnc->current->quant, + pFrame->length, + pFrame->intra); } #ifdef _DEBUG @@ -1344,4 +1369,4 @@ *pBits = BitstreamPos(bs) - *pBits; } -#endif \ No newline at end of file +#endif