diff options
author | Pengchong Jin <pengchong@google.com> | 2014-07-14 09:13:38 -0700 |
---|---|---|
committer | Pengchong Jin <pengchong@google.com> | 2014-07-14 17:45:27 -0700 |
commit | f349b071c6d5e806552c261ba13bd99bb5f7c6ce (patch) | |
tree | 338650a8dedeafdfa1fcfe53741fbd002bb59ac7 /vp9/encoder/vp9_encoder.c | |
parent | 1f6aaeddc54bd74fa9f6ba9cf467d31951f580a7 (diff) | |
download | libvpx-f349b071c6d5e806552c261ba13bd99bb5f7c6ce.tar libvpx-f349b071c6d5e806552c261ba13bd99bb5f7c6ce.tar.gz libvpx-f349b071c6d5e806552c261ba13bd99bb5f7c6ce.tar.bz2 libvpx-f349b071c6d5e806552c261ba13bd99bb5f7c6ce.zip |
Rewrite functions related to first pass block stats
Change-Id: I28679f88e2911b06eef5cbc83ecb62b8c69e4c53
Diffstat (limited to 'vp9/encoder/vp9_encoder.c')
-rw-r--r-- | vp9/encoder/vp9_encoder.c | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c index 1a4b880c0..04d518178 100644 --- a/vp9/encoder/vp9_encoder.c +++ b/vp9/encoder/vp9_encoder.c @@ -200,13 +200,6 @@ static void dealloc_compressor_data(VP9_COMP *cpi) { cpi->source_diff_var = NULL; } -#if CONFIG_FP_MB_STATS - if (cpi->use_fp_mb_stats) { - vpx_free(cpi->twopass.this_frame_mb_stats.mb_stats); - cpi->twopass.this_frame_mb_stats.mb_stats = NULL; - } -#endif - for (i = 0; i < MAX_LAG_BUFFERS; ++i) { vp9_free_frame_buffer(&cpi->svc.scaled_frames[i]); } @@ -793,11 +786,11 @@ VP9_COMP *vp9_create_compressor(VP9EncoderConfig *oxcf) { #if CONFIG_FP_MB_STATS cpi->use_fp_mb_stats = 0; if (cpi->use_fp_mb_stats) { - // a place holder for the mb stats obtained from the first pass - CHECK_MEM_ERROR(cm, cpi->twopass.this_frame_mb_stats.mb_stats, - vpx_calloc(cm->MBs * sizeof(FIRSTPASS_MB_STATS), 1)); + // a place holder used to store the first pass mb stats in the first pass + CHECK_MEM_ERROR(cm, cpi->twopass.frame_mb_stats_buf, + vpx_calloc(cm->MBs * sizeof(uint8_t), 1)); } else { - cpi->twopass.this_frame_mb_stats.mb_stats = NULL; + cpi->twopass.frame_mb_stats_buf = NULL; } #endif @@ -940,6 +933,21 @@ VP9_COMP *vp9_create_compressor(VP9EncoderConfig *oxcf) { vp9_init_second_pass_spatial_svc(cpi); } else { +#if CONFIG_FP_MB_STATS + if (cpi->use_fp_mb_stats) { + const size_t psz = cpi->common.MBs * sizeof(uint8_t); + const int ps = (int)(oxcf->firstpass_mb_stats_in.sz / psz); + + cpi->twopass.firstpass_mb_stats.mb_stats_start = + oxcf->firstpass_mb_stats_in.buf; + cpi->twopass.firstpass_mb_stats.mb_stats_in = + cpi->twopass.firstpass_mb_stats.mb_stats_start; + cpi->twopass.firstpass_mb_stats.mb_stats_end = + cpi->twopass.firstpass_mb_stats.mb_stats_start + + (ps - 1) * cpi->common.MBs * sizeof(uint8_t); + } +#endif + cpi->twopass.stats_in_start = oxcf->two_pass_stats_in.buf; cpi->twopass.stats_in = cpi->twopass.stats_in_start; cpi->twopass.stats_in_end = &cpi->twopass.stats_in[packets - 1]; @@ -1130,6 +1138,13 @@ void vp9_remove_compressor(VP9_COMP *cpi) { vpx_free(cpi->mbgraph_stats[i].mb_stats); } +#if CONFIG_FP_MB_STATS + if (cpi->use_fp_mb_stats) { + vpx_free(cpi->twopass.frame_mb_stats_buf); + cpi->twopass.frame_mb_stats_buf = NULL; + } +#endif + vp9_remove_common(&cpi->common); vpx_free(cpi); |