diff options
author | Deb Mukherjee <debargha@google.com> | 2013-05-30 08:10:47 -0700 |
---|---|---|
committer | Gerrit Code Review <gerrit@gerrit.golo.chromium.org> | 2013-05-30 08:10:47 -0700 |
commit | c98bfcfbbb23dc7c8c8641831922877d0d31c67e (patch) | |
tree | c700b805ddde78db701295cd2b968903f460b30b /vp9/decoder | |
parent | ecf023f6e483706a4bf352b1dfcd9fb996ca4555 (diff) | |
parent | b8b3f1a46d756bef73cb4f3cd6990a01cbacaa25 (diff) | |
download | libvpx-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.c | 3 | ||||
-rw-r--r-- | vp9/decoder/vp9_detokenize.c | 24 |
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); |