diff options
Diffstat (limited to 'third_party/aom/av1/encoder/rdopt.h')
-rw-r--r-- | third_party/aom/av1/encoder/rdopt.h | 126 |
1 files changed, 51 insertions, 75 deletions
diff --git a/third_party/aom/av1/encoder/rdopt.h b/third_party/aom/av1/encoder/rdopt.h index dbc7527fb..1fa3d68ce 100644 --- a/third_party/aom/av1/encoder/rdopt.h +++ b/third_party/aom/av1/encoder/rdopt.h @@ -13,16 +13,20 @@ #define AV1_ENCODER_RDOPT_H_ #include "av1/common/blockd.h" +#include "av1/common/txb_common.h" #include "av1/encoder/block.h" #include "av1/encoder/context_tree.h" +#include "av1/encoder/encoder.h" +#include "av1/encoder/encodetxb.h" #ifdef __cplusplus extern "C" { #endif +#define MAX_REF_MV_SERCH 3 + struct TileInfo; -struct AV1_COMP; struct macroblock; struct RD_STATS; @@ -35,7 +39,6 @@ static INLINE void av1_update_txb_coeff_cost(RD_STATS *rd_stats, int plane, (void)tx_size; rd_stats->txb_coeff_cost[plane] += txb_coeff_cost; -#if CONFIG_VAR_TX { const int txb_h = tx_size_high_unit[tx_size]; const int txb_w = tx_size_wide_unit[tx_size]; @@ -48,113 +51,86 @@ static INLINE void av1_update_txb_coeff_cost(RD_STATS *rd_stats, int plane, } assert(blk_row < TXB_COEFF_COST_MAP_SIZE); assert(blk_col < TXB_COEFF_COST_MAP_SIZE); -#endif } #endif -typedef enum OUTPUT_STATUS { - OUTPUT_HAS_PREDICTED_PIXELS, - OUTPUT_HAS_DECODED_PIXELS -} OUTPUT_STATUS; - // Returns the number of colors in 'src'. -int av1_count_colors(const uint8_t *src, int stride, int rows, int cols); -#if CONFIG_HIGHBITDEPTH +int av1_count_colors(const uint8_t *src, int stride, int rows, int cols, + int *val_count); // Same as av1_count_colors(), but for high-bitdepth mode. int av1_count_colors_highbd(const uint8_t *src8, int stride, int rows, int cols, - int bit_depth); -#endif // CONFIG_HIGHBITDEPTH - -void av1_dist_block(const AV1_COMP *cpi, MACROBLOCK *x, int plane, - BLOCK_SIZE plane_bsize, int block, int blk_row, int blk_col, - TX_SIZE tx_size, int64_t *out_dist, int64_t *out_sse, - OUTPUT_STATUS output_status); + int bit_depth, int *val_count); #if CONFIG_DIST_8X8 -int64_t av1_dist_8x8(const AV1_COMP *const cpi, const MACROBLOCK *x, +int64_t av1_dist_8x8(const struct AV1_COMP *const cpi, const MACROBLOCK *x, const uint8_t *src, int src_stride, const uint8_t *dst, int dst_stride, const BLOCK_SIZE tx_bsize, int bsw, int bsh, int visible_w, int visible_h, int qindex); #endif -#if !CONFIG_PVQ || CONFIG_VAR_TX -int av1_cost_coeffs(const AV1_COMP *const cpi, MACROBLOCK *x, int plane, - int blk_row, int blk_col, int block, TX_SIZE tx_size, - const SCAN_ORDER *scan_order, const ENTROPY_CONTEXT *a, - const ENTROPY_CONTEXT *l, int use_fast_coef_costing); +static INLINE int av1_cost_skip_txb(MACROBLOCK *x, const TXB_CTX *const txb_ctx, + int plane, TX_SIZE tx_size) { + const TX_SIZE txs_ctx = get_txsize_entropy_ctx(tx_size); + const PLANE_TYPE plane_type = get_plane_type(plane); + const LV_MAP_COEFF_COST *const coeff_costs = + &x->coeff_costs[txs_ctx][plane_type]; + return coeff_costs->txb_skip_cost[txb_ctx->txb_skip_ctx][1]; +} + +static INLINE int av1_cost_coeffs(const AV1_COMMON *const cm, MACROBLOCK *x, + int plane, int blk_row, int blk_col, + int block, TX_SIZE tx_size, + const TXB_CTX *const txb_ctx, + int use_fast_coef_costing) { +#if TXCOEFF_COST_TIMER + struct aom_usec_timer timer; + aom_usec_timer_start(&timer); +#endif + (void)use_fast_coef_costing; + const int cost = av1_cost_coeffs_txb(cm, x, plane, blk_row, blk_col, block, + tx_size, txb_ctx); +#if TXCOEFF_COST_TIMER + AV1_COMMON *tmp_cm = (AV1_COMMON *)&cpi->common; + aom_usec_timer_mark(&timer); + const int64_t elapsed_time = aom_usec_timer_elapsed(&timer); + tmp_cm->txcoeff_cost_timer += elapsed_time; + ++tmp_cm->txcoeff_cost_count; #endif + return cost; +} + void av1_rd_pick_intra_mode_sb(const struct AV1_COMP *cpi, struct macroblock *x, - struct RD_STATS *rd_cost, BLOCK_SIZE bsize, - PICK_MODE_CONTEXT *ctx, int64_t best_rd); + int mi_row, int mi_col, struct RD_STATS *rd_cost, + BLOCK_SIZE bsize, PICK_MODE_CONTEXT *ctx, + int64_t best_rd); -unsigned int av1_get_sby_perpixel_variance(const AV1_COMP *cpi, +unsigned int av1_get_sby_perpixel_variance(const struct AV1_COMP *cpi, const struct buf_2d *ref, BLOCK_SIZE bs); -#if CONFIG_HIGHBITDEPTH -unsigned int av1_high_get_sby_perpixel_variance(const AV1_COMP *cpi, +unsigned int av1_high_get_sby_perpixel_variance(const struct AV1_COMP *cpi, const struct buf_2d *ref, BLOCK_SIZE bs, int bd); -#endif void av1_rd_pick_inter_mode_sb(const struct AV1_COMP *cpi, struct TileDataEnc *tile_data, struct macroblock *x, int mi_row, int mi_col, - struct RD_STATS *rd_cost, -#if CONFIG_SUPERTX - int *returnrate_nocoef, -#endif // CONFIG_SUPERTX - BLOCK_SIZE bsize, PICK_MODE_CONTEXT *ctx, - int64_t best_rd_so_far); + struct RD_STATS *rd_cost, BLOCK_SIZE bsize, + PICK_MODE_CONTEXT *ctx, int64_t best_rd_so_far); void av1_rd_pick_inter_mode_sb_seg_skip( const struct AV1_COMP *cpi, struct TileDataEnc *tile_data, struct macroblock *x, int mi_row, int mi_col, struct RD_STATS *rd_cost, BLOCK_SIZE bsize, PICK_MODE_CONTEXT *ctx, int64_t best_rd_so_far); -int av1_internal_image_edge(const struct AV1_COMP *cpi); -int av1_active_h_edge(const struct AV1_COMP *cpi, int mi_row, int mi_step); -int av1_active_v_edge(const struct AV1_COMP *cpi, int mi_col, int mi_step); -int av1_active_edge_sb(const struct AV1_COMP *cpi, int mi_row, int mi_col); - -#if CONFIG_MOTION_VAR && CONFIG_NCOBMC -void av1_check_ncobmc_rd(const struct AV1_COMP *cpi, struct macroblock *x, - int mi_row, int mi_col); -#endif // CONFIG_MOTION_VAR && CONFIG_NCOBMC - -#if CONFIG_SUPERTX -#if CONFIG_VAR_TX -void av1_tx_block_rd_b(const AV1_COMP *cpi, MACROBLOCK *x, TX_SIZE tx_size, - int blk_row, int blk_col, int plane, int block, - int plane_bsize, const ENTROPY_CONTEXT *a, - const ENTROPY_CONTEXT *l, RD_STATS *rd_stats); +#if CONFIG_COLLECT_INTER_MODE_RD_STATS +#define INTER_MODE_RD_TEST 0 +void av1_inter_mode_data_init(); +void av1_inter_mode_data_fit(int rdmult); +void av1_inter_mode_data_show(const AV1_COMMON *cm); #endif -void av1_txfm_rd_in_plane_supertx(MACROBLOCK *x, const AV1_COMP *cpi, int *rate, - int64_t *distortion, int *skippable, - int64_t *sse, int64_t ref_best_rd, int plane, - BLOCK_SIZE bsize, TX_SIZE tx_size, - int use_fast_coef_casting); -#endif // CONFIG_SUPERTX - #ifdef __cplusplus } // extern "C" #endif -int av1_tx_type_cost(const AV1_COMMON *cm, const MACROBLOCK *x, - const MACROBLOCKD *xd, BLOCK_SIZE bsize, int plane, - TX_SIZE tx_size, TX_TYPE tx_type); - -int64_t get_prediction_rd_cost(const struct AV1_COMP *cpi, struct macroblock *x, - int mi_row, int mi_col, int *skip_blk, - MB_MODE_INFO *backup_mbmi); - -#if CONFIG_NCOBMC_ADAPT_WEIGHT -void av1_check_ncobmc_adapt_weight_rd(const struct AV1_COMP *cpi, - struct macroblock *x, int mi_row, - int mi_col); -int get_ncobmc_mode(const AV1_COMP *const cpi, MACROBLOCK *const x, - MACROBLOCKD *xd, int mi_row, int mi_col, int bsize); - -#endif - #endif // AV1_ENCODER_RDOPT_H_ |