Fix bug in reference frame counting.
vp8_encode_inter_macroblock() is called in both pick_mb_modes() as well as encode_sb(), thus the number of macroblocks in the counter were twice as big as actual numbers. This doesn't affect output. Change-Id: I6de8a996ee44d2f7f2080d8d2177dd7bc6207c93
This commit is contained in:
Родитель
da8159a479
Коммит
cb1e60fb28
|
@ -873,6 +873,9 @@ static void encode_sb ( VP8_COMP *cpi,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
unsigned char *segment_id;
|
||||||
|
int seg_ref_active;
|
||||||
|
|
||||||
vp8cx_encode_inter_macroblock(cpi, x, tp,
|
vp8cx_encode_inter_macroblock(cpi, x, tp,
|
||||||
recon_yoffset, recon_uvoffset, 1);
|
recon_yoffset, recon_uvoffset, 1);
|
||||||
//Note the encoder may have changed the segment_id
|
//Note the encoder may have changed the segment_id
|
||||||
|
@ -892,6 +895,32 @@ static void encode_sb ( VP8_COMP *cpi,
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// If we have just a single reference frame coded for a segment then
|
||||||
|
// exclude from the reference frame counts used to work out
|
||||||
|
// probabilities. NOTE: At the moment we dont support custom trees
|
||||||
|
// for the reference frame coding for each segment but this is a
|
||||||
|
// possible future action.
|
||||||
|
segment_id = &xd->mode_info_context->mbmi.segment_id;
|
||||||
|
seg_ref_active = segfeature_active( xd, *segment_id, SEG_LVL_REF_FRAME );
|
||||||
|
if ( !seg_ref_active ||
|
||||||
|
( ( check_segref( xd, *segment_id, INTRA_FRAME ) +
|
||||||
|
check_segref( xd, *segment_id, LAST_FRAME ) +
|
||||||
|
check_segref( xd, *segment_id, GOLDEN_FRAME ) +
|
||||||
|
check_segref( xd, *segment_id, ALTREF_FRAME ) ) > 1 ) )
|
||||||
|
{
|
||||||
|
// TODO this may not be a good idea as it makes sample size small and means
|
||||||
|
// the predictor functions cannot use data about most likely value only most
|
||||||
|
// likely unpredicted value.
|
||||||
|
//#if CONFIG_COMPRED
|
||||||
|
// // Only update count for incorrectly predicted cases
|
||||||
|
// if ( !ref_pred_flag )
|
||||||
|
//#endif
|
||||||
|
{
|
||||||
|
cpi->count_mb_ref_frame_usage
|
||||||
|
[xd->mode_info_context->mbmi.ref_frame]++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Count of last ref frame 0,0 usage
|
// Count of last ref frame 0,0 usage
|
||||||
if ((xd->mode_info_context->mbmi.mode == ZEROMV) &&
|
if ((xd->mode_info_context->mbmi.mode == ZEROMV) &&
|
||||||
(xd->mode_info_context->mbmi.ref_frame == LAST_FRAME))
|
(xd->mode_info_context->mbmi.ref_frame == LAST_FRAME))
|
||||||
|
@ -1706,30 +1735,6 @@ void vp8cx_encode_inter_macroblock
|
||||||
cpi->t4x4_count++;
|
cpi->t4x4_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we have just a single reference frame coded for a segment then
|
|
||||||
// exclude from the reference frame counts used to work out
|
|
||||||
// probabilities. NOTE: At the moment we dont support custom trees
|
|
||||||
// for the reference frame coding for each segment but this is a
|
|
||||||
// possible future action.
|
|
||||||
if ( !seg_ref_active ||
|
|
||||||
( ( check_segref( xd, *segment_id, INTRA_FRAME ) +
|
|
||||||
check_segref( xd, *segment_id, LAST_FRAME ) +
|
|
||||||
check_segref( xd, *segment_id, GOLDEN_FRAME ) +
|
|
||||||
check_segref( xd, *segment_id, ALTREF_FRAME ) ) > 1 ) )
|
|
||||||
{
|
|
||||||
// TODO this may not be a good idea as it makes sample size small and means
|
|
||||||
// the predictor functions cannot use data about most likely value only most
|
|
||||||
// likely unpredicted value.
|
|
||||||
//#if CONFIG_COMPRED
|
|
||||||
// // Only update count for incorrectly predicted cases
|
|
||||||
// if ( !ref_pred_flag )
|
|
||||||
//#endif
|
|
||||||
{
|
|
||||||
cpi->count_mb_ref_frame_usage
|
|
||||||
[xd->mode_info_context->mbmi.ref_frame]++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (xd->mode_info_context->mbmi.ref_frame == INTRA_FRAME)
|
if (xd->mode_info_context->mbmi.ref_frame == INTRA_FRAME)
|
||||||
{
|
{
|
||||||
if (xd->mode_info_context->mbmi.mode == B_PRED)
|
if (xd->mode_info_context->mbmi.mode == B_PRED)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче