summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Bankoski <jimbankoski@google.com>2013-11-19 15:31:43 -0800
committerJim Bankoski <jimbankoski@google.com>2013-11-19 15:31:43 -0800
commitd6667dd54f728ae5f856c697279158111740f963 (patch)
treeda8c6bb6f29eb3caca7b55a6498a148b993da1aa
parent8cf352abac23e655d5c40df273ab47e2c8395944 (diff)
downloadlibvpx-d6667dd54f728ae5f856c697279158111740f963.tar
libvpx-d6667dd54f728ae5f856c697279158111740f963.tar.gz
libvpx-d6667dd54f728ae5f856c697279158111740f963.tar.bz2
libvpx-d6667dd54f728ae5f856c697279158111740f963.zip
scan order table lookup same for encoder and decoder
Change-Id: I473947b5ca70b7a81151926284bff86f8555492a
-rw-r--r--vp9/common/vp9_entropy.h28
-rw-r--r--vp9/decoder/vp9_detokenize.c15
2 files changed, 14 insertions, 29 deletions
diff --git a/vp9/common/vp9_entropy.h b/vp9/common/vp9_entropy.h
index 9ab918fa3..0370b3251 100644
--- a/vp9/common/vp9_entropy.h
+++ b/vp9/common/vp9_entropy.h
@@ -186,23 +186,19 @@ static int get_entropy_context(TX_SIZE tx_size, const ENTROPY_CONTEXT *a,
static void get_scan(const MACROBLOCKD *xd, TX_SIZE tx_size,
PLANE_TYPE type, int block_idx,
const int16_t **scan, const int16_t **scan_nb) {
- switch (tx_size) {
- case TX_4X4:
- get_scan_nb_4x4(get_tx_type_4x4(type, xd, block_idx), scan, scan_nb);
- break;
- case TX_8X8:
- get_scan_nb_8x8(get_tx_type_8x8(type, xd), scan, scan_nb);
- break;
- case TX_16X16:
- get_scan_nb_16x16(get_tx_type_16x16(type, xd), scan, scan_nb);
- break;
- case TX_32X32:
- *scan = vp9_default_scan_32x32;
- *scan_nb = vp9_default_scan_32x32_neighbors;
- break;
- default:
- assert(!"Invalid transform size.");
+ const MODE_INFO *const mi = xd->mi_8x8[0];
+ const MB_MODE_INFO *const mbmi = &mi->mbmi;
+ const scan_order *so;
+
+ if (is_inter_block(mbmi) || type != PLANE_TYPE_Y_WITH_DC || xd->lossless) {
+ so = &inter_scan_orders[tx_size];
+ } else {
+ const MB_PREDICTION_MODE mode =
+ mbmi->sb_type < BLOCK_8X8 ? mi->bmi[block_idx].as_mode : mbmi->mode;
+ so = &intra_scan_orders[tx_size][mode];
}
+ *scan = so->scan;
+ *scan_nb = so->neighbors;
}
#endif // VP9_COMMON_VP9_ENTROPY_H_
diff --git a/vp9/decoder/vp9_detokenize.c b/vp9/decoder/vp9_detokenize.c
index 522d66602..75e7e40ae 100644
--- a/vp9/decoder/vp9_detokenize.c
+++ b/vp9/decoder/vp9_detokenize.c
@@ -111,22 +111,11 @@ static int decode_coefs(VP9_COMMON *cm, const MACROBLOCKD *xd,
const uint8_t *cat6;
const uint8_t *band_translate = get_band_translate(tx_size);
const int dq_shift = (tx_size == TX_32X32);
- const MODE_INFO *const mi = xd->mi_8x8[0];
- const MB_MODE_INFO *const mbmi = &mi->mbmi;
- scan_order const *so;
int v;
int16_t dqv = dq[0];
- if (mbmi->ref_frame[0] > 0 || type != PLANE_TYPE_Y_WITH_DC || xd->lossless) {
- so = &inter_scan_orders[tx_size];
- } else {
- MB_PREDICTION_MODE mode = mbmi->mode;
- if (mbmi->sb_type < BLOCK_8X8)
- mode = mi->bmi[block_idx].as_mode;
- so = &intra_scan_orders[tx_size][mode];
- }
- scan = so->scan;
- nb = so->neighbors;
+ get_scan(xd, tx_size, type, block_idx, &scan, &nb);
+
while (c < seg_eob) {
int val;
if (c)