#include <assert.h>
#include <stdio.h>
#include <math.h>
#include <limits.h>
#include <assert.h>
#include "vpx_config.h"
#include "vp8_rtcd.h"
#include "./vpx_dsp_rtcd.h"
#include "encodeframe.h"
#include "tokenize.h"
#include "treewriter.h"
#include "onyx_int.h"
#include "modecosts.h"
#include "encodeintra.h"
#include "pickinter.h"
#include "vp8/common/common.h"
#include "vp8/common/entropymode.h"
#include "vp8/common/reconinter.h"
#include "vp8/common/reconintra.h"
#include "vp8/common/reconintra4x4.h"
#include "vp8/common/findnearmv.h"
#include "vp8/common/quant_common.h"
#include "encodemb.h"
#include "vp8/encoder/quantize.h"
#include "vpx_dsp/variance.h"
#include "vpx_ports/system_state.h"
#include "mcomp.h"
#include "rdopt.h"
#include "vpx_mem/vpx_mem.h"
#include "vp8/common/systemdependent.h"
#if CONFIG_TEMPORAL_DENOISING
#include "denoising.h"
#endif
extern void vp8_update_zbin_extra(VP8_COMP *cpi, MACROBLOCK *x);
#define MAXF(a, b) …
RATE_DISTORTION;
BEST_MODE;
static const int auto_speed_thresh[17] = …;
const MB_PREDICTION_MODE vp8_mode_order[MAX_MODES] = …;
const int vp8_ref_frame_order[MAX_MODES] = …;
static void fill_token_costs(
int c[BLOCK_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS][MAX_ENTROPY_TOKENS],
const vp8_prob p[BLOCK_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS]
[ENTROPY_NODES]) { … }
static const int rd_iifactor[32] = …;
static const int sad_per_bit16lut[QINDEX_RANGE] = …;
static const int sad_per_bit4lut[QINDEX_RANGE] = …;
void vp8cx_initialize_me_consts(VP8_COMP *cpi, int QIndex) { … }
void vp8_initialize_rd_consts(VP8_COMP *cpi, MACROBLOCK *x, int Qvalue) { … }
void vp8_auto_select_speed(VP8_COMP *cpi) { … }
int vp8_block_error_c(short *coeff, short *dqcoeff) { … }
int vp8_mbblock_error_c(MACROBLOCK *mb, int dc) { … }
int vp8_mbuverror_c(MACROBLOCK *mb) { … }
int VP8_UVSSE(MACROBLOCK *x) { … }
static int cost_coeffs(MACROBLOCK *mb, BLOCKD *b, int type, ENTROPY_CONTEXT *a,
ENTROPY_CONTEXT *l) { … }
static int vp8_rdcost_mby(MACROBLOCK *mb) { … }
static void macro_block_yrd(MACROBLOCK *mb, int *Rate, int *Distortion) { … }
static void copy_predictor(unsigned char *dst, const unsigned char *predictor) { … }
static int rd_pick_intra4x4block(MACROBLOCK *x, BLOCK *be, BLOCKD *b,
B_PREDICTION_MODE *best_mode,
const int *bmode_costs, ENTROPY_CONTEXT *a,
ENTROPY_CONTEXT *l,
int *bestrate, int *bestratey,
int *bestdistortion) { … }
static int rd_pick_intra4x4mby_modes(MACROBLOCK *mb, int *Rate, int *rate_y,
int *Distortion, int best_rd) { … }
static int rd_pick_intra16x16mby_mode(MACROBLOCK *x, int *Rate, int *rate_y,
int *Distortion) { … }
static int rd_cost_mbuv(MACROBLOCK *mb) { … }
static int rd_inter16x16_uv(VP8_COMP *cpi, MACROBLOCK *x, int *rate,
int *distortion, int fullpixel) { … }
static int rd_inter4x4_uv(VP8_COMP *cpi, MACROBLOCK *x, int *rate,
int *distortion, int fullpixel) { … }
static void rd_pick_intra_mbuv_mode(MACROBLOCK *x, int *rate,
int *rate_tokenonly, int *distortion) { … }
int vp8_cost_mv_ref(MB_PREDICTION_MODE m, const int near_mv_ref_ct[4]) { … }
void vp8_set_mbmode_and_mvs(MACROBLOCK *x, MB_PREDICTION_MODE mb, int_mv *mv) { … }
static int labels2mode(MACROBLOCK *x, int const *labelings, int which_label,
B_PREDICTION_MODE this_mode, int_mv *this_mv,
int_mv *best_ref_mv, int *mvcost[2]) { … }
static int rdcost_mbsegment_y(MACROBLOCK *mb, const int *labels,
int which_label, ENTROPY_CONTEXT *ta,
ENTROPY_CONTEXT *tl) { … }
static unsigned int vp8_encode_inter_mb_segment(MACROBLOCK *x,
int const *labels,
int which_label) { … }
static const unsigned int segmentation_to_sseshift[4] = …;
BEST_SEG_INFO;
static void rd_check_segment(VP8_COMP *cpi, MACROBLOCK *x, BEST_SEG_INFO *bsi,
unsigned int segmentation) { … }
static void vp8_cal_step_param(int sr, int *sp) { … }
static int vp8_rd_pick_best_mbsegmentation(VP8_COMP *cpi, MACROBLOCK *x,
int_mv *best_ref_mv, int best_rd,
int *mdcounts, int *returntotrate,
int *returnyrate,
int *returndistortion,
int mvthresh) { … }
void vp8_mv_pred(VP8_COMP *cpi, MACROBLOCKD *xd, const MODE_INFO *here,
int_mv *mvp, int refframe, int *ref_frame_sign_bias, int *sr,
int near_sadidx[]) { … }
void vp8_cal_sad(VP8_COMP *cpi, MACROBLOCKD *xd, MACROBLOCK *x,
int recon_yoffset, int near_sadidx[]) { … }
static void rd_update_mvcount(MACROBLOCK *x, int_mv *best_ref_mv) { … }
static int evaluate_inter_mode_rd(int mdcounts[4], RATE_DISTORTION *rd,
int *disable_skip, VP8_COMP *cpi,
MACROBLOCK *x) { … }
static int calculate_final_rd_costs(int this_rd, RATE_DISTORTION *rd,
int *other_cost, int disable_skip,
int uv_intra_tteob, int intra_rd_penalty,
VP8_COMP *cpi, MACROBLOCK *x) { … }
static void update_best_mode(BEST_MODE *best_mode, int this_rd,
RATE_DISTORTION *rd, int other_cost,
MACROBLOCK *x) { … }
void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
int recon_uvoffset, int *returnrate,
int *returndistortion, int *returnintra, int mb_row,
int mb_col) { … }
void vp8_rd_pick_intra_mode(MACROBLOCK *x, int *rate) { … }