Home | History | Annotate | Download | only in encoder
      1 /*
      2  * Copyright (c) 2017, Alliance for Open Media. All rights reserved
      3  *
      4  * This source code is subject to the terms of the BSD 2 Clause License and
      5  * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
      6  * was not distributed with this source code in the LICENSE file, you can
      7  * obtain it at www.aomedia.org/license/software. If the Alliance for Open
      8  * Media Patent License 1.0 was not distributed with this source code in the
      9  * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
     10  */
     11 
     12 #ifndef AOM_AV1_ENCODER_ENCODETXB_H_
     13 #define AOM_AV1_ENCODER_ENCODETXB_H_
     14 
     15 #include "config/aom_config.h"
     16 
     17 #include "av1/common/blockd.h"
     18 #include "av1/common/onyxc_int.h"
     19 #include "av1/common/txb_common.h"
     20 #include "av1/encoder/block.h"
     21 #include "av1/encoder/encoder.h"
     22 #include "aom_dsp/bitwriter.h"
     23 #ifdef __cplusplus
     24 extern "C" {
     25 #endif
     26 
     27 typedef struct TxbInfo {
     28   tran_low_t *qcoeff;
     29   uint8_t *levels;  // absolute values and clamped to 255.
     30   tran_low_t *dqcoeff;
     31   const tran_low_t *tcoeff;
     32   const int16_t *dequant;
     33   int shift;
     34   TX_SIZE tx_size;
     35   TX_SIZE txs_ctx;
     36   TX_TYPE tx_type;
     37   int bwl;
     38   int width;
     39   int height;
     40   int eob;
     41   int seg_eob;
     42   const SCAN_ORDER *scan_order;
     43   TXB_CTX *txb_ctx;
     44   int64_t rdmult;
     45   const qm_val_t *iqmatrix;
     46   int tx_type_cost;
     47 } TxbInfo;
     48 
     49 void av1_alloc_txb_buf(AV1_COMP *cpi);
     50 void av1_free_txb_buf(AV1_COMP *cpi);
     51 int av1_cost_coeffs_txb(const AV1_COMMON *const cm, const MACROBLOCK *x,
     52                         const int plane, const int block, const TX_SIZE tx_size,
     53                         const TX_TYPE tx_type, const TXB_CTX *const txb_ctx);
     54 void av1_write_coeffs_txb(const AV1_COMMON *const cm, MACROBLOCKD *xd,
     55                           aom_writer *w, int blk_row, int blk_col, int plane,
     56                           TX_SIZE tx_size, const tran_low_t *tcoeff,
     57                           uint16_t eob, TXB_CTX *txb_ctx);
     58 void av1_write_coeffs_mb(const AV1_COMMON *const cm, MACROBLOCK *x, int mi_row,
     59                          int mi_col, aom_writer *w, BLOCK_SIZE bsize);
     60 int av1_get_txb_entropy_context(const tran_low_t *qcoeff,
     61                                 const SCAN_ORDER *scan_order, int eob);
     62 void av1_update_txb_context(const AV1_COMP *cpi, ThreadData *td,
     63                             RUN_TYPE dry_run, BLOCK_SIZE bsize, int *rate,
     64                             int mi_row, int mi_col, uint8_t allow_update_cdf);
     65 
     66 void av1_update_txb_context_b(int plane, int block, int blk_row, int blk_col,
     67                               BLOCK_SIZE plane_bsize, TX_SIZE tx_size,
     68                               void *arg);
     69 
     70 void av1_update_and_record_txb_context(int plane, int block, int blk_row,
     71                                        int blk_col, BLOCK_SIZE plane_bsize,
     72                                        TX_SIZE tx_size, void *arg);
     73 
     74 void av1_set_coeff_buffer(const AV1_COMP *const cpi, MACROBLOCK *const x,
     75                           int mi_row, int mi_col);
     76 
     77 void hbt_destroy();
     78 int av1_optimize_txb_new(const struct AV1_COMP *cpi, MACROBLOCK *x, int plane,
     79                          int block, TX_SIZE tx_size, TX_TYPE tx_type,
     80                          const TXB_CTX *const txb_ctx, int *rate_cost,
     81                          int sharpness, int fast_mode);
     82 
     83 // These numbers are empirically obtained.
     84 static const int plane_rd_mult[REF_TYPES][PLANE_TYPES] = {
     85   { 17, 13 },
     86   { 16, 10 },
     87 };
     88 
     89 #ifdef __cplusplus
     90 }
     91 #endif
     92 
     93 #endif  // AOM_AV1_ENCODER_ENCODETXB_H_
     94