encodetxb.h
/*
* Copyright (c) 2017, 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 AOM_AV1_ENCODER_ENCODETXB_H_
#define AOM_AV1_ENCODER_ENCODETXB_H_
#include "config/aom_config.h"
#include "av1/common/av1_common_int.h"
#include "av1/common/blockd.h"
#include "av1/common/txb_common.h"
#include "av1/encoder/block.h"
#include "av1/encoder/encoder.h"
#include "aom_dsp/bitwriter.h"
#ifdef __cplusplus
extern "C" {
#endif
#define TXB_SKIP_CTX_MASK 15
#define DC_SIGN_CTX_SHIFT 4
#define DC_SIGN_CTX_MASK 3
int av1_get_eob_pos_token(const int eob, int *const extra);
void av1_alloc_txb_buf(AV1_COMP *cpi);
void av1_free_txb_buf(AV1_COMP *cpi);
void av1_write_coeffs_txb(const AV1_COMMON *const cm, MACROBLOCK *const x,
aom_writer *w, int blk_row, int blk_col, int plane,
int block, TX_SIZE tx_size);
void av1_write_intra_coeffs_mb(const AV1_COMMON *const cm, MACROBLOCK *x,
aom_writer *w, BLOCK_SIZE bsize);
uint8_t av1_get_txb_entropy_context(const tran_low_t *qcoeff,
const SCAN_ORDER *scan_order, int eob);
void av1_update_intra_mb_txb_context(const AV1_COMP *cpi, ThreadData *td,
RUN_TYPE dry_run, BLOCK_SIZE bsize,
uint8_t allow_update_cdf);
void av1_update_and_record_txb_context(int plane, int block, int blk_row,
int blk_col, BLOCK_SIZE plane_bsize,
TX_SIZE tx_size, void *arg);
void av1_record_txb_context(int plane, int block, int blk_row, int blk_col,
BLOCK_SIZE plane_bsize, TX_SIZE tx_size, void *arg);
CB_COEFF_BUFFER *av1_get_cb_coeff_buffer(const struct AV1_COMP *cpi, int mi_row,
int mi_col);
static inline int av1_cost_skip_txb(const CoeffCosts *coeff_costs,
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_ =
&coeff_costs->coeff_costs[txs_ctx][plane_type];
return coeff_costs_->txb_skip_cost[txb_ctx->txb_skip_ctx][1];
}
// These numbers are empirically obtained.
static const int plane_rd_mult_chroma[REF_TYPES][PLANE_TYPES] = {
{ 17, 13 },
{ 16, 10 },
};
static const int plane_rd_mult[REF_TYPES][PLANE_TYPES] = {
{ 17, 20 },
{ 16, 20 },
};
#ifdef __cplusplus
}
#endif
#endif // AOM_AV1_ENCODER_ENCODETXB_H_
block.h
MACROBLOCK
struct macroblock MACROBLOCK
Encoder's parameters related to the current coding block.
encoder.h
Declares top-level encoder structures and functions.
av1_get_txb_entropy_context
uint8_t av1_get_txb_entropy_context(const tran_low_t *qcoeff, const SCAN_ORDER *scan_order, int eob)
Pack the context info of the current transform block into an uint8_t.
av1_alloc_txb_buf
void av1_alloc_txb_buf(AV1_COMP *cpi)
Allocate the memory resources for all the macro blocks in the current coding frame.
av1_write_intra_coeffs_mb
void av1_write_intra_coeffs_mb(const AV1_COMMON *const cm, MACROBLOCK *x, aom_writer *w, BLOCK_SIZE bsize)
Write quantized coefficients of all transform blocks in an intra macroblock into the bitstream using ...
av1_write_coeffs_txb
void av1_write_coeffs_txb(const AV1_COMMON *const cm, MACROBLOCK *const x, aom_writer *w, int blk_row, int blk_col, int plane, int block, TX_SIZE tx_size)
Write quantized coefficients in a transform block into bitstream using entropy coding.
av1_record_txb_context
void av1_record_txb_context(int plane, int block, int blk_row, int blk_col, BLOCK_SIZE plane_bsize, TX_SIZE tx_size, void *arg)
Update the entropy context related to coefficient coding for a transform block.
av1_update_intra_mb_txb_context
void av1_update_intra_mb_txb_context(const AV1_COMP *cpi, ThreadData *td, RUN_TYPE dry_run, BLOCK_SIZE bsize, uint8_t allow_update_cdf)
Update the probability model (cdf) and the entropy context related to coefficient coding for all tran...
av1_cost_skip_txb
static int av1_cost_skip_txb(const CoeffCosts *coeff_costs, const TXB_CTX *const txb_ctx, int plane, TX_SIZE tx_size)
Returns the entropy cost associated with skipping the current transform block.
Definition encodetxb.h:254
av1_free_txb_buf
void av1_free_txb_buf(AV1_COMP *cpi)
Free the memory resources for all the macro blocks in the current coding frame.
av1_update_and_record_txb_context
void av1_update_and_record_txb_context(int plane, int block, int blk_row, int blk_col, BLOCK_SIZE plane_bsize, TX_SIZE tx_size, void *arg)
Update the probability model (cdf) and the entropy context related to coefficient coding for a transf...
av1_get_cb_coeff_buffer
CB_COEFF_BUFFER * av1_get_cb_coeff_buffer(const struct AV1_COMP *cpi, int mi_row, int mi_col)
Get the corresponding CB_COEFF_BUFFER of the current macro block.
AV1_COMP
Top level encoder structure.
Definition encoder.h:2897
CB_COEFF_BUFFER
Stores the transforms coefficients for the whole superblock.
Definition block.h:209
CoeffCosts
Holds the costs needed to encode the coefficients.
Definition block.h:814
CoeffCosts::coeff_costs
LV_MAP_COEFF_COST coeff_costs[TX_SIZES][PLANE_TYPES]
Costs for coding the coefficients.
Definition block.h:816
LV_MAP_COEFF_COST
Costs for encoding the coefficients within a level.
Definition block.h:176
LV_MAP_COEFF_COST::txb_skip_cost
int txb_skip_cost[13][2]
Cost to skip txfm for the current txfm block.
Definition block.h:178