summaryrefslogtreecommitdiff
path: root/vp9
diff options
context:
space:
mode:
authorPaul Wilkins <paulwilkins@google.com>2013-08-30 08:56:01 -0700
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>2013-08-30 08:56:01 -0700
commit2b9baca4f00a417eef615aedcaec1e6befdbeb1c (patch)
treea567a7b3646a0ec0388e6d63a5492b63fc2cacf2 /vp9
parente22bb0dc8e50a43dc5fdeef0a39258cbf2a78370 (diff)
parent1f4bf79d6598f3e4f786d524867058cd59d997d3 (diff)
downloadlibvpx-2b9baca4f00a417eef615aedcaec1e6befdbeb1c.tar
libvpx-2b9baca4f00a417eef615aedcaec1e6befdbeb1c.tar.gz
libvpx-2b9baca4f00a417eef615aedcaec1e6befdbeb1c.tar.bz2
libvpx-2b9baca4f00a417eef615aedcaec1e6befdbeb1c.zip
Merge "Added per pixel inter rd hit count stats"
Diffstat (limited to 'vp9')
-rw-r--r--vp9/encoder/vp9_onyx_if.c32
-rw-r--r--vp9/encoder/vp9_onyx_int.h8
-rw-r--r--vp9/encoder/vp9_rdopt.c6
3 files changed, 46 insertions, 0 deletions
diff --git a/vp9/encoder/vp9_onyx_if.c b/vp9/encoder/vp9_onyx_if.c
index 22ad682ae..e9c214ff8 100644
--- a/vp9/encoder/vp9_onyx_if.c
+++ b/vp9/encoder/vp9_onyx_if.c
@@ -1725,6 +1725,10 @@ VP9_PTR vp9_create_compressor(VP9_CONFIG *oxcf) {
vp9_zero(cpi->y_uv_mode_count)
+#ifdef MODE_TEST_HIT_STATS
+ vp9_zero(cpi->mode_test_hits)
+#endif
+
return (VP9_PTR) cpi;
}
@@ -1806,6 +1810,34 @@ void vp9_remove_compressor(VP9_PTR *ptr) {
#endif
+#ifdef MODE_TEST_HIT_STATS
+ if (cpi->pass != 1) {
+ double norm_per_pixel_mode_tests = 0;
+ double norm_counts[BLOCK_SIZES];
+ int i;
+ int sb64_per_frame;
+ int norm_factors[BLOCK_SIZES] =
+ {256, 128, 128, 64, 32, 32, 16, 8, 8, 4, 2, 2, 1};
+ FILE *f = fopen("mode_hit_stats.stt", "a");
+
+ // On average, how many mode tests do we do
+ for (i = 0; i < BLOCK_SIZES; ++i) {
+ norm_counts[i] = (double)cpi->mode_test_hits[i] /
+ (double)norm_factors[i];
+ norm_per_pixel_mode_tests += norm_counts[i];
+ }
+ // Convert to a number per 64x64 and per frame
+ sb64_per_frame = ((cpi->common.height + 63) / 64) *
+ ((cpi->common.width + 63) / 64);
+ norm_per_pixel_mode_tests =
+ norm_per_pixel_mode_tests /
+ (double)(cpi->common.current_video_frame * sb64_per_frame);
+
+ fprintf(f, "%6.4f\n", norm_per_pixel_mode_tests);
+ fclose(f);
+ }
+#endif
+
#ifdef ENTROPY_STATS
{
int i, j, k;
diff --git a/vp9/encoder/vp9_onyx_int.h b/vp9/encoder/vp9_onyx_int.h
index 0933185b9..252e98251 100644
--- a/vp9/encoder/vp9_onyx_int.h
+++ b/vp9/encoder/vp9_onyx_int.h
@@ -36,6 +36,8 @@
#define DISABLE_RC_LONG_TERM_MEM 0
#endif
+// #define MODE_TEST_HIT_STATS
+
// #define SPEEDSTATS 1
#if CONFIG_MULTIPLE_ARF
// Set MIN_GF_INTERVAL to 1 for the full decomposition.
@@ -664,6 +666,12 @@ typedef struct VP9_COMP {
#ifdef ENTROPY_STATS
int64_t mv_ref_stats[INTER_MODE_CONTEXTS][INTER_MODES - 1][2];
#endif
+
+
+#ifdef MODE_TEST_HIT_STATS
+ // Debug / test stats
+ int64_t mode_test_hits[BLOCK_SIZES];
+#endif
} VP9_COMP;
static int get_ref_frame_idx(VP9_COMP *cpi, MV_REFERENCE_FRAME ref_frame) {
diff --git a/vp9/encoder/vp9_rdopt.c b/vp9/encoder/vp9_rdopt.c
index 00bff0e9f..39b6544f6 100644
--- a/vp9/encoder/vp9_rdopt.c
+++ b/vp9/encoder/vp9_rdopt.c
@@ -3341,6 +3341,12 @@ int64_t vp9_rd_pick_inter_mode_sb(VP9_COMP *cpi, MACROBLOCK *x,
continue;
}
+#ifdef MODE_TEST_HIT_STATS
+ // TEST/DEBUG CODE
+ // Keep a rcord of the number of test hits at each size
+ cpi->mode_test_hits[bsize]++;
+#endif
+
if (this_mode == I4X4_PRED) {
int rate;