39 |
* MinChen <chenm001@163.com> |
* MinChen <chenm001@163.com> |
40 |
* 14.04.2002 added FrameCodeB() |
* 14.04.2002 added FrameCodeB() |
41 |
* |
* |
42 |
* $Id: encoder.c,v 1.76.2.40 2003-01-21 22:05:44 edgomez Exp $ |
* $Id: encoder.c,v 1.76.2.41 2003-01-25 22:44:50 chl Exp $ |
43 |
* |
* |
44 |
****************************************************************************/ |
****************************************************************************/ |
45 |
|
|
254 |
|
|
255 |
/* try to allocate image memory */ |
/* try to allocate image memory */ |
256 |
|
|
257 |
#ifdef _DEBUG_PSNR |
if (pParam->global & XVID_GLOBAL_EXTRASTATS) |
258 |
image_null(&pEnc->sOriginal); |
image_null(&pEnc->sOriginal); |
|
#endif |
|
259 |
|
|
260 |
image_null(&pEnc->f_refh); |
image_null(&pEnc->f_refh); |
261 |
image_null(&pEnc->f_refv); |
image_null(&pEnc->f_refv); |
269 |
image_null(&pEnc->vInterHV); |
image_null(&pEnc->vInterHV); |
270 |
image_null(&pEnc->vInterHVf); |
image_null(&pEnc->vInterHVf); |
271 |
|
|
272 |
#ifdef _DEBUG_PSNR |
if (pParam->global & XVID_GLOBAL_EXTRASTATS) |
273 |
if (image_create |
{ if (image_create |
274 |
(&pEnc->sOriginal, pEnc->mbParam.edged_width, |
(&pEnc->sOriginal, pEnc->mbParam.edged_width, |
275 |
pEnc->mbParam.edged_height) < 0) |
pEnc->mbParam.edged_height) < 0) |
276 |
goto xvid_err_memory3; |
goto xvid_err_memory3; |
277 |
#endif |
} |
278 |
|
|
279 |
if (image_create |
if (image_create |
280 |
(&pEnc->f_refh, pEnc->mbParam.edged_width, |
(&pEnc->f_refh, pEnc->mbParam.edged_width, |
325 |
goto xvid_err_memory3; |
goto xvid_err_memory3; |
326 |
|
|
327 |
|
|
|
/* B Frames specific init */ |
|
328 |
|
|
329 |
pEnc->mbParam.global = pParam->global; |
pEnc->mbParam.global = pParam->global; |
330 |
|
|
331 |
|
/* B Frames specific init */ |
332 |
pEnc->mbParam.max_bframes = pParam->max_bframes; |
pEnc->mbParam.max_bframes = pParam->max_bframes; |
333 |
pEnc->mbParam.bquant_ratio = pParam->bquant_ratio; |
pEnc->mbParam.bquant_ratio = pParam->bquant_ratio; |
334 |
pEnc->mbParam.bquant_offset = pParam->bquant_offset; |
pEnc->mbParam.bquant_offset = pParam->bquant_offset; |
464 |
} |
} |
465 |
|
|
466 |
xvid_err_memory3: |
xvid_err_memory3: |
467 |
#ifdef _DEBUG_PSNR |
|
468 |
image_destroy(&pEnc->sOriginal, pEnc->mbParam.edged_width, |
if (pEnc->mbParam.global & XVID_GLOBAL_EXTRASTATS) |
469 |
|
{ image_destroy(&pEnc->sOriginal, pEnc->mbParam.edged_width, |
470 |
pEnc->mbParam.edged_height); |
pEnc->mbParam.edged_height); |
471 |
#endif |
} |
472 |
|
|
473 |
image_destroy(&pEnc->f_refh, pEnc->mbParam.edged_width, |
image_destroy(&pEnc->f_refh, pEnc->mbParam.edged_width, |
474 |
pEnc->mbParam.edged_height); |
pEnc->mbParam.edged_height); |
584 |
image_destroy(&pEnc->f_refhv, pEnc->mbParam.edged_width, |
image_destroy(&pEnc->f_refhv, pEnc->mbParam.edged_width, |
585 |
pEnc->mbParam.edged_height); |
pEnc->mbParam.edged_height); |
586 |
|
|
587 |
#ifdef _DEBUG_PSNR |
if (pEnc->mbParam.global & XVID_GLOBAL_EXTRASTATS) |
588 |
image_destroy(&pEnc->sOriginal, pEnc->mbParam.edged_width, |
{ image_destroy(&pEnc->sOriginal, pEnc->mbParam.edged_width, |
589 |
pEnc->mbParam.edged_height); |
pEnc->mbParam.edged_height); |
590 |
#endif |
} |
591 |
|
|
592 |
/* Encoder structure */ |
/* Encoder structure */ |
593 |
|
|
690 |
int input_valid = 1; |
int input_valid = 1; |
691 |
int bframes_count = 0; |
int bframes_count = 0; |
692 |
|
|
|
#ifdef _DEBUG_PSNR |
|
693 |
float psnr; |
float psnr; |
694 |
char temp[128]; |
char temp[128]; |
|
#endif |
|
695 |
|
|
696 |
ENC_CHECK(pEnc); |
ENC_CHECK(pEnc); |
697 |
ENC_CHECK(pFrame); |
ENC_CHECK(pFrame); |
954 |
|
|
955 |
inc_frame_num(pEnc); |
inc_frame_num(pEnc); |
956 |
|
|
957 |
#ifdef _DEBUG_PSNR |
if (pFrame->general & XVID_EXTRASTATS) |
958 |
image_copy(&pEnc->sOriginal, &pEnc->current->image, |
{ image_copy(&pEnc->sOriginal, &pEnc->current->image, |
959 |
pEnc->mbParam.edged_width, pEnc->mbParam.height); |
pEnc->mbParam.edged_width, pEnc->mbParam.height); |
960 |
#endif |
} |
961 |
|
|
962 |
emms(); |
emms(); |
963 |
|
|
1155 |
pResult->kblks = pEnc->current->sStat.kblks; |
pResult->kblks = pEnc->current->sStat.kblks; |
1156 |
pResult->mblks = pEnc->current->sStat.mblks; |
pResult->mblks = pEnc->current->sStat.mblks; |
1157 |
pResult->ublks = pEnc->current->sStat.ublks; |
pResult->ublks = pEnc->current->sStat.ublks; |
|
} |
|
1158 |
|
|
1159 |
emms(); |
if (pFrame->general & XVID_EXTRASTATS) |
1160 |
|
{ pResult->sse_y = |
1161 |
#ifdef _DEBUG_PSNR |
plane_sse( pEnc->sOriginal.y, pEnc->current->image.y, |
|
psnr = |
|
|
image_psnr(&pEnc->sOriginal, &pEnc->current->image, |
|
1162 |
pEnc->mbParam.edged_width, pEnc->mbParam.width, |
pEnc->mbParam.edged_width, pEnc->mbParam.width, |
1163 |
pEnc->mbParam.height); |
pEnc->mbParam.height); |
1164 |
|
|
1165 |
printf("PSNR: %f\n", psnr); |
pResult->sse_u = |
1166 |
// DEBUG(temp); |
plane_sse( pEnc->sOriginal.u, pEnc->current->image.u, |
1167 |
#endif |
pEnc->mbParam.edged_width/2, pEnc->mbParam.width/2, |
1168 |
|
pEnc->mbParam.height/2); |
1169 |
|
|
1170 |
|
pResult->sse_v = |
1171 |
|
plane_sse( pEnc->sOriginal.v, pEnc->current->image.v, |
1172 |
|
pEnc->mbParam.edged_width/2, pEnc->mbParam.width/2, |
1173 |
|
pEnc->mbParam.height/2); |
1174 |
|
} |
1175 |
|
} |
1176 |
|
|
1177 |
|
emms(); |
1178 |
|
|
1179 |
if (pFrame->quant == 0) { |
if (pFrame->quant == 0) { |
1180 |
RateControlUpdate(&pEnc->rate_control, pEnc->current->quant, |
RateControlUpdate(&pEnc->rate_control, pEnc->current->quant, |
1209 |
uint32_t bits; |
uint32_t bits; |
1210 |
uint16_t write_vol_header = 0; |
uint16_t write_vol_header = 0; |
1211 |
|
|
|
#ifdef _DEBUG_PSNR |
|
1212 |
float psnr; |
float psnr; |
1213 |
uint8_t temp[128]; |
uint8_t temp[128]; |
|
#endif |
|
1214 |
|
|
1215 |
start_global_timer(); |
start_global_timer(); |
1216 |
|
|
1241 |
return XVID_ERR_FORMAT; |
return XVID_ERR_FORMAT; |
1242 |
stop_conv_timer(); |
stop_conv_timer(); |
1243 |
|
|
1244 |
#ifdef _DEBUG_PSNR |
if (pFrame->general & XVID_EXTRASTATS) |
1245 |
image_copy(&pEnc->sOriginal, &pEnc->current->image, |
{ image_copy(&pEnc->sOriginal, &pEnc->current->image, |
1246 |
pEnc->mbParam.edged_width, pEnc->mbParam.height); |
pEnc->mbParam.edged_width, pEnc->mbParam.height); |
1247 |
#endif |
} |
1248 |
|
|
1249 |
emms(); |
emms(); |
1250 |
|
|
1356 |
RateControlUpdate(&pEnc->rate_control, pEnc->current->quant, |
RateControlUpdate(&pEnc->rate_control, pEnc->current->quant, |
1357 |
pFrame->length, pFrame->intra); |
pFrame->length, pFrame->intra); |
1358 |
} |
} |
1359 |
#ifdef _DEBUG_PSNR |
if (pFrame->general & XVID_EXTRASTATS) |
1360 |
|
{ |
1361 |
psnr = |
psnr = |
1362 |
image_psnr(&pEnc->sOriginal, &pEnc->current->image, |
image_psnr(&pEnc->sOriginal, &pEnc->current->image, |
1363 |
pEnc->mbParam.edged_width, pEnc->mbParam.width, |
pEnc->mbParam.edged_width, pEnc->mbParam.width, |
1364 |
pEnc->mbParam.height); |
pEnc->mbParam.height); |
1365 |
|
|
1366 |
snprintf(temp, 127, "PSNR: %f\n", psnr); |
snprintf(temp, 127, "PSNR: %f\n", psnr); |
1367 |
// DEBUG(temp); |
} |
|
#endif |
|
1368 |
|
|
1369 |
pEnc->iFrameNum++; |
pEnc->iFrameNum++; |
1370 |
|
|