229 |
|
|
230 |
pEnc->bitrate = pParam->rc_bitrate; |
pEnc->bitrate = pParam->rc_bitrate; |
231 |
|
|
232 |
pEnc->iFrameNum = 0; |
pEnc->iFrameNum = -1; |
233 |
pEnc->mbParam.iMaxKeyInterval = pParam->max_key_interval; |
pEnc->mbParam.iMaxKeyInterval = pParam->max_key_interval; |
234 |
|
|
235 |
/* try to allocate frame memory */ |
/* try to allocate frame memory */ |
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 |
|
|
662 |
if (intra < 0) return -1; |
if (intra < 0) return -1; |
663 |
if (intra == 1) return I_VOP; |
if (intra == 1) return I_VOP; |
664 |
if (intra == 2) return B_VOP; |
if (intra == 2) return B_VOP; |
|
if (intra == 3) return S_VOP; |
|
665 |
|
|
666 |
return P_VOP; |
return P_VOP; |
667 |
} |
} |
690 |
int input_valid = 1; |
int input_valid = 1; |
691 |
int bframes_count = 0; |
int bframes_count = 0; |
692 |
|
|
|
#ifdef _DEBUG_PSNR |
|
|
float psnr; |
|
|
char temp[128]; |
|
|
#endif |
|
|
|
|
693 |
ENC_CHECK(pEnc); |
ENC_CHECK(pEnc); |
694 |
ENC_CHECK(pFrame); |
ENC_CHECK(pFrame); |
695 |
ENC_CHECK(pFrame->image); |
ENC_CHECK(pFrame->image); |
728 |
|
|
729 |
BitstreamPadAlways(&bs); |
BitstreamPadAlways(&bs); |
730 |
pFrame->length = BitstreamLength(&bs); |
pFrame->length = BitstreamLength(&bs); |
|
if(pEnc->current->coding_type == P_VOP) |
|
731 |
pFrame->intra = 0; |
pFrame->intra = 0; |
732 |
else |
|
|
pFrame->intra = 3; |
|
733 |
|
|
734 |
emms(); |
emms(); |
735 |
|
|
951 |
|
|
952 |
inc_frame_num(pEnc); |
inc_frame_num(pEnc); |
953 |
|
|
954 |
#ifdef _DEBUG_PSNR |
if (pFrame->general & XVID_EXTRASTATS) |
955 |
image_copy(&pEnc->sOriginal, &pEnc->current->image, |
{ image_copy(&pEnc->sOriginal, &pEnc->current->image, |
956 |
pEnc->mbParam.edged_width, pEnc->mbParam.height); |
pEnc->mbParam.edged_width, pEnc->mbParam.height); |
957 |
#endif |
} |
958 |
|
|
959 |
emms(); |
emms(); |
960 |
|
|
1056 |
} |
} |
1057 |
FrameCodeP(pEnc, &bs, &bits, 1, 0); |
FrameCodeP(pEnc, &bs, &bits, 1, 0); |
1058 |
bframes_count = 0; |
bframes_count = 0; |
|
|
|
|
if(pEnc->current->coding_type == P_VOP) |
|
1059 |
pFrame->intra = 0; |
pFrame->intra = 0; |
|
else |
|
|
pFrame->intra = 3; |
|
|
|
|
1060 |
|
|
1061 |
} else { |
} else { |
1062 |
|
|
1094 |
|
|
1095 |
FrameCodeP(pEnc, &bs, &bits, 1, 0); |
FrameCodeP(pEnc, &bs, &bits, 1, 0); |
1096 |
bframes_count = 0; |
bframes_count = 0; |
|
if(pEnc->current->coding_type == P_VOP) |
|
1097 |
pFrame->intra = 0; |
pFrame->intra = 0; |
|
else |
|
|
pFrame->intra = 3; |
|
1098 |
pEnc->flush_bframes = 1; |
pEnc->flush_bframes = 1; |
1099 |
|
|
1100 |
if ((pEnc->mbParam.global & XVID_GLOBAL_PACKED) && (pEnc->bframenum_tail > 0)) { |
if ((pEnc->mbParam.global & XVID_GLOBAL_PACKED) && (pEnc->bframenum_tail > 0)) { |
1152 |
pResult->kblks = pEnc->current->sStat.kblks; |
pResult->kblks = pEnc->current->sStat.kblks; |
1153 |
pResult->mblks = pEnc->current->sStat.mblks; |
pResult->mblks = pEnc->current->sStat.mblks; |
1154 |
pResult->ublks = pEnc->current->sStat.ublks; |
pResult->ublks = pEnc->current->sStat.ublks; |
|
} |
|
1155 |
|
|
1156 |
emms(); |
if (pFrame->general & XVID_EXTRASTATS) |
1157 |
|
{ pResult->sse_y = |
1158 |
#ifdef _DEBUG_PSNR |
plane_sse( pEnc->sOriginal.y, pEnc->current->image.y, |
|
psnr = |
|
|
image_psnr(&pEnc->sOriginal, &pEnc->current->image, |
|
1159 |
pEnc->mbParam.edged_width, pEnc->mbParam.width, |
pEnc->mbParam.edged_width, pEnc->mbParam.width, |
1160 |
pEnc->mbParam.height); |
pEnc->mbParam.height); |
1161 |
|
|
1162 |
printf("PSNR: %f\n", psnr); |
pResult->sse_u = |
1163 |
// DEBUG(temp); |
plane_sse( pEnc->sOriginal.u, pEnc->current->image.u, |
1164 |
#endif |
pEnc->mbParam.edged_width/2, pEnc->mbParam.width/2, |
1165 |
|
pEnc->mbParam.height/2); |
1166 |
|
|
1167 |
|
pResult->sse_v = |
1168 |
|
plane_sse( pEnc->sOriginal.v, pEnc->current->image.v, |
1169 |
|
pEnc->mbParam.edged_width/2, pEnc->mbParam.width/2, |
1170 |
|
pEnc->mbParam.height/2); |
1171 |
|
} |
1172 |
|
} |
1173 |
|
|
1174 |
|
emms(); |
1175 |
|
|
1176 |
if (pFrame->quant == 0) { |
if (pFrame->quant == 0) { |
1177 |
RateControlUpdate(&pEnc->rate_control, pEnc->current->quant, |
RateControlUpdate(&pEnc->rate_control, pEnc->current->quant, |
1206 |
uint32_t bits; |
uint32_t bits; |
1207 |
uint16_t write_vol_header = 0; |
uint16_t write_vol_header = 0; |
1208 |
|
|
|
#ifdef _DEBUG_PSNR |
|
1209 |
float psnr; |
float psnr; |
1210 |
uint8_t temp[128]; |
uint8_t temp[128]; |
|
#endif |
|
1211 |
|
|
1212 |
start_global_timer(); |
start_global_timer(); |
1213 |
|
|
1238 |
return XVID_ERR_FORMAT; |
return XVID_ERR_FORMAT; |
1239 |
stop_conv_timer(); |
stop_conv_timer(); |
1240 |
|
|
1241 |
#ifdef _DEBUG_PSNR |
if (pFrame->general & XVID_EXTRASTATS) |
1242 |
image_copy(&pEnc->sOriginal, &pEnc->current->image, |
{ image_copy(&pEnc->sOriginal, &pEnc->current->image, |
1243 |
pEnc->mbParam.edged_width, pEnc->mbParam.height); |
pEnc->mbParam.edged_width, pEnc->mbParam.height); |
1244 |
#endif |
} |
1245 |
|
|
1246 |
emms(); |
emms(); |
1247 |
|
|
1318 |
} |
} |
1319 |
|
|
1320 |
if (pFrame->intra < 0) { |
if (pFrame->intra < 0) { |
1321 |
if ((pEnc->iFrameNum == 0) |
if ((pEnc->iFrameNum == -1) |
1322 |
|| ((pEnc->mbParam.iMaxKeyInterval > 0) |
|| ((pEnc->mbParam.iMaxKeyInterval > 0) |
1323 |
&& (pEnc->iFrameNum >= pEnc->mbParam.iMaxKeyInterval))) { |
&& (pEnc->iFrameNum >= pEnc->mbParam.iMaxKeyInterval))) { |
1324 |
pFrame->intra = FrameCodeI(pEnc, &bs, &bits); |
pFrame->intra = FrameCodeI(pEnc, &bs, &bits); |
1353 |
RateControlUpdate(&pEnc->rate_control, pEnc->current->quant, |
RateControlUpdate(&pEnc->rate_control, pEnc->current->quant, |
1354 |
pFrame->length, pFrame->intra); |
pFrame->length, pFrame->intra); |
1355 |
} |
} |
1356 |
#ifdef _DEBUG_PSNR |
if (pFrame->general & XVID_EXTRASTATS) |
1357 |
|
{ |
1358 |
psnr = |
psnr = |
1359 |
image_psnr(&pEnc->sOriginal, &pEnc->current->image, |
image_psnr(&pEnc->sOriginal, &pEnc->current->image, |
1360 |
pEnc->mbParam.edged_width, pEnc->mbParam.width, |
pEnc->mbParam.edged_width, pEnc->mbParam.width, |
1361 |
pEnc->mbParam.height); |
pEnc->mbParam.height); |
1362 |
|
|
1363 |
snprintf(temp, 127, "PSNR: %f\n", psnr); |
snprintf(temp, 127, "PSNR: %f\n", psnr); |
1364 |
// DEBUG(temp); |
} |
|
#endif |
|
1365 |
|
|
1366 |
pEnc->iFrameNum++; |
pEnc->iFrameNum++; |
1367 |
|
|