chromium/third_party/libaom/source/libaom/av1/common/reconinter.h

/*
 * 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 AOM_AV1_COMMON_RECONINTER_H_
#define AOM_AV1_COMMON_RECONINTER_H_

#include "av1/common/av1_common_int.h"
#include "av1/common/convolve.h"
#include "av1/common/filter.h"
#include "av1/common/warped_motion.h"
#include "aom/aom_integer.h"

// Work out how many pixels off the edge of a reference frame we're allowed
// to go when forming an inter prediction.
// The outermost row/col of each referernce frame is extended by
// (AOM_BORDER_IN_PIXELS >> subsampling) pixels, but we need to keep
// at least AOM_INTERP_EXTEND pixels within that to account for filtering.
//
// We have to break this up into two macros to keep both clang-format and
// tools/lint-hunks.py happy.
#define AOM_LEFT_TOP_MARGIN_PX(subsampling)
#define AOM_LEFT_TOP_MARGIN_SCALED(subsampling)

#ifdef __cplusplus
extern "C" {
#endif

#define MAX_WEDGE_TYPES

#define MAX_WEDGE_SIZE_LOG2
#define MAX_WEDGE_SIZE
#define MAX_WEDGE_SQUARE

#define WEDGE_WEIGHT_BITS

#define WEDGE_NONE

// Angles are with respect to horizontal anti-clockwise
enum {} UENUM1BYTE();

// 3-tuple: {direction, x_offset, y_offset}
wedge_code_type;

wedge_masks_type;

wedge_params_type;

extern const wedge_params_type av1_wedge_params_lookup[BLOCK_SIZES_ALL];

SubpelParams;

struct build_prediction_ctxt {};

InterPredMode;

InterCompMode;

InterPredParams;

// Initialize sub-pel params required for inter prediction.
static inline void init_subpel_params(const MV *const src_mv,
                                      InterPredParams *const inter_pred_params,
                                      SubpelParams *subpel_params, int width,
                                      int height) {}

// Initialize interp filter required for inter prediction.
static inline void init_interp_filter_params(
    const InterpFilterParams *interp_filter_params[2],
    const InterpFilters *filter, int block_width, int block_height,
    int is_intrabc) {}

// Initialize parameters required for inter prediction at mode level.
static inline void init_inter_mode_params(
    const MV *const src_mv, InterPredParams *const inter_pred_params,
    SubpelParams *subpel_params, const struct scale_factors *sf, int width,
    int height) {}

// Initialize parameters required for inter prediction at block level.
static inline void init_inter_block_params(InterPredParams *inter_pred_params,
                                           int block_width, int block_height,
                                           int pix_row, int pix_col,
                                           int subsampling_x, int subsampling_y,
                                           int bit_depth, int use_hbd_buf,
                                           int is_intrabc) {}

// Initialize params required for inter prediction.
static inline void av1_init_inter_params(
    InterPredParams *inter_pred_params, int block_width, int block_height,
    int pix_row, int pix_col, int subsampling_x, int subsampling_y,
    int bit_depth, int use_hbd_buf, int is_intrabc,
    const struct scale_factors *sf, const struct buf_2d *ref_buf,
    int_interpfilters interp_filters) {}

static inline void av1_init_comp_mode(InterPredParams *inter_pred_params) {}

void av1_init_warp_params(InterPredParams *inter_pred_params,
                          const WarpTypesAllowed *warp_types, int ref,
                          const MACROBLOCKD *xd, const MB_MODE_INFO *mi);

static inline int has_scale(int xs, int ys) {}

static inline void revert_scale_extra_bits(SubpelParams *sp) {}

static inline void inter_predictor(
    const uint8_t *src, int src_stride, uint8_t *dst, int dst_stride,
    const SubpelParams *subpel_params, int w, int h,
    ConvolveParams *conv_params, const InterpFilterParams *interp_filters[2]) {}

static inline void highbd_inter_predictor(
    const uint8_t *src, int src_stride, uint8_t *dst, int dst_stride,
    const SubpelParams *subpel_params, int w, int h,
    ConvolveParams *conv_params, const InterpFilterParams *interp_filters[2],
    int bd) {}

int av1_skip_u4x4_pred_in_obmc(BLOCK_SIZE bsize,
                               const struct macroblockd_plane *pd, int dir);

static inline int is_interinter_compound_used(COMPOUND_TYPE type,
                                              BLOCK_SIZE sb_type) {}

static inline int is_any_masked_compound_used(BLOCK_SIZE sb_type) {}

static inline int get_wedge_types_lookup(BLOCK_SIZE sb_type) {}

static inline int av1_is_wedge_used(BLOCK_SIZE sb_type) {}

void av1_make_inter_predictor(const uint8_t *src, int src_stride, uint8_t *dst,
                              int dst_stride,
                              InterPredParams *inter_pred_params,
                              const SubpelParams *subpel_params);
void av1_make_masked_inter_predictor(const uint8_t *pre, int pre_stride,
                                     uint8_t *dst, int dst_stride,
                                     InterPredParams *inter_pred_params,
                                     const SubpelParams *subpel_params);

// TODO(jkoleszar): yet another mv clamping function :-(
static inline MV clamp_mv_to_umv_border_sb(const MACROBLOCKD *xd,
                                           const MV *src_mv, int bw, int bh,
                                           int ss_x, int ss_y) {}

static inline int64_t scaled_buffer_offset(int x_offset, int y_offset,
                                           int stride,
                                           const struct scale_factors *sf) {}

static inline void setup_pred_plane(struct buf_2d *dst, BLOCK_SIZE bsize,
                                    uint8_t *src, int width, int height,
                                    int stride, int mi_row, int mi_col,
                                    const struct scale_factors *scale,
                                    int subsampling_x, int subsampling_y) {}

void av1_setup_dst_planes(struct macroblockd_plane *planes, BLOCK_SIZE bsize,
                          const YV12_BUFFER_CONFIG *src, int mi_row, int mi_col,
                          const int plane_start, const int plane_end);

void av1_setup_pre_planes(MACROBLOCKD *xd, int idx,
                          const YV12_BUFFER_CONFIG *src, int mi_row, int mi_col,
                          const struct scale_factors *sf, const int num_planes);

static inline void set_default_interp_filters(
    MB_MODE_INFO *const mbmi, InterpFilter frame_interp_filter) {}

static inline int av1_is_interp_needed(const MACROBLOCKD *const xd) {}

// Sets up buffers 'dst_buf1' and 'dst_buf2' from relevant buffers in 'xd' for
// subsequent use in OBMC prediction.
void av1_setup_obmc_dst_bufs(MACROBLOCKD *xd, uint8_t **dst_buf1,
                             uint8_t **dst_buf2);

void av1_setup_build_prediction_by_above_pred(
    MACROBLOCKD *xd, int rel_mi_col, uint8_t above_mi_width,
    MB_MODE_INFO *above_mbmi, struct build_prediction_ctxt *ctxt,
    const int num_planes);
void av1_setup_build_prediction_by_left_pred(MACROBLOCKD *xd, int rel_mi_row,
                                             uint8_t left_mi_height,
                                             MB_MODE_INFO *left_mbmi,
                                             struct build_prediction_ctxt *ctxt,
                                             const int num_planes);
void av1_build_obmc_inter_prediction(const AV1_COMMON *cm, MACROBLOCKD *xd,
                                     uint8_t *above[MAX_MB_PLANE],
                                     int above_stride[MAX_MB_PLANE],
                                     uint8_t *left[MAX_MB_PLANE],
                                     int left_stride[MAX_MB_PLANE]);

const uint8_t *av1_get_obmc_mask(int length);
void av1_count_overlappable_neighbors(const AV1_COMMON *cm, MACROBLOCKD *xd);

#define MASK_MASTER_SIZE
#define MASK_MASTER_STRIDE

void av1_init_wedge_masks(void);

static inline const uint8_t *av1_get_contiguous_soft_mask(int8_t wedge_index,
                                                          int8_t wedge_sign,
                                                          BLOCK_SIZE sb_type) {}

void av1_dist_wtd_comp_weight_assign(const AV1_COMMON *cm,
                                     const MB_MODE_INFO *mbmi, int *fwd_offset,
                                     int *bck_offset,
                                     int *use_dist_wtd_comp_avg,
                                     int is_compound);

const uint8_t *av1_get_compound_type_mask(
    const INTERINTER_COMPOUND_DATA *const comp_data, BLOCK_SIZE sb_type);

// build interintra_predictors for one plane
void av1_build_interintra_predictor(const AV1_COMMON *cm, MACROBLOCKD *xd,
                                    uint8_t *pred, int stride,
                                    const BUFFER_SET *ctx, int plane,
                                    BLOCK_SIZE bsize);

void av1_build_intra_predictors_for_interintra(const AV1_COMMON *cm,
                                               MACROBLOCKD *xd,
                                               BLOCK_SIZE bsize, int plane,
                                               const BUFFER_SET *ctx,
                                               uint8_t *dst, int dst_stride);

void av1_combine_interintra(MACROBLOCKD *xd, BLOCK_SIZE bsize, int plane,
                            const uint8_t *inter_pred, int inter_stride,
                            const uint8_t *intra_pred, int intra_stride);

#ifdef __cplusplus
}  // extern "C"
#endif

#endif  // AOM_AV1_COMMON_RECONINTER_H_