AOMedia AV1 Codec
intra_mode_search.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020, 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 
15 #ifndef AOM_AV1_ENCODER_INTRA_MODE_SEARCH_H_
16 #define AOM_AV1_ENCODER_INTRA_MODE_SEARCH_H_
17 
18 #include "av1/encoder/encoder.h"
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
31 typedef struct IntraModeSearchState {
35  PREDICTION_MODE best_intra_mode;
36 
49  uint8_t directional_mode_skip_mask[INTRA_MODES];
64  int64_t dist_uvs;
65  int skip_uvs;
66  UV_PREDICTION_MODE mode_uv;
67  PALETTE_MODE_INFO pmi_uv;
68  int8_t uv_angle_delta;
71 
108 int av1_handle_intra_y_mode(IntraModeSearchState *intra_search_state,
109  const AV1_COMP *cpi, MACROBLOCK *x,
110  BLOCK_SIZE bsize, unsigned int ref_frame_cost,
111  const PICK_MODE_CONTEXT *ctx, RD_STATS *rd_stats_y,
112  int64_t best_rd, int *mode_cost_y, int64_t *rd_y,
113  int64_t *best_model_rd,
114  int64_t top_intra_model_rd[]);
115 
144  IntraModeSearchState *intra_search_state, const AV1_COMP *cpi,
145  MACROBLOCK *x, BLOCK_SIZE bsize, RD_STATS *rd_stats,
146  const RD_STATS *rd_stats_y, RD_STATS *rd_stats_uv, int64_t best_rd);
147 
174 int av1_search_palette_mode(IntraModeSearchState *intra_search_state,
175  const AV1_COMP *cpi, MACROBLOCK *x,
176  BLOCK_SIZE bsize, unsigned int ref_frame_cost,
177  PICK_MODE_CONTEXT *ctx, RD_STATS *this_rd_cost,
178  int64_t best_rd);
179 
203  BLOCK_SIZE bsize, unsigned int ref_frame_cost,
204  PICK_MODE_CONTEXT *ctx,
205  RD_STATS *this_rd_cost, int64_t best_rd);
206 
237 int64_t av1_rd_pick_intra_sby_mode(const AV1_COMP *const cpi, MACROBLOCK *x,
238  int *rate, int *rate_tokenonly,
239  int64_t *distortion, int *skippable,
240  BLOCK_SIZE bsize, int64_t best_rd,
241  PICK_MODE_CONTEXT *ctx);
242 
272 int64_t av1_rd_pick_intra_sbuv_mode(const AV1_COMP *const cpi, MACROBLOCK *x,
273  int *rate, int *rate_tokenonly,
274  int64_t *distortion, int *skippable,
275  BLOCK_SIZE bsize, TX_SIZE max_tx_size);
276 
279 void av1_count_colors(const uint8_t *src, int stride, int rows, int cols,
280  int *val_count, int *num_colors);
281 
284 void av1_count_colors_highbd(const uint8_t *src8, int stride, int rows,
285  int cols, int bit_depth, int *val_count,
286  int *val_count_8bit, int *num_color_bins,
287  int *num_colors);
288 
291 static AOM_INLINE void init_intra_mode_search_state(
292  IntraModeSearchState *intra_search_state) {
293  memset(intra_search_state, 0, sizeof(*intra_search_state));
294  intra_search_state->rate_uv_intra = INT_MAX;
295 }
296 
307 void set_y_mode_and_delta_angle(const int mode_idx, MB_MODE_INFO *const mbmi);
308 
320 int prune_intra_y_mode(int64_t this_model_rd, int64_t *best_model_rd,
321  int64_t top_intra_model_rd[], int max_model_cnt_allowed,
322  int model_rd_index_for_pruning);
323 
324 #ifdef __cplusplus
325 } // extern "C"
326 #endif
327 
328 #endif // AOM_AV1_ENCODER_INTRA_MODE_SEARCH_H_
Declares top-level encoder structures and functions.
int av1_search_intra_uv_modes_in_interframe(IntraModeSearchState *intra_search_state, const AV1_COMP *cpi, MACROBLOCK *x, BLOCK_SIZE bsize, RD_STATS *rd_stats, const RD_STATS *rd_stats_y, RD_STATS *rd_stats_uv, int64_t best_rd)
Search through all chroma intra-modes for inter frames.
Definition: intra_mode_search.c:1256
int av1_search_palette_mode(IntraModeSearchState *intra_search_state, const AV1_COMP *cpi, MACROBLOCK *x, BLOCK_SIZE bsize, unsigned int ref_frame_cost, PICK_MODE_CONTEXT *ctx, RD_STATS *this_rd_cost, int64_t best_rd)
Evaluate luma palette mode for inter frames.
Definition: intra_mode_search.c:882
int64_t av1_rd_pick_intra_sby_mode(const AV1_COMP *const cpi, MACROBLOCK *x, int *rate, int *rate_tokenonly, int64_t *distortion, int *skippable, BLOCK_SIZE bsize, int64_t best_rd, PICK_MODE_CONTEXT *ctx)
Perform intra-mode search on luma channels for intra frames.
Definition: intra_mode_search.c:1316
int64_t av1_rd_pick_intra_sbuv_mode(const AV1_COMP *const cpi, MACROBLOCK *x, int *rate, int *rate_tokenonly, int64_t *distortion, int *skippable, BLOCK_SIZE bsize, TX_SIZE max_tx_size)
Perform intra-mode search on chroma channels.
Definition: intra_mode_search.c:728
void av1_search_palette_mode_luma(const AV1_COMP *cpi, MACROBLOCK *x, BLOCK_SIZE bsize, unsigned int ref_frame_cost, PICK_MODE_CONTEXT *ctx, RD_STATS *this_rd_cost, int64_t best_rd)
Evaluate luma palette mode for inter frames.
Definition: intra_mode_search.c:976
struct IntraModeSearchState IntraModeSearchState
Variables related to intra-mode search during inter frame coding.
int av1_handle_intra_y_mode(IntraModeSearchState *intra_search_state, const AV1_COMP *cpi, MACROBLOCK *x, BLOCK_SIZE bsize, unsigned int ref_frame_cost, const PICK_MODE_CONTEXT *ctx, RD_STATS *rd_stats_y, int64_t best_rd, int *mode_cost_y, int64_t *rd_y, int64_t *best_model_rd, int64_t top_intra_model_rd[])
Evaluate a given luma intra-mode for inter frames.
Definition: intra_mode_search.c:1155
void av1_count_colors(const uint8_t *src, int stride, int rows, int cols, int *val_count, int *num_colors)
Return the number of colors in src. Used by palette mode.
Definition: intra_mode_search.c:307
int prune_intra_y_mode(int64_t this_model_rd, int64_t *best_model_rd, int64_t top_intra_model_rd[], int max_model_cnt_allowed, int model_rd_index_for_pruning)
prune luma intra mode based on the model rd.
Definition: intra_mode_search.c:413
void av1_count_colors_highbd(const uint8_t *src8, int stride, int rows, int cols, int bit_depth, int *val_count, int *val_count_8bit, int *num_color_bins, int *num_colors)
See av1_count_colors(), but for highbd.
Definition: intra_mode_search.c:325
void set_y_mode_and_delta_angle(const int mode_idx, MB_MODE_INFO *const mbmi)
set the luma intra mode and delta angles for a given mode index. The total number of luma intra mode ...
Definition: intra_mode_search.c:368
static void init_intra_mode_search_state(IntraModeSearchState *intra_search_state)
Initializes the IntraModeSearchState struct.
Definition: intra_mode_search.h:291
Top level encoder structure.
Definition: encoder.h:2664
Variables related to intra-mode search during inter frame coding.
Definition: intra_mode_search.h:31
PREDICTION_MODE best_intra_mode
The best luma intra-mode found so far.
Definition: intra_mode_search.h:35
int dir_mode_skip_mask_ready
Whether directional_mode_skip_mask is valid for pruning.
Definition: intra_mode_search.h:53
int skip_intra_modes
Whether to terminate all intra mode search.
Definition: intra_mode_search.h:45
int64_t dist_uvs
Distortion of the uv_mode's recon.
Definition: intra_mode_search.h:64
int rate_uv_intra
Total rate to transmit uv_mode.
Definition: intra_mode_search.h:62
int skip_uvs
Whether the uv txfm is skippable.
Definition: intra_mode_search.h:65
PALETTE_MODE_INFO pmi_uv
Color map if mode_uv is palette.
Definition: intra_mode_search.h:67
uint8_t directional_mode_skip_mask[INTRA_MODES]
Whether a directional mode is pruned.
Definition: intra_mode_search.h:49
UV_PREDICTION_MODE mode_uv
The best uv mode.
Definition: intra_mode_search.h:66
int rate_uv_tokenonly
Rate transmit txfm tokens.
Definition: intra_mode_search.h:63
int8_t uv_angle_delta
Angle delta if mode_uv directional.
Definition: intra_mode_search.h:68
Stores the prediction/txfm mode of the current coding block.
Definition: blockd.h:222
Encoder's parameters related to the current coding block.
Definition: block.h:813