summaryrefslogtreecommitdiff
path: root/vp9/encoder/vp9_encoder.c
diff options
context:
space:
mode:
authorPengchong Jin <pengchong@google.com>2014-07-14 09:13:38 -0700
committerPengchong Jin <pengchong@google.com>2014-07-14 17:45:27 -0700
commitf349b071c6d5e806552c261ba13bd99bb5f7c6ce (patch)
tree338650a8dedeafdfa1fcfe53741fbd002bb59ac7 /vp9/encoder/vp9_encoder.c
parent1f6aaeddc54bd74fa9f6ba9cf467d31951f580a7 (diff)
downloadlibvpx-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.c37
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);