summaryrefslogtreecommitdiff
path: root/vp9/decoder
diff options
context:
space:
mode:
Diffstat (limited to 'vp9/decoder')
-rw-r--r--vp9/decoder/vp9_detokenize.c34
1 files changed, 28 insertions, 6 deletions
diff --git a/vp9/decoder/vp9_detokenize.c b/vp9/decoder/vp9_detokenize.c
index 55ce0171a..bdf578b3e 100644
--- a/vp9/decoder/vp9_detokenize.c
+++ b/vp9/decoder/vp9_detokenize.c
@@ -63,11 +63,24 @@ static int get_signed(BOOL_DECODER *br, int value_to_sign) {
return decode_bool(br, 128) ? -value_to_sign : value_to_sign;
}
-#define INCREMENT_COUNT(token) \
- do { \
+#if CONFIG_NEWCOEFCONTEXT
+#define PT pn
+#define INCREMENT_COUNT(token) \
+ do { \
+ coef_counts[type][coef_bands[c]][pn][token]++; \
+ pn = pt = vp9_prev_token_class[token]; \
+ if (c < seg_eob - 1 && NEWCOEFCONTEXT_BAND_COND(coef_bands[c + 1])) \
+ pn = vp9_get_coef_neighbor_context( \
+ qcoeff_ptr, nodc, neighbors, scan[c + 1]); \
+ } while (0)
+#else
+#define PT pt
+#define INCREMENT_COUNT(token) \
+ do { \
coef_counts[type][coef_bands[c]][pt][token]++; \
pt = vp9_prev_token_class[token]; \
} while (0)
+#endif /* CONFIG_NEWCOEFCONTEXT */
#define WRITE_COEF_CONTINUE(val, token) \
{ \
@@ -92,7 +105,12 @@ static int decode_coefs(VP9D_COMP *dx, const MACROBLOCKD *xd,
const int *const scan, TX_SIZE txfm_size,
const int *coef_bands) {
FRAME_CONTEXT *const fc = &dx->common.fc;
- int pt, c = (type == PLANE_TYPE_Y_NO_DC);
+#if CONFIG_NEWCOEFCONTEXT
+ const int *neighbors;
+ int pn;
+#endif
+ int nodc = (type == PLANE_TYPE_Y_NO_DC);
+ int pt, c = nodc;
vp9_coeff_probs *coef_probs;
vp9_prob *prob;
vp9_coeff_count *coef_counts;
@@ -135,11 +153,15 @@ static int decode_coefs(VP9D_COMP *dx, const MACROBLOCKD *xd,
}
VP9_COMBINEENTROPYCONTEXTS(pt, *a, *l);
+#if CONFIG_NEWCOEFCONTEXT
+ pn = pt;
+ neighbors = vp9_get_coef_neighbors_handle(scan);
+#endif
while (1) {
int val;
const uint8_t *cat6 = cat6_prob;
if (c >= seg_eob) break;
- prob = coef_probs[type][coef_bands[c]][pt];
+ prob = coef_probs[type][coef_bands[c]][PT];
if (!vp9_read(br, prob[EOB_CONTEXT_NODE]))
break;
SKIP_START:
@@ -147,7 +169,7 @@ SKIP_START:
if (!vp9_read(br, prob[ZERO_CONTEXT_NODE])) {
INCREMENT_COUNT(ZERO_TOKEN);
++c;
- prob = coef_probs[type][coef_bands[c]][pt];
+ prob = coef_probs[type][coef_bands[c]][PT];
goto SKIP_START;
}
// ONE_CONTEXT_NODE_0_
@@ -211,7 +233,7 @@ SKIP_START:
}
if (c < seg_eob)
- coef_counts[type][coef_bands[c]][pt][DCT_EOB_TOKEN]++;
+ coef_counts[type][coef_bands[c]][PT][DCT_EOB_TOKEN]++;
a[0] = l[0] = (c > !type);