From 68569dee1416593955c1570d638b3d9250b33012 Mon Sep 17 00:00:00 2001 From: trav90 Date: Mon, 15 Oct 2018 21:45:30 -0500 Subject: Import aom library This is the reference implementation for the Alliance for Open Media's av1 video code. The commit used was 4d668d7feb1f8abd809d1bca0418570a7f142a36. --- third_party/aom/av1/common/scan.h | 95 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 third_party/aom/av1/common/scan.h (limited to 'third_party/aom/av1/common/scan.h') diff --git a/third_party/aom/av1/common/scan.h b/third_party/aom/av1/common/scan.h new file mode 100644 index 000000000..ecef11368 --- /dev/null +++ b/third_party/aom/av1/common/scan.h @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2016, Alliance for Open Media. All rights reserved + * + * This source code is subject to the terms of the BSD 2 Clause License and + * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License + * was not distributed with this source code in the LICENSE file, you can + * obtain it at www.aomedia.org/license/software. If the Alliance for Open + * Media Patent License 1.0 was not distributed with this source code in the + * PATENTS file, you can obtain it at www.aomedia.org/license/patent. + */ + +#ifndef AV1_COMMON_SCAN_H_ +#define AV1_COMMON_SCAN_H_ + +#include "aom/aom_integer.h" +#include "aom_ports/mem.h" + +#include "av1/common/enums.h" +#include "av1/common/onyxc_int.h" +#include "av1/common/blockd.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define MAX_NEIGHBORS 2 + +extern const SCAN_ORDER av1_default_scan_orders[TX_SIZES]; +extern const SCAN_ORDER av1_intra_scan_orders[TX_SIZES_ALL][TX_TYPES]; +extern const SCAN_ORDER av1_inter_scan_orders[TX_SIZES_ALL][TX_TYPES]; + +#if CONFIG_ADAPT_SCAN +void av1_update_scan_count_facade(AV1_COMMON *cm, FRAME_COUNTS *counts, + TX_SIZE tx_size, TX_TYPE tx_type, + const tran_low_t *dqcoeffs, int max_scan); + +// embed r + c and coeff_idx info with nonzero probabilities. When sorting the +// nonzero probabilities, if there is a tie, the coefficient with smaller r + c +// will be scanned first +void av1_augment_prob(TX_SIZE tx_size, TX_TYPE tx_type, uint32_t *prob); + +// apply quick sort on nonzero probabilities to obtain a sort order +void av1_update_sort_order(TX_SIZE tx_size, TX_TYPE tx_type, + const uint32_t *non_zero_prob, int16_t *sort_order); + +// apply topological sort on the nonzero probabilities sorting order to +// guarantee each to-be-scanned coefficient's upper and left coefficient will be +// scanned before the to-be-scanned coefficient. +void av1_update_scan_order(TX_SIZE tx_size, int16_t *sort_order, int16_t *scan, + int16_t *iscan); + +// For each coeff_idx in scan[], update its above and left neighbors in +// neighbors[] accordingly. +void av1_update_neighbors(int tx_size, const int16_t *scan, + const int16_t *iscan, int16_t *neighbors); +void av1_init_scan_order(AV1_COMMON *cm); +void av1_adapt_scan_order(AV1_COMMON *cm); +#endif +void av1_deliver_eob_threshold(const AV1_COMMON *cm, MACROBLOCKD *xd); + +static INLINE int get_coef_context(const int16_t *neighbors, + const uint8_t *token_cache, int c) { + return (1 + token_cache[neighbors[MAX_NEIGHBORS * c + 0]] + + token_cache[neighbors[MAX_NEIGHBORS * c + 1]]) >> + 1; +} + +static INLINE const SCAN_ORDER *get_default_scan(TX_SIZE tx_size, + TX_TYPE tx_type, + int is_inter) { +#if CONFIG_EXT_TX || CONFIG_VAR_TX + return is_inter ? &av1_inter_scan_orders[tx_size][tx_type] + : &av1_intra_scan_orders[tx_size][tx_type]; +#else + (void)is_inter; + return &av1_intra_scan_orders[tx_size][tx_type]; +#endif // CONFIG_EXT_TX +} + +static INLINE const SCAN_ORDER *get_scan(const AV1_COMMON *cm, TX_SIZE tx_size, + TX_TYPE tx_type, int is_inter) { +#if CONFIG_ADAPT_SCAN + (void)is_inter; + return &cm->fc->sc[tx_size][tx_type]; +#else // CONFIG_ADAPT_SCAN + (void)cm; + return get_default_scan(tx_size, tx_type, is_inter); +#endif // CONFIG_ADAPT_SCAN +} + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // AV1_COMMON_SCAN_H_ -- cgit v1.2.3 From 7369c7d7a5eed32963d8af37658286617919f91c Mon Sep 17 00:00:00 2001 From: trav90 Date: Thu, 18 Oct 2018 06:04:57 -0500 Subject: Update aom to commit id f5bdeac22930ff4c6b219be49c843db35970b918 --- third_party/aom/av1/common/scan.h | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'third_party/aom/av1/common/scan.h') diff --git a/third_party/aom/av1/common/scan.h b/third_party/aom/av1/common/scan.h index ecef11368..c9911de4e 100644 --- a/third_party/aom/av1/common/scan.h +++ b/third_party/aom/av1/common/scan.h @@ -78,10 +78,22 @@ static INLINE const SCAN_ORDER *get_default_scan(TX_SIZE tx_size, } static INLINE const SCAN_ORDER *get_scan(const AV1_COMMON *cm, TX_SIZE tx_size, - TX_TYPE tx_type, int is_inter) { + TX_TYPE tx_type, + const MB_MODE_INFO *mbmi) { +#if CONFIG_MRC_TX + // use the DCT_DCT scan order for MRC_DCT for now + if (tx_type == MRC_DCT) tx_type = DCT_DCT; +#endif // CONFIG_MRC_TX + const int is_inter = is_inter_block(mbmi); #if CONFIG_ADAPT_SCAN + (void)mbmi; (void)is_inter; - return &cm->fc->sc[tx_size][tx_type]; +#if CONFIG_EXT_TX + if (tx_type >= IDTX) + return get_default_scan(tx_size, tx_type, is_inter); + else +#endif // CONFIG_EXT_TX + return &cm->fc->sc[tx_size][tx_type]; #else // CONFIG_ADAPT_SCAN (void)cm; return get_default_scan(tx_size, tx_type, is_inter); -- cgit v1.2.3 From ec910d81405c736a4490383a250299a7837c2e64 Mon Sep 17 00:00:00 2001 From: trav90 Date: Thu, 18 Oct 2018 21:53:44 -0500 Subject: Update aom to commit id e87fb2378f01103d5d6e477a4ef6892dc714e614 --- third_party/aom/av1/common/scan.h | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) (limited to 'third_party/aom/av1/common/scan.h') diff --git a/third_party/aom/av1/common/scan.h b/third_party/aom/av1/common/scan.h index c9911de4e..82d2e917f 100644 --- a/third_party/aom/av1/common/scan.h +++ b/third_party/aom/av1/common/scan.h @@ -30,6 +30,9 @@ extern const SCAN_ORDER av1_intra_scan_orders[TX_SIZES_ALL][TX_TYPES]; extern const SCAN_ORDER av1_inter_scan_orders[TX_SIZES_ALL][TX_TYPES]; #if CONFIG_ADAPT_SCAN +#define USE_2X2_PROB 1 +#define USE_TOPOLOGICAL_SORT 0 +#define USE_LIMIT_SCAN_DISTANCE 0 void av1_update_scan_count_facade(AV1_COMMON *cm, FRAME_COUNTS *counts, TX_SIZE tx_size, TX_TYPE tx_type, const tran_low_t *dqcoeffs, int max_scan); @@ -39,6 +42,7 @@ void av1_update_scan_count_facade(AV1_COMMON *cm, FRAME_COUNTS *counts, // will be scanned first void av1_augment_prob(TX_SIZE tx_size, TX_TYPE tx_type, uint32_t *prob); +#if USE_TOPOLOGICAL_SORT // apply quick sort on nonzero probabilities to obtain a sort order void av1_update_sort_order(TX_SIZE tx_size, TX_TYPE tx_type, const uint32_t *non_zero_prob, int16_t *sort_order); @@ -48,14 +52,24 @@ void av1_update_sort_order(TX_SIZE tx_size, TX_TYPE tx_type, // scanned before the to-be-scanned coefficient. void av1_update_scan_order(TX_SIZE tx_size, int16_t *sort_order, int16_t *scan, int16_t *iscan); +#else // USE_TOPOLOGICAL_SORT +void av1_update_scan_order(TX_SIZE tx_size, TX_TYPE tx_type, + uint32_t *non_zero_prob, int16_t *scan, + int16_t *iscan); +#endif // USE_TOPOLOGICAL_SORT // For each coeff_idx in scan[], update its above and left neighbors in // neighbors[] accordingly. -void av1_update_neighbors(int tx_size, const int16_t *scan, +void av1_update_neighbors(TX_SIZE tx_size, const int16_t *scan, const int16_t *iscan, int16_t *neighbors); void av1_init_scan_order(AV1_COMMON *cm); void av1_adapt_scan_order(AV1_COMMON *cm); -#endif +#if USE_2X2_PROB +void av1_down_sample_scan_count(uint32_t *non_zero_count_ds, + const uint32_t *non_zero_count, + TX_SIZE tx_size); +#endif // USE_2X2_PROB +#endif // CONFIG_ADAPT_SCAN void av1_deliver_eob_threshold(const AV1_COMMON *cm, MACROBLOCKD *xd); static INLINE int get_coef_context(const int16_t *neighbors, @@ -77,6 +91,17 @@ static INLINE const SCAN_ORDER *get_default_scan(TX_SIZE tx_size, #endif // CONFIG_EXT_TX } +static INLINE int do_adapt_scan(TX_SIZE tx_size, TX_TYPE tx_type) { + (void)tx_size; +#if CONFIG_EXT_TX + if (tx_size_2d[tx_size] >= 1024 && tx_type != DCT_DCT) return 0; + return tx_type < IDTX; +#else + (void)tx_type; + return 1; +#endif +} + static INLINE const SCAN_ORDER *get_scan(const AV1_COMMON *cm, TX_SIZE tx_size, TX_TYPE tx_type, const MB_MODE_INFO *mbmi) { @@ -84,12 +109,15 @@ static INLINE const SCAN_ORDER *get_scan(const AV1_COMMON *cm, TX_SIZE tx_size, // use the DCT_DCT scan order for MRC_DCT for now if (tx_type == MRC_DCT) tx_type = DCT_DCT; #endif // CONFIG_MRC_TX +#if CONFIG_LGT_FROM_PRED + if (mbmi->use_lgt) tx_type = DCT_DCT; +#endif const int is_inter = is_inter_block(mbmi); #if CONFIG_ADAPT_SCAN (void)mbmi; (void)is_inter; #if CONFIG_EXT_TX - if (tx_type >= IDTX) + if (!do_adapt_scan(tx_size, tx_type)) return get_default_scan(tx_size, tx_type, is_inter); else #endif // CONFIG_EXT_TX -- cgit v1.2.3 From bbcc64772580c8a979288791afa02d30bc476d2e Mon Sep 17 00:00:00 2001 From: trav90 Date: Fri, 19 Oct 2018 21:52:15 -0500 Subject: Update aom to v1.0.0 Update aom to commit id d14c5bb4f336ef1842046089849dee4a301fbbf0. --- third_party/aom/av1/common/scan.h | 101 ++++++-------------------------------- 1 file changed, 14 insertions(+), 87 deletions(-) (limited to 'third_party/aom/av1/common/scan.h') diff --git a/third_party/aom/av1/common/scan.h b/third_party/aom/av1/common/scan.h index 82d2e917f..c5cebc135 100644 --- a/third_party/aom/av1/common/scan.h +++ b/third_party/aom/av1/common/scan.h @@ -25,51 +25,18 @@ extern "C" { #define MAX_NEIGHBORS 2 -extern const SCAN_ORDER av1_default_scan_orders[TX_SIZES]; -extern const SCAN_ORDER av1_intra_scan_orders[TX_SIZES_ALL][TX_TYPES]; -extern const SCAN_ORDER av1_inter_scan_orders[TX_SIZES_ALL][TX_TYPES]; - -#if CONFIG_ADAPT_SCAN -#define USE_2X2_PROB 1 -#define USE_TOPOLOGICAL_SORT 0 -#define USE_LIMIT_SCAN_DISTANCE 0 -void av1_update_scan_count_facade(AV1_COMMON *cm, FRAME_COUNTS *counts, - TX_SIZE tx_size, TX_TYPE tx_type, - const tran_low_t *dqcoeffs, int max_scan); - -// embed r + c and coeff_idx info with nonzero probabilities. When sorting the -// nonzero probabilities, if there is a tie, the coefficient with smaller r + c -// will be scanned first -void av1_augment_prob(TX_SIZE tx_size, TX_TYPE tx_type, uint32_t *prob); +typedef enum SCAN_MODE { + SCAN_MODE_ZIG_ZAG, + SCAN_MODE_COL_DIAG, + SCAN_MODE_ROW_DIAG, + SCAN_MODE_COL_1D, + SCAN_MODE_ROW_1D, + SCAN_MODES +} SCAN_MODE; -#if USE_TOPOLOGICAL_SORT -// apply quick sort on nonzero probabilities to obtain a sort order -void av1_update_sort_order(TX_SIZE tx_size, TX_TYPE tx_type, - const uint32_t *non_zero_prob, int16_t *sort_order); - -// apply topological sort on the nonzero probabilities sorting order to -// guarantee each to-be-scanned coefficient's upper and left coefficient will be -// scanned before the to-be-scanned coefficient. -void av1_update_scan_order(TX_SIZE tx_size, int16_t *sort_order, int16_t *scan, - int16_t *iscan); -#else // USE_TOPOLOGICAL_SORT -void av1_update_scan_order(TX_SIZE tx_size, TX_TYPE tx_type, - uint32_t *non_zero_prob, int16_t *scan, - int16_t *iscan); -#endif // USE_TOPOLOGICAL_SORT +extern const SCAN_ORDER av1_default_scan_orders[TX_SIZES]; +extern const SCAN_ORDER av1_scan_orders[TX_SIZES_ALL][TX_TYPES]; -// For each coeff_idx in scan[], update its above and left neighbors in -// neighbors[] accordingly. -void av1_update_neighbors(TX_SIZE tx_size, const int16_t *scan, - const int16_t *iscan, int16_t *neighbors); -void av1_init_scan_order(AV1_COMMON *cm); -void av1_adapt_scan_order(AV1_COMMON *cm); -#if USE_2X2_PROB -void av1_down_sample_scan_count(uint32_t *non_zero_count_ds, - const uint32_t *non_zero_count, - TX_SIZE tx_size); -#endif // USE_2X2_PROB -#endif // CONFIG_ADAPT_SCAN void av1_deliver_eob_threshold(const AV1_COMMON *cm, MACROBLOCKD *xd); static INLINE int get_coef_context(const int16_t *neighbors, @@ -80,52 +47,12 @@ static INLINE int get_coef_context(const int16_t *neighbors, } static INLINE const SCAN_ORDER *get_default_scan(TX_SIZE tx_size, - TX_TYPE tx_type, - int is_inter) { -#if CONFIG_EXT_TX || CONFIG_VAR_TX - return is_inter ? &av1_inter_scan_orders[tx_size][tx_type] - : &av1_intra_scan_orders[tx_size][tx_type]; -#else - (void)is_inter; - return &av1_intra_scan_orders[tx_size][tx_type]; -#endif // CONFIG_EXT_TX + TX_TYPE tx_type) { + return &av1_scan_orders[tx_size][tx_type]; } -static INLINE int do_adapt_scan(TX_SIZE tx_size, TX_TYPE tx_type) { - (void)tx_size; -#if CONFIG_EXT_TX - if (tx_size_2d[tx_size] >= 1024 && tx_type != DCT_DCT) return 0; - return tx_type < IDTX; -#else - (void)tx_type; - return 1; -#endif -} - -static INLINE const SCAN_ORDER *get_scan(const AV1_COMMON *cm, TX_SIZE tx_size, - TX_TYPE tx_type, - const MB_MODE_INFO *mbmi) { -#if CONFIG_MRC_TX - // use the DCT_DCT scan order for MRC_DCT for now - if (tx_type == MRC_DCT) tx_type = DCT_DCT; -#endif // CONFIG_MRC_TX -#if CONFIG_LGT_FROM_PRED - if (mbmi->use_lgt) tx_type = DCT_DCT; -#endif - const int is_inter = is_inter_block(mbmi); -#if CONFIG_ADAPT_SCAN - (void)mbmi; - (void)is_inter; -#if CONFIG_EXT_TX - if (!do_adapt_scan(tx_size, tx_type)) - return get_default_scan(tx_size, tx_type, is_inter); - else -#endif // CONFIG_EXT_TX - return &cm->fc->sc[tx_size][tx_type]; -#else // CONFIG_ADAPT_SCAN - (void)cm; - return get_default_scan(tx_size, tx_type, is_inter); -#endif // CONFIG_ADAPT_SCAN +static INLINE const SCAN_ORDER *get_scan(TX_SIZE tx_size, TX_TYPE tx_type) { + return get_default_scan(tx_size, tx_type); } #ifdef __cplusplus -- cgit v1.2.3 From b8df135c97a854c2ff9b4394b016649c601177fa Mon Sep 17 00:00:00 2001 From: trav90 Date: Fri, 19 Oct 2018 23:00:02 -0500 Subject: Update libaom to rev b25610052a1398032320008d69b51d2da94f5928 --- third_party/aom/av1/common/scan.h | 7 ------- 1 file changed, 7 deletions(-) (limited to 'third_party/aom/av1/common/scan.h') diff --git a/third_party/aom/av1/common/scan.h b/third_party/aom/av1/common/scan.h index c5cebc135..d206586b5 100644 --- a/third_party/aom/av1/common/scan.h +++ b/third_party/aom/av1/common/scan.h @@ -39,13 +39,6 @@ extern const SCAN_ORDER av1_scan_orders[TX_SIZES_ALL][TX_TYPES]; void av1_deliver_eob_threshold(const AV1_COMMON *cm, MACROBLOCKD *xd); -static INLINE int get_coef_context(const int16_t *neighbors, - const uint8_t *token_cache, int c) { - return (1 + token_cache[neighbors[MAX_NEIGHBORS * c + 0]] + - token_cache[neighbors[MAX_NEIGHBORS * c + 1]]) >> - 1; -} - static INLINE const SCAN_ORDER *get_default_scan(TX_SIZE tx_size, TX_TYPE tx_type) { return &av1_scan_orders[tx_size][tx_type]; -- cgit v1.2.3 From d2499ead93dc4298c0882fe98902acb1b5209f99 Mon Sep 17 00:00:00 2001 From: trav90 Date: Fri, 19 Oct 2018 23:05:00 -0500 Subject: Update libaom to commit ID 1e227d41f0616de9548a673a83a21ef990b62591 --- third_party/aom/av1/common/scan.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'third_party/aom/av1/common/scan.h') diff --git a/third_party/aom/av1/common/scan.h b/third_party/aom/av1/common/scan.h index d206586b5..233dc0efa 100644 --- a/third_party/aom/av1/common/scan.h +++ b/third_party/aom/av1/common/scan.h @@ -9,8 +9,8 @@ * PATENTS file, you can obtain it at www.aomedia.org/license/patent. */ -#ifndef AV1_COMMON_SCAN_H_ -#define AV1_COMMON_SCAN_H_ +#ifndef AOM_AV1_COMMON_SCAN_H_ +#define AOM_AV1_COMMON_SCAN_H_ #include "aom/aom_integer.h" #include "aom_ports/mem.h" @@ -52,4 +52,4 @@ static INLINE const SCAN_ORDER *get_scan(TX_SIZE tx_size, TX_TYPE tx_type) { } // extern "C" #endif -#endif // AV1_COMMON_SCAN_H_ +#endif // AOM_AV1_COMMON_SCAN_H_ -- cgit v1.2.3