[x264-devel] commit: stats summary: print distribution of numbers of consecutive B-frames (Loren Merritt )
git version control
git at videolan.org
Sat Jul 26 02:38:28 CEST 2008
x264 | branch: master | Loren Merritt <pengvado at akuvian.org> | Fri Jul 25 18:14:31 2008 -0600| [8c8acae0e483b8b048bee3cae8d5539cfbeb0a0c]
stats summary: print distribution of numbers of consecutive B-frames
> http://git.videolan.org/gitweb.cgi/x264.git/?a=commit;h=8c8acae0e483b8b048bee3cae8d5539cfbeb0a0c
---
common/common.h | 1 +
encoder/encoder.c | 28 ++++++++++++++++++++--------
2 files changed, 21 insertions(+), 8 deletions(-)
diff --git a/common/common.h b/common/common.h
index 80648a8..dceabeb 100644
--- a/common/common.h
+++ b/common/common.h
@@ -557,6 +557,7 @@ struct x264_t
int i_slice_count[5];
int64_t i_slice_size[5];
double f_slice_qp[5];
+ int i_consecutive_bframes[X264_BFRAME_MAX+1];
/* */
int64_t i_sqe_global[5];
double f_psnr_average[5];
diff --git a/encoder/encoder.c b/encoder/encoder.c
index bb6d853..cb2d0ce 100644
--- a/encoder/encoder.c
+++ b/encoder/encoder.c
@@ -1712,6 +1712,8 @@ static void x264_encoder_frame_end( x264_t *h, x264_t *thread_current,
for( i_list = 0; i_list < 2; i_list++ )
for( i = 0; i < 32; i++ )
h->stat.i_mb_count_ref[h->sh.i_type][i_list][i] += h->stat.frame.i_mb_count_ref[i_list][i];
+ if( h->sh.i_type == SLICE_TYPE_P )
+ h->stat.i_consecutive_bframes[h->fdec->i_frame - h->fref0[0]->i_frame - 1]++;
if( h->sh.i_type == SLICE_TYPE_B )
{
h->stat.i_direct_frames[ h->sh.b_direct_spatial_mv_pred ] ++;
@@ -1817,7 +1819,7 @@ void x264_encoder_close ( x264_t *h )
{
int64_t i_yuv_size = 3 * h->param.i_width * h->param.i_height / 2;
int64_t i_mb_count_size[2][7] = {{0}};
- char intra[40];
+ char buf[200];
int i, j, i_list, i_type;
int b_print_pcm = h->stat.i_mb_count[SLICE_TYPE_I][I_PCM]
|| h->stat.i_mb_count[SLICE_TYPE_P][I_PCM]
@@ -1867,6 +1869,17 @@ void x264_encoder_close ( x264_t *h )
}
}
}
+ if( h->param.i_bframe && h->stat.i_slice_count[SLICE_TYPE_P] )
+ {
+ char *p = buf;
+ int den = 0;
+ // weight by number of frames (including the P-frame) that are in a sequence of N B-frames
+ for( i=0; i<=h->param.i_bframe; i++ )
+ den += (i+1) * h->stat.i_consecutive_bframes[i];
+ for( i=0; i<=h->param.i_bframe; i++ )
+ p += sprintf( p, " %4.1f%%", 100. * (i+1) * h->stat.i_consecutive_bframes[i] / den );
+ x264_log( h, X264_LOG_INFO, "consecutive B-frames:%s\n", buf );
+ }
for( i_type = 0; i_type < 2; i_type++ )
for( i = 0; i < X264_PARTTYPE_MAX; i++ )
@@ -1880,18 +1893,18 @@ void x264_encoder_close ( x264_t *h )
{
int64_t *i_mb_count = h->stat.i_mb_count[SLICE_TYPE_I];
double i_count = h->stat.i_slice_count[SLICE_TYPE_I] * h->mb.i_mb_count / 100.0;
- x264_print_intra( i_mb_count, i_count, b_print_pcm, intra );
- x264_log( h, X264_LOG_INFO, "mb I %s\n", intra );
+ x264_print_intra( i_mb_count, i_count, b_print_pcm, buf );
+ x264_log( h, X264_LOG_INFO, "mb I %s\n", buf );
}
if( h->stat.i_slice_count[SLICE_TYPE_P] > 0 )
{
int64_t *i_mb_count = h->stat.i_mb_count[SLICE_TYPE_P];
double i_count = h->stat.i_slice_count[SLICE_TYPE_P] * h->mb.i_mb_count / 100.0;
int64_t *i_mb_size = i_mb_count_size[SLICE_TYPE_P];
- x264_print_intra( i_mb_count, i_count, b_print_pcm, intra );
+ x264_print_intra( i_mb_count, i_count, b_print_pcm, buf );
x264_log( h, X264_LOG_INFO,
"mb P %s P16..4: %4.1f%% %4.1f%% %4.1f%% %4.1f%% %4.1f%% skip:%4.1f%%\n",
- intra,
+ buf,
i_mb_size[PIXEL_16x16] / (i_count*4),
(i_mb_size[PIXEL_16x8] + i_mb_size[PIXEL_8x16]) / (i_count*4),
i_mb_size[PIXEL_8x8] / (i_count*4),
@@ -1906,7 +1919,7 @@ void x264_encoder_close ( x264_t *h )
double i_mb_list_count;
int64_t *i_mb_size = i_mb_count_size[SLICE_TYPE_B];
int64_t list_count[3] = {0}; /* 0 == L0, 1 == L1, 2 == BI */
- x264_print_intra( i_mb_count, i_count, b_print_pcm, intra );
+ x264_print_intra( i_mb_count, i_count, b_print_pcm, buf );
for( i = 0; i < X264_PARTTYPE_MAX; i++ )
for( j = 0; j < 2; j++ )
{
@@ -1922,7 +1935,7 @@ void x264_encoder_close ( x264_t *h )
i_mb_list_count = (list_count[0] + list_count[1] + list_count[2]) / 100.0;
x264_log( h, X264_LOG_INFO,
"mb B %s B16..8: %4.1f%% %4.1f%% %4.1f%% direct:%4.1f%% skip:%4.1f%% L0:%4.1f%% L1:%4.1f%% BI:%4.1f%%\n",
- intra,
+ buf,
i_mb_size[PIXEL_16x16] / (i_count*4),
(i_mb_size[PIXEL_16x8] + i_mb_size[PIXEL_8x16]) / (i_count*4),
i_mb_size[PIXEL_8x8] / (i_count*4),
@@ -1968,7 +1981,6 @@ void x264_encoder_close ( x264_t *h )
int i_slice;
for( i_slice = 0; i_slice < 2; i_slice++ )
{
- char buf[200];
char *p = buf;
int64_t i_den = 0;
int i_max = 0;
More information about the x264-devel
mailing list