/src/aom/av1/encoder/encodetxb.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Copyright (c) 2017, Alliance for Open Media. All rights reserved. |
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 www.aomedia.org/license/software. 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 www.aomedia.org/license/patent. |
10 | | */ |
11 | | |
12 | | #ifndef AOM_AV1_ENCODER_ENCODETXB_H_ |
13 | | #define AOM_AV1_ENCODER_ENCODETXB_H_ |
14 | | |
15 | | #include "config/aom_config.h" |
16 | | |
17 | | #include "av1/common/av1_common_int.h" |
18 | | #include "av1/common/blockd.h" |
19 | | #include "av1/common/txb_common.h" |
20 | | #include "av1/encoder/block.h" |
21 | | #include "av1/encoder/encoder.h" |
22 | | #include "aom_dsp/bitwriter.h" |
23 | | #ifdef __cplusplus |
24 | | extern "C" { |
25 | | #endif |
26 | | |
27 | | /*!\cond */ |
28 | 0 | #define TXB_SKIP_CTX_MASK 15 |
29 | 0 | #define DC_SIGN_CTX_SHIFT 4 |
30 | 0 | #define DC_SIGN_CTX_MASK 3 |
31 | | |
32 | | int av1_get_eob_pos_token(const int eob, int *const extra); |
33 | | |
34 | | /*!\endcond */ |
35 | | /*!\brief Allocate the memory resources for all the macro blocks in the current |
36 | | * coding frame. |
37 | | * \ingroup coefficient_coding |
38 | | * |
39 | | * Each macro block will need a \ref CB_COEFF_BUFFER to store information for |
40 | | * rate-distortion optimization and entropy coding of transform coefficients. |
41 | | * |
42 | | * \param[in] cpi Top-level encoder structure |
43 | | */ |
44 | | void av1_alloc_txb_buf(AV1_COMP *cpi); |
45 | | /*!\brief Free the memory resources for all the macro blocks in the current |
46 | | * coding frame. |
47 | | * \ingroup coefficient_coding |
48 | | * |
49 | | * See \ref av1_alloc_txb_buf and \ref CB_COEFF_BUFFER for more details. |
50 | | * |
51 | | * \param[in] cpi Top-level encoder structure |
52 | | */ |
53 | | void av1_free_txb_buf(AV1_COMP *cpi); |
54 | | |
55 | | /*!\brief Write quantized coefficients in a transform block into bitstream using |
56 | | * entropy coding. |
57 | | * |
58 | | * \ingroup coefficient_coding |
59 | | * |
60 | | * This function will write the quantized coefficients in a transform block into |
61 | | * the bitstream using entropy coding. |
62 | | * |
63 | | * The coding steps are as follows. |
64 | | * |
65 | | * 1) Code the end of block position "eob", which is the scan index of the |
66 | | * last non-zero coefficient plus one. |
67 | | * |
68 | | * 2) Code the lower magnitude level (<= COEFF_BASE_RANGE + NUM_BASE_LEVELS) |
69 | | * for each coefficient in reversed scan order. |
70 | | * |
71 | | * 3) Code the sign and higher magnitude level |
72 | | * (> COEFF_BASE_RANGE + NUM_BASE_LEVELS) in forward scan order. |
73 | | * |
74 | | * \param[in] cm Top-level structure shared by encoder and |
75 | | * decoder |
76 | | * \param[in] x Pointer to structure holding the data for the |
77 | | current encoding macroblock |
78 | | * \param[in] w Entropy coding write pointer |
79 | | * \param[in] blk_row The row index of the current transform block |
80 | | * in the macroblock. Each unit has 4 pixels in y plane |
81 | | * \param[in] blk_col The col index of the current transform block |
82 | | * in the macroblock. Each unit has 4 pixels in y plane |
83 | | * \param[in] plane The index of the current plane |
84 | | * \param[in] block The index of the current transform block in the |
85 | | * macroblock. It's defined by number of 4x4 units that have been coded before |
86 | | * the currernt transform block |
87 | | * \param[in] tx_size The given transform size |
88 | | */ |
89 | | void av1_write_coeffs_txb(const AV1_COMMON *const cm, MACROBLOCK *const x, |
90 | | aom_writer *w, int blk_row, int blk_col, int plane, |
91 | | int block, TX_SIZE tx_size); |
92 | | |
93 | | /*!\brief Write quantized coefficients of all transform blocks in an intra |
94 | | * macroblock into the bitstream using entropy coding. |
95 | | * |
96 | | * \ingroup coefficient_coding |
97 | | * |
98 | | * All transform blocks in the intra macroblock share the same transform size. |
99 | | * |
100 | | * This function use \ref av1_write_coeffs_txb() to code each transform block in |
101 | | * raster order. |
102 | | * |
103 | | * \param[in] cm Top-level structure shared by encoder and |
104 | | * decoder |
105 | | * \param[in] x Pointer to structure holding the data for the |
106 | | current encoding macroblock |
107 | | * \param[in] w Entropy coding write pointer |
108 | | * \param[in] bsize Block size of the current macroblock |
109 | | */ |
110 | | void av1_write_intra_coeffs_mb(const AV1_COMMON *const cm, MACROBLOCK *x, |
111 | | aom_writer *w, BLOCK_SIZE bsize); |
112 | | |
113 | | /*!\brief Pack the context info of the current transform block into an uint8_t. |
114 | | * \ingroup coefficient_coding |
115 | | * |
116 | | * This context info will be collected and consolidated by its neighbor |
117 | | * transform blocks for coding transform block skip flag (tx_skip) and |
118 | | * the sign of DC coefficient (dc_sign). |
119 | | * |
120 | | * \param[in] qcoeff Buffer of quantized coefficients |
121 | | * \param[in] scan_order Coding order of coefficients in the transform |
122 | | * block |
123 | | * \param[in] eob The scan index of last non-zero coefficient plus |
124 | | * one |
125 | | */ |
126 | | uint8_t av1_get_txb_entropy_context(const tran_low_t *qcoeff, |
127 | | const SCAN_ORDER *scan_order, int eob); |
128 | | |
129 | | /*!\brief Update the probability model (cdf) and the entropy context related to |
130 | | * coefficient coding for all transform blocks in the intra macroblock. |
131 | | * |
132 | | * \ingroup coefficient_coding |
133 | | * |
134 | | * This function will go through each transform block in the intra macorblock |
135 | | * and call \ref av1_update_and_record_txb_context to update the probability |
136 | | * model and entropy context properly. |
137 | | * |
138 | | * \param[in] cpi Top-level encoder structure |
139 | | * \param[in] td Top-level multithreading structure |
140 | | * \param[in] dry_run Whether this is a dry run. |
141 | | * \param[in] bsize Block size of the current macroblock |
142 | | * \param[in] allow_update_cdf Allowed to update probability model (cdf) or |
143 | | * not. |
144 | | */ |
145 | | void av1_update_intra_mb_txb_context(const AV1_COMP *cpi, ThreadData *td, |
146 | | RUN_TYPE dry_run, BLOCK_SIZE bsize, |
147 | | uint8_t allow_update_cdf); |
148 | | |
149 | | /*!\brief Update the probability model (cdf) and the entropy context related to |
150 | | * coefficient coding for a transform block. |
151 | | * |
152 | | * \ingroup coefficient_coding |
153 | | * |
154 | | * There are regular mode and dry run for this funtion. |
155 | | * |
156 | | * Regular mode: |
157 | | * |
158 | | * The probability model (cdf) for each coding symbol in the |
159 | | * transform block will be updated. |
160 | | * |
161 | | * The entropy context of this transform block will be updated. |
162 | | * |
163 | | * Dry run: |
164 | | * |
165 | | * The probability model update will be skipped. |
166 | | * |
167 | | * The entropy context of this transform block will be updated. |
168 | | * |
169 | | * \param[in] plane The index of the current plane. |
170 | | * \param[in] block The index of the current transform block in the |
171 | | * macroblock. It's defined by number of 4x4 units that have been coded before |
172 | | * the currernt transform block. |
173 | | * \param[in] blk_row The row index of the current transform block |
174 | | * in the macroblock. Each unit has 4 pixels in y plane. |
175 | | * \param[in] blk_col The col index of the current transform block |
176 | | * in the macroblock. Each unit has 4 pixels in y plane. |
177 | | * \param[in] plane_bsize Block size for this plane. When the video source |
178 | | * uses chroma subsampling, the block size of UV planes will be smaller than the |
179 | | * block size of Y plane. |
180 | | * \param[in] tx_size The given transform size. |
181 | | * \param[in] arg This parameter will be translated into |
182 | | * tokenize_b_args, in which RUN_TYPE indicates using regular mode or dry run. |
183 | | */ |
184 | | void av1_update_and_record_txb_context(int plane, int block, int blk_row, |
185 | | int blk_col, BLOCK_SIZE plane_bsize, |
186 | | TX_SIZE tx_size, void *arg); |
187 | | |
188 | | /*!\brief Update the entropy context related to coefficient coding for a |
189 | | * transform block. |
190 | | * |
191 | | * \ingroup coefficient_coding |
192 | | * |
193 | | * There are regular mode and dry run for this function. |
194 | | * |
195 | | * Regular mode: |
196 | | * |
197 | | * The entropy context of this transform block will be updated. |
198 | | * |
199 | | * Dry run: |
200 | | * |
201 | | * The probability model update will be skipped. |
202 | | * |
203 | | * The entropy context of this transform block will be updated. |
204 | | * |
205 | | * \param[in] plane The index of the current plane. |
206 | | * \param[in] block The index of the current transform block in the |
207 | | * macroblock. It's defined by number of 4x4 units that have been coded before |
208 | | * the currernt transform block. |
209 | | * \param[in] blk_row The row index of the current transform block |
210 | | * in the macroblock. Each unit has 4 pixels in y plane. |
211 | | * \param[in] blk_col The col index of the current transform block |
212 | | * in the macroblock. Each unit has 4 pixels in y plane. |
213 | | * \param[in] plane_bsize Block size for this plane. When the video source |
214 | | * uses chroma subsampling, the block size of UV planes will be smaller than the |
215 | | * block size of Y plane. |
216 | | * \param[in] tx_size The given transform size. |
217 | | * \param[in] arg This parameter will be translated into |
218 | | * tokenize_b_args, in which RUN_TYPE indicates using regular mode or dry run. |
219 | | */ |
220 | | void av1_record_txb_context(int plane, int block, int blk_row, int blk_col, |
221 | | BLOCK_SIZE plane_bsize, TX_SIZE tx_size, void *arg); |
222 | | |
223 | | /*!\brief Get the corresponding \ref CB_COEFF_BUFFER of the current macro block. |
224 | | * |
225 | | * \ingroup coefficient_coding |
226 | | * |
227 | | * The macroblock's location is described by mi_row and mi_col, row and column |
228 | | * mi indexes in the coding frame. |
229 | | * |
230 | | * Each mi unit is a 4x4 pixel block. |
231 | | * |
232 | | * \param[in] cpi Top-level encoder structure. |
233 | | * \param[in] mi_row Row mi index of the current transform block |
234 | | * in the frame. |
235 | | * \param[in] mi_col Column mi index of the current transform |
236 | | * block in the frame. |
237 | | * \return CB_COEFF_BUFFER* Pointer of \ref CB_COEFF_BUFFER associated |
238 | | * to this macroblock. |
239 | | */ |
240 | | CB_COEFF_BUFFER *av1_get_cb_coeff_buffer(const struct AV1_COMP *cpi, int mi_row, |
241 | | int mi_col); |
242 | | |
243 | | /*!\brief Returns the entropy cost associated with skipping the current |
244 | | * transform block. |
245 | | * |
246 | | * \ingroup coefficient_coding |
247 | | * |
248 | | * \param[in] coeff_costs Table of entropy cost for coefficient coding. |
249 | | * \param[in] txb_ctx Context info for entropy coding transform block |
250 | | * skip flag (tx_skip) and the sign of DC coefficient (dc_sign). |
251 | | * \param[in] plane The index of the current plane |
252 | | * \param[in] tx_size The transform size |
253 | | */ |
254 | | static inline int av1_cost_skip_txb(const CoeffCosts *coeff_costs, |
255 | | const TXB_CTX *const txb_ctx, int plane, |
256 | 0 | TX_SIZE tx_size) { |
257 | 0 | const TX_SIZE txs_ctx = get_txsize_entropy_ctx(tx_size); |
258 | 0 | const PLANE_TYPE plane_type = get_plane_type(plane); |
259 | 0 | const LV_MAP_COEFF_COST *const coeff_costs_ = |
260 | 0 | &coeff_costs->coeff_costs[txs_ctx][plane_type]; |
261 | 0 | return coeff_costs_->txb_skip_cost[txb_ctx->txb_skip_ctx][1]; |
262 | 0 | } Unexecuted instantiation: av1_cx_iface.c:av1_cost_skip_txb Unexecuted instantiation: bitstream.c:av1_cost_skip_txb Unexecuted instantiation: encodeframe.c:av1_cost_skip_txb Unexecuted instantiation: encodeframe_utils.c:av1_cost_skip_txb Unexecuted instantiation: encodemb.c:av1_cost_skip_txb Unexecuted instantiation: encoder.c:av1_cost_skip_txb Unexecuted instantiation: encoder_utils.c:av1_cost_skip_txb Unexecuted instantiation: encodetxb.c:av1_cost_skip_txb Unexecuted instantiation: ethread.c:av1_cost_skip_txb Unexecuted instantiation: firstpass.c:av1_cost_skip_txb Unexecuted instantiation: global_motion_facade.c:av1_cost_skip_txb Unexecuted instantiation: mcomp.c:av1_cost_skip_txb Unexecuted instantiation: partition_search.c:av1_cost_skip_txb Unexecuted instantiation: partition_strategy.c:av1_cost_skip_txb Unexecuted instantiation: ratectrl.c:av1_cost_skip_txb Unexecuted instantiation: rd.c:av1_cost_skip_txb Unexecuted instantiation: rdopt.c:av1_cost_skip_txb Unexecuted instantiation: nonrd_pickmode.c:av1_cost_skip_txb Unexecuted instantiation: nonrd_opt.c:av1_cost_skip_txb Unexecuted instantiation: speed_features.c:av1_cost_skip_txb Unexecuted instantiation: superres_scale.c:av1_cost_skip_txb Unexecuted instantiation: svc_layercontext.c:av1_cost_skip_txb Unexecuted instantiation: tokenize.c:av1_cost_skip_txb Unexecuted instantiation: tpl_model.c:av1_cost_skip_txb Unexecuted instantiation: txb_rdopt.c:av1_cost_skip_txb Unexecuted instantiation: var_based_part.c:av1_cost_skip_txb Unexecuted instantiation: aq_cyclicrefresh.c:av1_cost_skip_txb Unexecuted instantiation: compound_type.c:av1_cost_skip_txb Unexecuted instantiation: encode_strategy.c:av1_cost_skip_txb Unexecuted instantiation: motion_search_facade.c:av1_cost_skip_txb |
263 | | |
264 | | /*!\cond */ |
265 | | // These numbers are empirically obtained. |
266 | | static const int plane_rd_mult[REF_TYPES][PLANE_TYPES] = { |
267 | | { 17, 13 }, |
268 | | { 16, 10 }, |
269 | | }; |
270 | | /*!\endcond */ |
271 | | |
272 | | #ifdef __cplusplus |
273 | | } |
274 | | #endif |
275 | | |
276 | | #endif // AOM_AV1_ENCODER_ENCODETXB_H_ |