Move tpl related structures to tpl_model.h Moved tpl related macros and structure TplDepStats, TplDepFrame and TplParams to tpl_model.h Change-Id: I3fef54edab1f7bfe9c9e7f2f868925b50102462b
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h index 8a239ca..ddd8118 100644 --- a/av1/encoder/encoder.h +++ b/av1/encoder/encoder.h
@@ -155,119 +155,7 @@ ENABLE_SCENECUT_MODE_2 // For twopass and LAP - lag_in_frames >=33 } UENUM1BYTE(SCENECUT_MODE); -// TODO(jingning): This needs to be cleaned up next. - -// TPL stats buffers are prepared for every frame in the GOP, -// including (internal) overlays and (internal) arfs. -// In addition, frames in the lookahead that are outside of the GOP -// are also used. -// Thus it should use -// (gop_length) + (# overlays) + (MAX_LAG_BUFFERS - gop_len) = -// MAX_LAG_BUFFERS + (# overlays) -// 2 * MAX_LAG_BUFFERS is therefore a safe estimate. -// TODO(bohanli): test setting it to 1.5 * MAX_LAG_BUFFER -#define MAX_TPL_FRAME_IDX (2 * MAX_LAG_BUFFERS) -// The first REF_FRAMES + 1 buffers are reserved. -// tpl_data->tpl_frame starts after REF_FRAMES + 1 -#define MAX_LENGTH_TPL_FRAME_STATS (MAX_TPL_FRAME_IDX + REF_FRAMES + 1) -#define MAX_TPL_EXTEND (MAX_LAG_BUFFERS - MAX_GF_INTERVAL) #define MAX_VBR_CORPUS_COMPLEXITY 10000 -typedef struct TplDepStats { - int64_t intra_cost; - int64_t inter_cost; - int64_t srcrf_dist; - int64_t recrf_dist; - int64_t srcrf_rate; - int64_t recrf_rate; - int64_t mc_dep_rate; - int64_t mc_dep_dist; - int_mv mv[INTER_REFS_PER_FRAME]; - int ref_frame_index; - int64_t pred_error[INTER_REFS_PER_FRAME]; - int64_t mc_count; - int64_t mc_saved; -} TplDepStats; - -typedef struct TplDepFrame { - uint8_t is_valid; - TplDepStats *tpl_stats_ptr; - const YV12_BUFFER_CONFIG *gf_picture; - YV12_BUFFER_CONFIG *rec_picture; - int ref_map_index[REF_FRAMES]; - int stride; - int width; - int height; - int mi_rows; - int mi_cols; - int base_rdmult; -} TplDepFrame; - -/*!\endcond */ - -/*! - * \brief Params related to temporal dependency model. - */ -typedef struct TplParams { - /*! - * Block granularity of tpl score storage. - */ - uint8_t tpl_stats_block_mis_log2; - - /*! - * Buffer to store the frame level tpl information for each frame in a gf - * group. tpl_stats_buffer[i] stores the tpl information of ith frame in a gf - * group - */ - TplDepFrame tpl_stats_buffer[MAX_LENGTH_TPL_FRAME_STATS]; - - /*! - * Buffer to store tpl stats at block granularity. - * tpl_stats_pool[i][j] stores the tpl stats of jth block of ith frame in a gf - * group. - */ - TplDepStats *tpl_stats_pool[MAX_LAG_BUFFERS]; - - /*! - * Buffer to store tpl reconstructed frame. - * tpl_rec_pool[i] stores the reconstructed frame of ith frame in a gf group. - */ - YV12_BUFFER_CONFIG tpl_rec_pool[MAX_LAG_BUFFERS]; - - /*! - * Pointer to tpl_stats_buffer. - */ - TplDepFrame *tpl_frame; - - /*! - * Scale factors for the current frame. - */ - struct scale_factors sf; - - /*! - * GF group index of the current frame. - */ - int frame_idx; - - /*! - * Array of pointers to the frame buffers holding the source frame. - * src_ref_frame[i] stores the pointer to the source frame of the ith - * reference frame type. - */ - const YV12_BUFFER_CONFIG *src_ref_frame[INTER_REFS_PER_FRAME]; - - /*! - * Array of pointers to the frame buffers holding the tpl reconstructed frame. - * ref_frame[i] stores the pointer to the tpl reconstructed frame of the ith - * reference frame type. - */ - const YV12_BUFFER_CONFIG *ref_frame[INTER_REFS_PER_FRAME]; - - /*! - * Parameters related to synchronization for top-right dependency in row based - * multi-threading of tpl - */ - AV1TplRowMultiThreadSync tpl_mt_sync; -} TplParams; /*!\cond */ @@ -278,8 +166,6 @@ COST_UPD_OFF, } COST_UPDATE_TYPE; -#define TPL_DEP_COST_SCALE_LOG2 4 - /*!\endcond */ /*!
diff --git a/av1/encoder/tpl_model.h b/av1/encoder/tpl_model.h index 197f4e3..18af405 100644 --- a/av1/encoder/tpl_model.h +++ b/av1/encoder/tpl_model.h
@@ -60,6 +60,121 @@ int cols); } AV1TplRowMultiThreadInfo; +// TODO(jingning): This needs to be cleaned up next. + +// TPL stats buffers are prepared for every frame in the GOP, +// including (internal) overlays and (internal) arfs. +// In addition, frames in the lookahead that are outside of the GOP +// are also used. +// Thus it should use +// (gop_length) + (# overlays) + (MAX_LAG_BUFFERS - gop_len) = +// MAX_LAG_BUFFERS + (# overlays) +// 2 * MAX_LAG_BUFFERS is therefore a safe estimate. +// TODO(bohanli): test setting it to 1.5 * MAX_LAG_BUFFER +#define MAX_TPL_FRAME_IDX (2 * MAX_LAG_BUFFERS) +// The first REF_FRAMES + 1 buffers are reserved. +// tpl_data->tpl_frame starts after REF_FRAMES + 1 +#define MAX_LENGTH_TPL_FRAME_STATS (MAX_TPL_FRAME_IDX + REF_FRAMES + 1) +#define MAX_TPL_EXTEND (MAX_LAG_BUFFERS - MAX_GF_INTERVAL) +#define TPL_DEP_COST_SCALE_LOG2 4 + +typedef struct TplDepStats { + int64_t intra_cost; + int64_t inter_cost; + int64_t srcrf_dist; + int64_t recrf_dist; + int64_t srcrf_rate; + int64_t recrf_rate; + int64_t mc_dep_rate; + int64_t mc_dep_dist; + int_mv mv[INTER_REFS_PER_FRAME]; + int ref_frame_index; + int64_t pred_error[INTER_REFS_PER_FRAME]; + int64_t mc_count; + int64_t mc_saved; +} TplDepStats; + +typedef struct TplDepFrame { + uint8_t is_valid; + TplDepStats *tpl_stats_ptr; + const YV12_BUFFER_CONFIG *gf_picture; + YV12_BUFFER_CONFIG *rec_picture; + int ref_map_index[REF_FRAMES]; + int stride; + int width; + int height; + int mi_rows; + int mi_cols; + int base_rdmult; +} TplDepFrame; + +/*!\endcond */ + +/*! + * \brief Params related to temporal dependency model. + */ +typedef struct TplParams { + /*! + * Block granularity of tpl score storage. + */ + uint8_t tpl_stats_block_mis_log2; + + /*! + * Buffer to store the frame level tpl information for each frame in a gf + * group. tpl_stats_buffer[i] stores the tpl information of ith frame in a gf + * group + */ + TplDepFrame tpl_stats_buffer[MAX_LENGTH_TPL_FRAME_STATS]; + + /*! + * Buffer to store tpl stats at block granularity. + * tpl_stats_pool[i][j] stores the tpl stats of jth block of ith frame in a gf + * group. + */ + TplDepStats *tpl_stats_pool[MAX_LAG_BUFFERS]; + + /*! + * Buffer to store tpl reconstructed frame. + * tpl_rec_pool[i] stores the reconstructed frame of ith frame in a gf group. + */ + YV12_BUFFER_CONFIG tpl_rec_pool[MAX_LAG_BUFFERS]; + + /*! + * Pointer to tpl_stats_buffer. + */ + TplDepFrame *tpl_frame; + + /*! + * Scale factors for the current frame. + */ + struct scale_factors sf; + + /*! + * GF group index of the current frame. + */ + int frame_idx; + + /*! + * Array of pointers to the frame buffers holding the source frame. + * src_ref_frame[i] stores the pointer to the source frame of the ith + * reference frame type. + */ + const YV12_BUFFER_CONFIG *src_ref_frame[INTER_REFS_PER_FRAME]; + + /*! + * Array of pointers to the frame buffers holding the tpl reconstructed frame. + * ref_frame[i] stores the pointer to the tpl reconstructed frame of the ith + * reference frame type. + */ + const YV12_BUFFER_CONFIG *ref_frame[INTER_REFS_PER_FRAME]; + + /*! + * Parameters related to synchronization for top-right dependency in row based + * multi-threading of tpl + */ + AV1TplRowMultiThreadSync tpl_mt_sync; +} TplParams; + int av1_tpl_setup_stats(struct AV1_COMP *cpi, int gop_eval, const struct EncodeFrameParams *const frame_params, const struct EncodeFrameInput *const frame_input);