/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 |