--- encoder.c 2003/01/15 14:36:06 1.76.2.39 +++ encoder.c 2003/01/26 05:09:00 1.76.2.42 @@ -39,7 +39,7 @@ * MinChen * 14.04.2002 added FrameCodeB() * - * $Id: encoder.c,v 1.76.2.39 2003/01/15 14:36:06 syskin Exp $ + * $Id: encoder.c,v 1.76.2.42 2003/01/26 05:09:00 suxen_drol Exp $ * ****************************************************************************/ @@ -229,7 +229,7 @@ pEnc->bitrate = pParam->rc_bitrate; - pEnc->iFrameNum = 0; + pEnc->iFrameNum = -1; pEnc->mbParam.iMaxKeyInterval = pParam->max_key_interval; /* try to allocate frame memory */ @@ -254,9 +254,8 @@ /* try to allocate image memory */ -#ifdef _DEBUG_PSNR - image_null(&pEnc->sOriginal); -#endif + if (pParam->global & XVID_GLOBAL_EXTRASTATS) + image_null(&pEnc->sOriginal); image_null(&pEnc->f_refh); image_null(&pEnc->f_refv); @@ -270,12 +269,12 @@ image_null(&pEnc->vInterHV); image_null(&pEnc->vInterHVf); -#ifdef _DEBUG_PSNR - if (image_create - (&pEnc->sOriginal, pEnc->mbParam.edged_width, - pEnc->mbParam.edged_height) < 0) - goto xvid_err_memory3; -#endif + if (pParam->global & XVID_GLOBAL_EXTRASTATS) + { if (image_create + (&pEnc->sOriginal, pEnc->mbParam.edged_width, + pEnc->mbParam.edged_height) < 0) + goto xvid_err_memory3; + } if (image_create (&pEnc->f_refh, pEnc->mbParam.edged_width, @@ -326,9 +325,10 @@ goto xvid_err_memory3; - /* B Frames specific init */ pEnc->mbParam.global = pParam->global; + + /* B Frames specific init */ pEnc->mbParam.max_bframes = pParam->max_bframes; pEnc->mbParam.bquant_ratio = pParam->bquant_ratio; pEnc->mbParam.bquant_offset = pParam->bquant_offset; @@ -464,10 +464,11 @@ } xvid_err_memory3: -#ifdef _DEBUG_PSNR - image_destroy(&pEnc->sOriginal, pEnc->mbParam.edged_width, - pEnc->mbParam.edged_height); -#endif + + if (pEnc->mbParam.global & XVID_GLOBAL_EXTRASTATS) + { image_destroy(&pEnc->sOriginal, pEnc->mbParam.edged_width, + pEnc->mbParam.edged_height); + } image_destroy(&pEnc->f_refh, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height); @@ -583,10 +584,10 @@ image_destroy(&pEnc->f_refhv, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height); -#ifdef _DEBUG_PSNR - image_destroy(&pEnc->sOriginal, pEnc->mbParam.edged_width, - pEnc->mbParam.edged_height); -#endif + if (pEnc->mbParam.global & XVID_GLOBAL_EXTRASTATS) + { image_destroy(&pEnc->sOriginal, pEnc->mbParam.edged_width, + pEnc->mbParam.edged_height); + } /* Encoder structure */ @@ -661,7 +662,6 @@ if (intra < 0) return -1; if (intra == 1) return I_VOP; if (intra == 2) return B_VOP; - if (intra == 3) return S_VOP; return P_VOP; } @@ -690,11 +690,6 @@ int input_valid = 1; int bframes_count = 0; -#ifdef _DEBUG_PSNR - float psnr; - char temp[128]; -#endif - ENC_CHECK(pEnc); ENC_CHECK(pFrame); ENC_CHECK(pFrame->image); @@ -733,10 +728,8 @@ BitstreamPadAlways(&bs); pFrame->length = BitstreamLength(&bs); - if(pEnc->current->coding_type == P_VOP) - pFrame->intra = 0; - else - pFrame->intra = 3; + pFrame->intra = 0; + emms(); @@ -958,10 +951,10 @@ inc_frame_num(pEnc); -#ifdef _DEBUG_PSNR - image_copy(&pEnc->sOriginal, &pEnc->current->image, - pEnc->mbParam.edged_width, pEnc->mbParam.height); -#endif + if (pFrame->general & XVID_EXTRASTATS) + { image_copy(&pEnc->sOriginal, &pEnc->current->image, + pEnc->mbParam.edged_width, pEnc->mbParam.height); + } emms(); @@ -1063,12 +1056,7 @@ } FrameCodeP(pEnc, &bs, &bits, 1, 0); bframes_count = 0; - - if(pEnc->current->coding_type == P_VOP) - pFrame->intra = 0; - else - pFrame->intra = 3; - + pFrame->intra = 0; } else { @@ -1106,10 +1094,7 @@ FrameCodeP(pEnc, &bs, &bits, 1, 0); bframes_count = 0; - if(pEnc->current->coding_type == P_VOP) - pFrame->intra = 0; - else - pFrame->intra = 3; + pFrame->intra = 0; pEnc->flush_bframes = 1; if ((pEnc->mbParam.global & XVID_GLOBAL_PACKED) && (pEnc->bframenum_tail > 0)) { @@ -1167,20 +1152,27 @@ pResult->kblks = pEnc->current->sStat.kblks; pResult->mblks = pEnc->current->sStat.mblks; pResult->ublks = pEnc->current->sStat.ublks; + + if (pFrame->general & XVID_EXTRASTATS) + { pResult->sse_y = + plane_sse( pEnc->sOriginal.y, pEnc->current->image.y, + pEnc->mbParam.edged_width, pEnc->mbParam.width, + pEnc->mbParam.height); + + pResult->sse_u = + plane_sse( pEnc->sOriginal.u, pEnc->current->image.u, + pEnc->mbParam.edged_width/2, pEnc->mbParam.width/2, + pEnc->mbParam.height/2); + + pResult->sse_v = + plane_sse( pEnc->sOriginal.v, pEnc->current->image.v, + pEnc->mbParam.edged_width/2, pEnc->mbParam.width/2, + pEnc->mbParam.height/2); + } } emms(); -#ifdef _DEBUG_PSNR - psnr = - image_psnr(&pEnc->sOriginal, &pEnc->current->image, - pEnc->mbParam.edged_width, pEnc->mbParam.width, - pEnc->mbParam.height); - - printf("PSNR: %f\n", psnr); -// DEBUG(temp); -#endif - if (pFrame->quant == 0) { RateControlUpdate(&pEnc->rate_control, pEnc->current->quant, pFrame->length, pFrame->intra); @@ -1214,10 +1206,8 @@ uint32_t bits; uint16_t write_vol_header = 0; -#ifdef _DEBUG_PSNR float psnr; uint8_t temp[128]; -#endif start_global_timer(); @@ -1248,10 +1238,10 @@ return XVID_ERR_FORMAT; stop_conv_timer(); -#ifdef _DEBUG_PSNR - image_copy(&pEnc->sOriginal, &pEnc->current->image, - pEnc->mbParam.edged_width, pEnc->mbParam.height); -#endif + if (pFrame->general & XVID_EXTRASTATS) + { image_copy(&pEnc->sOriginal, &pEnc->current->image, + pEnc->mbParam.edged_width, pEnc->mbParam.height); + } emms(); @@ -1363,15 +1353,15 @@ RateControlUpdate(&pEnc->rate_control, pEnc->current->quant, pFrame->length, pFrame->intra); } -#ifdef _DEBUG_PSNR - psnr = - image_psnr(&pEnc->sOriginal, &pEnc->current->image, - pEnc->mbParam.edged_width, pEnc->mbParam.width, - pEnc->mbParam.height); - - snprintf(temp, 127, "PSNR: %f\n", psnr); -// DEBUG(temp); -#endif + if (pFrame->general & XVID_EXTRASTATS) + { + psnr = + image_psnr(&pEnc->sOriginal, &pEnc->current->image, + pEnc->mbParam.edged_width, pEnc->mbParam.width, + pEnc->mbParam.height); + + snprintf(temp, 127, "PSNR: %f\n", psnr); + } pEnc->iFrameNum++;