Coverage Report

Created: 2026-05-16 06:41

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, EbBitDepth max_bitdepth,
116
                                               uint8_t sb_size, uint32_t buffer_mask,
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_light_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_light_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
    return (bsize >= BLOCK_8X8) && (bsize <= BLOCK_32X32);
144
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
145
146
0
static INLINE int svt_aom_is_interintra_allowed_mode(const PredictionMode mode) {
147
0
    return (mode >= SINGLE_INTER_MODE_START) && (mode < SINGLE_INTER_MODE_END);
148
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
149
150
0
static INLINE int svt_aom_is_interintra_allowed_ref(const MvReferenceFrame rf[2]) {
151
0
    return (rf[0] > INTRA_FRAME) && (rf[1] <= INTRA_FRAME);
152
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
153
154
int  svt_is_interintra_allowed(uint8_t enable_inter_intra, BlockSize bsize, PredictionMode mode,
155
                               const MvReferenceFrame ref_frame[2]);
156
int  svt_aom_filter_intra_allowed_bsize(BlockSize bs);
157
int  svt_aom_filter_intra_allowed(uint8_t enable_filter_intra, BlockSize bsize, uint8_t palette_size, uint32_t mode);
158
void svt_aom_choose_best_av1_mv_pred(struct ModeDecisionContext* ctx, MvReferenceFrame ref_frame,
159
                                     PredictionMode mode, // NEW or NEW_NEW
160
                                     Mv mv0, Mv mv1,
161
                                     uint8_t* bestDrlIndex, // output
162
                                     Mv       best_pred_mv[2] // output
163
);
164
static const uint32_t me_idx_85[] = {
165
    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,
166
    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,
167
    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};
168
uint32_t svt_aom_get_me_block_offset(const uint32_t org_x, const uint32_t org_y, const BlockSize bsize,
169
                                     const uint8_t enable_me_8x8, const uint8_t enable_me_16x16);
170
uint8_t  svt_aom_is_me_data_present(uint32_t me_block_offset, uint32_t me_cand_offset, const MeSbResults* me_results,
171
                                    uint8_t list_idx, uint8_t ref_idx);
172
173
int32_t    svt_aom_have_newmv_in_inter_mode(PredictionMode mode);
174
uint8_t    svt_aom_get_max_drl_index(uint8_t refmvCnt, PredictionMode mode);
175
MotionMode svt_aom_obmc_motion_mode_allowed(const PictureControlSet* pcs, struct ModeDecisionContext* ctx,
176
                                            const BlockSize bsize, uint8_t situation, MvReferenceFrame rf0,
177
                                            MvReferenceFrame rf1, PredictionMode mode);
178
/* For intra prediction, the chroma transform type may not follow the luma type.
179
This function will return the intra chroma TX type to be used, which is based on TX size and chroma mode. */
180
TxType svt_aom_get_intra_uv_tx_type(UvPredictionMode pred_mode_uv, TxSize tx_size, int32_t reduced_tx_set);
181
void   svt_aom_set_tuned_blk_lambda(struct ModeDecisionContext* ctx, PictureControlSet* pcs);
182
183
typedef EbErrorType (*EB_INTRA_4x4_FAST_LUMA_COST_FUNC)(struct ModeDecisionContext* ctx, uint32_t pu_index,
184
                                                        ModeDecisionCandidateBuffer* cand_bf, uint64_t luma_distortion,
185
                                                        uint64_t lambda);
186
187
typedef EbErrorType (*EB_INTRA_4x4_FULL_LUMA_COST_FUNC)(ModeDecisionCandidateBuffer* cand_bf, uint64_t* y_distortion,
188
                                                        uint64_t lambda, uint64_t* y_coeff_bits,
189
                                                        uint32_t transform_size);
190
191
typedef EbErrorType (*EB_FULL_NXN_COST_FUNC)(PictureControlSet* pcs, ModeDecisionCandidateBuffer* cand_bf, uint32_t qp,
192
                                             uint64_t* y_distortion, uint64_t* cb_distortion, uint64_t* cr_distortion,
193
                                             uint64_t lambda, uint64_t lambda_chroma, uint64_t* y_coeff_bits,
194
                                             uint64_t* cb_coeff_bits, uint64_t* cr_coeff_bits, uint32_t transform_size);
195
struct CodingLoopContext_s;
196
/*
197
      |-------------------------------------------------------------|
198
      | ref_idx          0            1           2            3    |
199
      | List0            LAST        LAST2        LAST3        GOLD |
200
      | List1            BWD         ALT2         ALT               |
201
      |-------------------------------------------------------------|
202
    */
203
#define INVALID_REF 0xF
204
MvReferenceFrame svt_get_ref_frame_type(uint8_t list, uint8_t ref_idx);
205
int              svt_aom_get_sad_per_bit(int qidx, EbBitDepth is_hbd);
206
207
int  svt_av1_allow_palette(int allow_palette, BlockSize bsize);
208
bool svt_av1_is_lossless_segment(PictureControlSet* pcs, int8_t segment_id);
209
#ifdef __cplusplus
210
}
211
#endif
212
#endif // EbModeDecision_h