From ff4f1c4b7663695aed883dc66221bb0899f11ac2 Mon Sep 17 00:00:00 2001 From: Jim Bankoski Date: Tue, 19 Nov 2013 12:50:48 -0800 Subject: scan order / neighbors converted to lookup Change-Id: I64b189dfeee1cf3e90134a1a93497072f3361e5e --- vp9/common/vp9_scan.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++ vp9/common/vp9_scan.h | 10 ++++++++- 2 files changed, 65 insertions(+), 1 deletion(-) (limited to 'vp9/common') 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: -- cgit v1.2.3