summaryrefslogtreecommitdiff
path: root/vp9/common
diff options
context:
space:
mode:
authorJim Bankoski <jimbankoski@google.com>2013-11-19 12:50:48 -0800
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>2013-11-19 12:55:44 -0800
commitff4f1c4b7663695aed883dc66221bb0899f11ac2 (patch)
tree1c981e5e9089c37297197ea94ab46d3d62beb471 /vp9/common
parent5b3a8563deb9341300354dced690ba4e390ee590 (diff)
downloadlibvpx-ff4f1c4b7663695aed883dc66221bb0899f11ac2.tar
libvpx-ff4f1c4b7663695aed883dc66221bb0899f11ac2.tar.gz
libvpx-ff4f1c4b7663695aed883dc66221bb0899f11ac2.tar.bz2
libvpx-ff4f1c4b7663695aed883dc66221bb0899f11ac2.zip
scan order / neighbors converted to lookup
Change-Id: I64b189dfeee1cf3e90134a1a93497072f3361e5e
Diffstat (limited to 'vp9/common')
-rw-r--r--vp9/common/vp9_scan.c56
-rw-r--r--vp9/common/vp9_scan.h10
2 files changed, 65 insertions, 1 deletions
diff --git a/vp9/common/vp9_scan.c b/vp9/common/vp9_scan.c
index f17da9110..f62150fd4 100644
--- a/vp9/common/vp9_scan.c
+++ b/vp9/common/vp9_scan.c
@@ -266,6 +266,62 @@ DECLARE_ALIGNED(16, int16_t, vp9_row_iscan_16x16[256]);
DECLARE_ALIGNED(16, int16_t, vp9_default_iscan_16x16[256]);
DECLARE_ALIGNED(16, int16_t, vp9_default_iscan_32x32[1024]);
+const scan_order inter_scan_orders[TX_SIZES] = {
+ {vp9_default_scan_4x4, vp9_default_scan_4x4_neighbors}, // NEWMV
+ {vp9_default_scan_8x8, vp9_default_scan_8x8_neighbors}, // NEWMV
+ {vp9_default_scan_16x16, vp9_default_scan_16x16_neighbors}, // NEWMV
+ {vp9_default_scan_32x32, vp9_default_scan_32x32_neighbors}, // NEWMV
+};
+
+const scan_order intra_scan_orders[TX_SIZES][INTRA_MODES] = {
+ { // 4X4
+ {vp9_default_scan_4x4, vp9_default_scan_4x4_neighbors}, // DC
+ {vp9_row_scan_4x4, vp9_row_scan_4x4_neighbors}, // V
+ {vp9_col_scan_4x4, vp9_col_scan_4x4_neighbors}, // H
+ {vp9_default_scan_4x4, vp9_default_scan_4x4_neighbors}, // D45
+ {vp9_default_scan_4x4, vp9_default_scan_4x4_neighbors}, // D135
+ {vp9_row_scan_4x4, vp9_row_scan_4x4_neighbors}, // D117
+ {vp9_col_scan_4x4, vp9_col_scan_4x4_neighbors}, // D153
+ {vp9_col_scan_4x4, vp9_col_scan_4x4_neighbors}, // D207
+ {vp9_row_scan_4x4, vp9_row_scan_4x4_neighbors}, // D63
+ {vp9_default_scan_4x4, vp9_default_scan_4x4_neighbors}, // TM
+ }, { // 8x8
+ {vp9_default_scan_8x8, vp9_default_scan_8x8_neighbors}, // DC
+ {vp9_row_scan_8x8, vp9_row_scan_8x8_neighbors}, // V
+ {vp9_col_scan_8x8, vp9_col_scan_8x8_neighbors}, // H
+ {vp9_default_scan_8x8, vp9_default_scan_8x8_neighbors}, // D45
+ {vp9_default_scan_8x8, vp9_default_scan_8x8_neighbors}, // D135
+ {vp9_row_scan_8x8, vp9_row_scan_8x8_neighbors}, // D117
+ {vp9_col_scan_8x8, vp9_col_scan_8x8_neighbors}, // D153
+ {vp9_col_scan_8x8, vp9_col_scan_8x8_neighbors}, // D207
+ {vp9_row_scan_8x8, vp9_row_scan_8x8_neighbors}, // D63
+ {vp9_default_scan_8x8, vp9_default_scan_8x8_neighbors}, // TM
+ }, { // 16x16
+ {vp9_default_scan_16x16, vp9_default_scan_16x16_neighbors}, // DC
+ {vp9_row_scan_16x16, vp9_row_scan_16x16_neighbors}, // V
+ {vp9_col_scan_16x16, vp9_col_scan_16x16_neighbors}, // H
+ {vp9_default_scan_16x16, vp9_default_scan_16x16_neighbors}, // D45
+ {vp9_default_scan_16x16, vp9_default_scan_16x16_neighbors}, // D135
+ {vp9_row_scan_16x16, vp9_row_scan_16x16_neighbors}, // D117
+ {vp9_col_scan_16x16, vp9_col_scan_16x16_neighbors}, // D153
+ {vp9_col_scan_16x16, vp9_col_scan_16x16_neighbors}, // D207
+ {vp9_row_scan_16x16, vp9_row_scan_16x16_neighbors}, // D63
+ {vp9_default_scan_16x16, vp9_default_scan_16x16_neighbors}, // TM
+ }, { // 32x32
+ {vp9_default_scan_32x32, vp9_default_scan_32x32_neighbors}, // DC
+ {vp9_default_scan_32x32, vp9_default_scan_32x32_neighbors}, // V
+ {vp9_default_scan_32x32, vp9_default_scan_32x32_neighbors}, // H
+ {vp9_default_scan_32x32, vp9_default_scan_32x32_neighbors}, // D45
+ {vp9_default_scan_32x32, vp9_default_scan_32x32_neighbors}, // D135
+ {vp9_default_scan_32x32, vp9_default_scan_32x32_neighbors}, // D117
+ {vp9_default_scan_32x32, vp9_default_scan_32x32_neighbors}, // D153
+ {vp9_default_scan_32x32, vp9_default_scan_32x32_neighbors}, // D207
+ {vp9_default_scan_32x32, vp9_default_scan_32x32_neighbors}, // D63
+ {vp9_default_scan_32x32, vp9_default_scan_32x32_neighbors}, // TM
+ }
+};
+
+
static int find_in_scan(const int16_t *scan, int l, int idx) {
int n, l2 = l * l;
for (n = 0; n < l2; n++) {
diff --git a/vp9/common/vp9_scan.h b/vp9/common/vp9_scan.h
index 14a1a7eb0..98fc607ca 100644
--- a/vp9/common/vp9_scan.h
+++ b/vp9/common/vp9_scan.h
@@ -15,6 +15,7 @@
#include "vpx_ports/mem.h"
#include "vp9/common/vp9_enums.h"
+#include "vp9/common/vp9_blockd.h"
#define MAX_NEIGHBORS 2
@@ -67,9 +68,16 @@ extern DECLARE_ALIGNED(16, int16_t,
extern DECLARE_ALIGNED(16, int16_t,
vp9_default_scan_32x32_neighbors[1025 * MAX_NEIGHBORS]);
-
void vp9_init_neighbors();
+typedef struct {
+ const int16_t *scan;
+ const int16_t *neighbors;
+} scan_order;
+
+extern const scan_order intra_scan_orders[TX_SIZES][INTRA_MODES];
+extern const scan_order inter_scan_orders[TX_SIZES];
+
static INLINE const int16_t* get_scan_4x4(TX_TYPE tx_type) {
switch (tx_type) {
case ADST_DCT: