Coverage Report

Created: 2026-07-30 06:27

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/work/svt-av1/Source/Lib/Codec/mode_decision.h
Line
Count
Source
1
/*
2
* Copyright(c) 2019 Intel Corporation
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 https://www.aomedia.org/license/software-license. 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 https://www.aomedia.org/license/patent-license.
10
*/
11
12
#ifndef EbModeDecision_h
13
#define EbModeDecision_h
14
15
#include "definitions.h"
16
#include "utility.h"
17
#include "pcs.h"
18
#include "coding_unit.h"
19
#include "pic_buffer_desc.h"
20
#include "pic_operators.h"
21
#include "neighbor_arrays.h"
22
#include "object.h"
23
24
#ifdef __cplusplus
25
extern "C" {
26
#endif
27
28
/*! \brief Holds the motion samples for warp motion model estimation
29
 */
30
typedef struct WarpSampleInfo {
31
    //! Number of samples.
32
    uint8_t num;
33
    //! Sample locations in current frame.
34
    int pts[SAMPLES_ARRAY_SIZE];
35
    //! Sample location in the reference frame.
36
    int pts_inref[SAMPLES_ARRAY_SIZE];
37
} WarpSampleInfo;
38
// Create incomplete struct definition for the following function pointer typedefs
39
struct ModeDecisionContext;
40
struct PC_TREE;
41
42
/**************************************
43
    * Mode Decision Candidate
44
    **************************************/
45
typedef struct ModeDecisionCandidate {
46
    BlockModeInfo      block_mi;
47
    Mv                 pred_mv[2]; // unipred MV stored in idx 0
48
    PaletteInfo*       palette_info;
49
    WarpedMotionParams wm_params_l0;
50
    WarpedMotionParams wm_params_l1;
51
    TxType             transform_type[MAX_TXB_COUNT];
52
    TxType             transform_type_uv;
53
    uint8_t            palette_size[PLANE_TYPES];
54
55
    CandClass cand_class;
56
    bool      skip_mode_allowed;
57
    uint8_t   drl_index;
58
} ModeDecisionCandidate;
59
60
/**************************************
61
    * Mode Decision Candidate Buffer
62
    **************************************/
63
typedef struct ModeDecisionCandidateBuffer {
64
    EbDctor dctor;
65
    // Candidate Ptr
66
    ModeDecisionCandidate* cand;
67
68
    // Video Buffers
69
    EbPictureBufferDesc* pred;
70
    EbPictureBufferDesc* rec_coeff;
71
    EbPictureBufferDesc* residual;
72
    EbPictureBufferDesc* quant;
73
74
    // *Note - We should be able to combine the rec_coeff & recon_ptr pictures (they aren't needed at the same time)
75
    EbPictureBufferDesc* recon;
76
77
    // Costs
78
    uint64_t*   fast_cost;
79
    uint64_t*   full_cost;
80
    uint64_t*   full_cost_ssim;
81
    uint64_t    fast_luma_rate;
82
    uint64_t    fast_chroma_rate;
83
    uint64_t    total_rate;
84
    uint64_t    luma_fast_dist;
85
    uint64_t    full_dist;
86
    uint16_t    cnt_nz_coeff;
87
    QuantDcData quant_dc;
88
    EobData     eob;
89
    uint8_t     block_has_coeff;
90
    uint8_t     u_has_coeff;
91
    uint8_t     v_has_coeff;
92
    uint16_t    y_has_coeff;
93
    // The prediction of SIMPLE_TRANSLATION is not valid when OBMC face-off is used (where OBMC will re-use the pred buffer of SIMPLE_TRANSLATION)
94
    bool valid_luma_pred;
95
} ModeDecisionCandidateBuffer;
96
97
/**************************************
98
 * Function Ptrs Definitions
99
 **************************************/
100
typedef EbErrorType (*EbPredictionFunc)(uint8_t hbd_md, struct ModeDecisionContext* ctx, PictureControlSet* pcs,
101
                                        ModeDecisionCandidateBuffer* cand_bf);
102
typedef uint64_t (*EbFastCostFunc)(PictureControlSet* pcs, struct ModeDecisionContext* ctx,
103
                                   ModeDecisionCandidateBuffer* cand_bf, uint64_t lambda, uint64_t luma_distortion);
104
typedef EbErrorType (*EbAv1FullCostFunc)(PictureControlSet* pcs, struct ModeDecisionContext* ctx,
105
                                         ModeDecisionCandidateBuffer* cand_bf, BlkStruct* blk_ptr,
106
                                         uint64_t y_distortion[DIST_TOTAL][DIST_CALC_TOTAL],
107
                                         uint64_t cb_distortion[DIST_TOTAL][DIST_CALC_TOTAL],
108
                                         uint64_t cr_distortion[DIST_TOTAL][DIST_CALC_TOTAL], uint64_t lambda,
109
                                         uint64_t* y_coeff_bits, uint64_t* cb_coeff_bits, uint64_t* cr_coeff_bits,
110
                                         BlockSize bsize);
111
112
/**************************************
113
    * Extern Function Declarations
114
    **************************************/
115
EbErrorType svt_aom_mode_decision_cand_bf_ctor(ModeDecisionCandidateBuffer* buffer_ptr, EbPictureBufferDesc* pred,
116
                                               EbPictureBufferDesc* rec_coeff, EbPictureBufferDesc* quant,
117
                                               EbPictureBufferDesc* temp_residual, EbPictureBufferDesc* temp_recon_ptr,
118
                                               uint64_t* fast_cost, uint64_t* full_cost, uint64_t* full_cost_ssim_ptr);
119
120
EbErrorType svt_aom_mode_decision_scratch_cand_bf_ctor(ModeDecisionCandidateBuffer* buffer_ptr, uint8_t sb_size,
121
                                                       EbBitDepth max_bitdepth);
122
123
uint32_t product_full_mode_decision_pd0(struct ModeDecisionContext* ctx, BlkStruct* blk_ptr,
124
                                        ModeDecisionCandidateBuffer** buffer_ptr_array);
125
126
void        svt_aom_product_full_mode_decision_light_pd1(PictureControlSet* pcs, struct ModeDecisionContext* ctx,
127
                                                         ModeDecisionCandidateBuffer* cand_bf);
128
uint32_t    svt_aom_product_full_mode_decision(PictureControlSet* pcs, struct ModeDecisionContext* ctx,
129
                                               ModeDecisionCandidateBuffer** buffer_ptr_array,
130
                                               uint32_t candidate_total_count, uint32_t* best_candidate_index_array);
131
uint8_t     svt_aom_wm_motion_refinement(PictureControlSet* pcs, struct ModeDecisionContext* ctx,
132
                                         ModeDecisionCandidate* cand, const bool shut_approx);
133
uint8_t     svt_aom_obmc_motion_refinement(PictureControlSet* pcs, struct ModeDecisionContext* ctx,
134
                                           ModeDecisionCandidate* cand, int refine_level);
135
EbErrorType generate_md_stage_0_cand(PictureControlSet* pcs, struct ModeDecisionContext* ctx,
136
                                     const struct PC_TREE* const pc_tree, uint32_t* fast_candidate_total_count);
137
void        generate_md_stage_0_cand_light_pd1(struct ModeDecisionContext* ctx, uint32_t* fast_candidate_total_count,
138
                                               PictureControlSet* pcs);
139
EbErrorType generate_md_stage_0_cand_pd0(struct ModeDecisionContext* ctx, uint32_t* fast_candidate_total_count,
140
                                         PictureControlSet* pcs);
141
142
0
static INLINE int svt_aom_is_interintra_allowed_bsize(const BlockSize bsize) {
143
0
    if (!CONFIG_ENABLE_INTER_INTRA) {
144
0
        return 0; // inter-intra off -> const-folds, cascades DCE
145
0
    }
146
0
    return (bsize >= BLOCK_8X8) && (bsize <= BLOCK_32X32);
147
0
}
Unexecuted instantiation: enc_handle.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: enc_settings.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: av1me.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: cdef_process.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: dlf_process.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: enc_cdef.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: enc_dec_process.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: enc_inter_prediction.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: enc_intra_prediction.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: enc_mode_config.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: entropy_coding.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: ec_process.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: full_loop.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: initial_rc_process.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: intra_prediction.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: md_rate_estimation.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: mode_decision.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: md_config_process.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: md_process.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: motion_estimation.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: me_process.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: packetization_process.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: palette.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: pcs.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: pd_process.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: pic_manager_process.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: product_coding_loop.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: rc_process.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: rc_rtc_cbr.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: rc_vbr_cbr.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: rd_cost.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: reference_object.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: resize.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: resource_coordination_process.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: rest_process.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: restoration_pick.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: segmentation.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: src_ops_process.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: temporal_filtering.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: transforms.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: encode_txb_ref_c.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: adaptive_mv_pred.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: coding_loop.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: coding_unit.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: deblocking_filter.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: firstpass.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: global_me_cost.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: mcomp.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: pass2_strategy.c:svt_aom_is_interintra_allowed_bsize
Unexecuted instantiation: rc_crf_cqp.c:svt_aom_is_interintra_allowed_bsize
148
149
0
static INLINE int svt_aom_is_interintra_allowed_mode(const PredictionMode mode) {
150
0
    return (mode >= SINGLE_INTER_MODE_START) && (mode < SINGLE_INTER_MODE_END);
151
0
}
Unexecuted instantiation: enc_handle.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: enc_settings.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: av1me.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: cdef_process.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: dlf_process.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: enc_cdef.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: enc_dec_process.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: enc_inter_prediction.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: enc_intra_prediction.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: enc_mode_config.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: entropy_coding.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: ec_process.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: full_loop.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: initial_rc_process.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: intra_prediction.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: md_rate_estimation.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: mode_decision.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: md_config_process.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: md_process.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: motion_estimation.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: me_process.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: packetization_process.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: palette.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: pcs.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: pd_process.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: pic_manager_process.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: product_coding_loop.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: rc_process.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: rc_rtc_cbr.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: rc_vbr_cbr.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: rd_cost.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: reference_object.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: resize.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: resource_coordination_process.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: rest_process.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: restoration_pick.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: segmentation.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: src_ops_process.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: temporal_filtering.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: transforms.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: encode_txb_ref_c.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: adaptive_mv_pred.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: coding_loop.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: coding_unit.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: deblocking_filter.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: firstpass.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: global_me_cost.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: mcomp.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: pass2_strategy.c:svt_aom_is_interintra_allowed_mode
Unexecuted instantiation: rc_crf_cqp.c:svt_aom_is_interintra_allowed_mode
152
153
0
static INLINE int svt_aom_is_interintra_allowed_ref(const MvReferenceFrame rf[2]) {
154
0
    return (rf[0] > INTRA_FRAME) && (rf[1] <= INTRA_FRAME);
155
0
}
Unexecuted instantiation: enc_handle.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: enc_settings.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: av1me.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: cdef_process.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: dlf_process.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: enc_cdef.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: enc_dec_process.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: enc_inter_prediction.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: enc_intra_prediction.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: enc_mode_config.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: entropy_coding.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: ec_process.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: full_loop.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: initial_rc_process.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: intra_prediction.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: md_rate_estimation.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: mode_decision.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: md_config_process.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: md_process.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: motion_estimation.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: me_process.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: packetization_process.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: palette.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: pcs.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: pd_process.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: pic_manager_process.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: product_coding_loop.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: rc_process.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: rc_rtc_cbr.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: rc_vbr_cbr.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: rd_cost.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: reference_object.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: resize.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: resource_coordination_process.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: rest_process.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: restoration_pick.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: segmentation.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: src_ops_process.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: temporal_filtering.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: transforms.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: encode_txb_ref_c.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: adaptive_mv_pred.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: coding_loop.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: coding_unit.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: deblocking_filter.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: firstpass.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: global_me_cost.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: mcomp.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: pass2_strategy.c:svt_aom_is_interintra_allowed_ref
Unexecuted instantiation: rc_crf_cqp.c:svt_aom_is_interintra_allowed_ref
156
157
int  svt_is_interintra_allowed(uint8_t enable_inter_intra, BlockSize bsize, PredictionMode mode,
158
                               const MvReferenceFrame ref_frame[2]);
159
int  svt_aom_filter_intra_allowed_bsize(BlockSize bs);
160
int  svt_aom_filter_intra_allowed(uint8_t enable_filter_intra, BlockSize bsize, uint8_t palette_size, uint32_t mode);
161
void svt_aom_choose_best_av1_mv_pred(struct ModeDecisionContext* ctx, MvReferenceFrame ref_frame,
162
                                     PredictionMode mode, // NEW or NEW_NEW
163
                                     Mv mv0, Mv mv1,
164
                                     uint8_t* bestDrlIndex, // output
165
                                     Mv       best_pred_mv[2] // output
166
);
167
static const uint32_t me_idx_85[] = {
168
    0,  1,  5,  21, 22, 29, 30, 6,  23, 24, 31, 32, 9,  37, 38, 45, 46, 10, 39, 40, 47, 48, 2,  7,  25, 26, 33, 34, 8,
169
    27, 28, 35, 36, 11, 41, 42, 49, 50, 12, 43, 44, 51, 52, 3,  13, 53, 54, 61, 62, 14, 55, 56, 63, 64, 17, 69, 70, 77,
170
    78, 18, 71, 72, 79, 80, 4,  15, 57, 58, 65, 66, 16, 59, 60, 67, 68, 19, 73, 74, 81, 82, 20, 75, 76, 83, 84};
171
uint32_t svt_aom_get_me_block_offset(const uint32_t org_x, const uint32_t org_y, const BlockSize bsize,
172
                                     const uint8_t enable_me_8x8, const uint8_t enable_me_16x16);
173
uint8_t  svt_aom_is_me_data_present(uint32_t me_block_offset, uint32_t me_cand_offset, const MeSbResults* me_results,
174
                                    uint8_t list_idx, uint8_t ref_idx);
175
176
int32_t    svt_aom_have_newmv_in_inter_mode(PredictionMode mode);
177
uint8_t    svt_aom_get_max_drl_index(uint8_t refmvCnt, PredictionMode mode);
178
MotionMode svt_aom_obmc_motion_mode_allowed(const PictureControlSet* pcs, struct ModeDecisionContext* ctx,
179
                                            const BlockSize bsize, uint8_t situation, MvReferenceFrame rf0,
180
                                            MvReferenceFrame rf1, PredictionMode mode);
181
/* For intra prediction, the chroma transform type may not follow the luma type.
182
This function will return the intra chroma TX type to be used, which is based on TX size and chroma mode. */
183
TxType svt_aom_get_intra_uv_tx_type(UvPredictionMode pred_mode_uv, TxSize tx_size, int32_t reduced_tx_set);
184
void   svt_aom_set_tuned_blk_lambda(struct ModeDecisionContext* ctx, PictureControlSet* pcs);
185
186
typedef EbErrorType (*EB_INTRA_4x4_FAST_LUMA_COST_FUNC)(struct ModeDecisionContext* ctx, uint32_t pu_index,
187
                                                        ModeDecisionCandidateBuffer* cand_bf, uint64_t luma_distortion,
188
                                                        uint64_t lambda);
189
190
typedef EbErrorType (*EB_INTRA_4x4_FULL_LUMA_COST_FUNC)(ModeDecisionCandidateBuffer* cand_bf, uint64_t* y_distortion,
191
                                                        uint64_t lambda, uint64_t* y_coeff_bits,
192
                                                        uint32_t transform_size);
193
194
typedef EbErrorType (*EB_FULL_NXN_COST_FUNC)(PictureControlSet* pcs, ModeDecisionCandidateBuffer* cand_bf, uint32_t qp,
195
                                             uint64_t* y_distortion, uint64_t* cb_distortion, uint64_t* cr_distortion,
196
                                             uint64_t lambda, uint64_t lambda_chroma, uint64_t* y_coeff_bits,
197
                                             uint64_t* cb_coeff_bits, uint64_t* cr_coeff_bits, uint32_t transform_size);
198
struct CodingLoopContext_s;
199
/*
200
      |-------------------------------------------------------------|
201
      | ref_idx          0            1           2            3    |
202
      | List0            LAST        LAST2        LAST3        GOLD |
203
      | List1            BWD         ALT2         ALT               |
204
      |-------------------------------------------------------------|
205
    */
206
#define INVALID_REF 0xF
207
MvReferenceFrame svt_get_ref_frame_type(uint8_t list, uint8_t ref_idx);
208
int              svt_aom_get_sad_per_bit(int qidx, EbBitDepth is_hbd);
209
210
int  svt_av1_allow_palette(int allow_palette, BlockSize bsize);
211
bool svt_av1_is_lossless_segment(PictureControlSet* pcs, int8_t segment_id);
212
#ifdef __cplusplus
213
}
214
#endif
215
#endif // EbModeDecision_h