summaryrefslogtreecommitdiff
path: root/vp9/decoder
diff options
context:
space:
mode:
authorDeb Mukherjee <debargha@google.com>2013-05-30 08:10:47 -0700
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>2013-05-30 08:10:47 -0700
commitc98bfcfbbb23dc7c8c8641831922877d0d31c67e (patch)
treec700b805ddde78db701295cd2b968903f460b30b /vp9/decoder
parentecf023f6e483706a4bf352b1dfcd9fb996ca4555 (diff)
parentb8b3f1a46d756bef73cb4f3cd6990a01cbacaa25 (diff)
downloadlibvpx-c98bfcfbbb23dc7c8c8641831922877d0d31c67e.tar
libvpx-c98bfcfbbb23dc7c8c8641831922877d0d31c67e.tar.gz
libvpx-c98bfcfbbb23dc7c8c8641831922877d0d31c67e.tar.bz2
libvpx-c98bfcfbbb23dc7c8c8641831922877d0d31c67e.zip
Merge "Balancing coef-tree to reduce bool decodes" into experimental
Diffstat (limited to 'vp9/decoder')
-rw-r--r--vp9/decoder/vp9_decodframe.c3
-rw-r--r--vp9/decoder/vp9_detokenize.c24
2 files changed, 24 insertions, 3 deletions
diff --git a/vp9/decoder/vp9_decodframe.c b/vp9/decoder/vp9_decodframe.c
index a4a8226a0..4e78ebf30 100644
--- a/vp9/decoder/vp9_decodframe.c
+++ b/vp9/decoder/vp9_decodframe.c
@@ -1073,9 +1073,6 @@ int vp9_decode_frame(VP9D_COMP *pbi, const uint8_t **p_data_end) {
if (vp9_read(&header_bc, 252))
pc->fc.vp9_mode_contexts[i][j] = vp9_read_prob(&header_bc);
}
- // Is this needed ?
- if (keyframe)
- vp9_default_coef_probs(pc);
update_frame_context(&pc->fc);
diff --git a/vp9/decoder/vp9_detokenize.c b/vp9/decoder/vp9_detokenize.c
index 890d5d0d6..6f6c88a27 100644
--- a/vp9/decoder/vp9_detokenize.c
+++ b/vp9/decoder/vp9_detokenize.c
@@ -17,8 +17,13 @@
#include "vp9/decoder/vp9_detokenize.h"
#include "vp9/common/vp9_seg_common.h"
+#if CONFIG_BALANCED_COEFTREE
+#define ZERO_CONTEXT_NODE 0
+#define EOB_CONTEXT_NODE 1
+#else
#define EOB_CONTEXT_NODE 0
#define ZERO_CONTEXT_NODE 1
+#endif
#define ONE_CONTEXT_NODE 2
#define LOW_VAL_CONTEXT_NODE 3
#define TWO_CONTEXT_NODE 4
@@ -111,6 +116,9 @@ static int decode_coefs(VP9D_COMP *dx, const MACROBLOCKD *xd,
const int *scan, *nb;
uint8_t token_cache[1024];
const uint8_t * band_translate;
+#if CONFIG_BALANCED_COEFTREE
+ int skip_eob_node = 0;
+#endif
switch (txfm_size) {
default:
@@ -182,11 +190,13 @@ static int decode_coefs(VP9D_COMP *dx, const MACROBLOCKD *xd,
c, default_eob);
band = get_coef_band(band_translate, c);
prob = coef_probs[band][pt];
+#if !CONFIG_BALANCED_COEFTREE
fc->eob_branch_counts[txfm_size][type][ref][band][pt]++;
if (!vp9_read(r, prob[EOB_CONTEXT_NODE]))
break;
SKIP_START:
+#endif
if (c >= seg_eob)
break;
if (c)
@@ -198,8 +208,22 @@ SKIP_START:
if (!vp9_read(r, prob[ZERO_CONTEXT_NODE])) {
INCREMENT_COUNT(ZERO_TOKEN);
++c;
+#if CONFIG_BALANCED_COEFTREE
+ skip_eob_node = 1;
+ continue;
+#else
goto SKIP_START;
+#endif
}
+#if CONFIG_BALANCED_COEFTREE
+ if (!skip_eob_node) {
+ fc->eob_branch_counts[txfm_size][type][ref][band][pt]++;
+ if (!vp9_read(r, prob[EOB_CONTEXT_NODE]))
+ break;
+ }
+ skip_eob_node = 0;
+#endif
+
// ONE_CONTEXT_NODE_0_
if (!vp9_read(r, prob[ONE_CONTEXT_NODE])) {
WRITE_COEF_CONTINUE(1, ONE_TOKEN);