From 227deb503e381b86fccae3fd92ee92baacec0948 Mon Sep 17 00:00:00 2001 From: Jingning Han Date: Mon, 15 Oct 2018 10:11:57 -0700 Subject: [PATCH] Add encoder side frame buffer for tpl model Add an encoder side reference frame buffer pool to store the reference frames for tpl model. This servces as an intermediate step to support multi-layer ARF system. The buffer memory size will be optimized afterwards. Change-Id: If2d2f095d4911a4996f6c2a0b0a8e3d235ceadb2 --- vp9/encoder/vp9_encoder.c | 10 +++++++--- vp9/encoder/vp9_encoder.h | 9 ++++++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c index 21decd5..7c9d61a 100644 --- a/vp9/encoder/vp9_encoder.c +++ b/vp9/encoder/vp9_encoder.c @@ -2359,11 +2359,10 @@ VP9_COMP *vp9_create_compressor(VP9EncoderConfig *oxcf, vp9_set_speed_features_framesize_dependent(cpi); if (cpi->sf.enable_tpl_model) { + const int mi_cols = mi_cols_aligned_to_sb(cm->mi_cols); + const int mi_rows = mi_cols_aligned_to_sb(cm->mi_rows); // TODO(jingning): Reduce the actual memory use for tpl model build up. for (frame = 0; frame < MAX_ARF_GOP_SIZE; ++frame) { - int mi_cols = mi_cols_aligned_to_sb(cm->mi_cols); - int mi_rows = mi_cols_aligned_to_sb(cm->mi_rows); - CHECK_MEM_ERROR(cm, cpi->tpl_stats[frame].tpl_stats_ptr, vpx_calloc(mi_rows * mi_cols, sizeof(*cpi->tpl_stats[frame].tpl_stats_ptr))); @@ -2374,6 +2373,11 @@ VP9_COMP *vp9_create_compressor(VP9EncoderConfig *oxcf, cpi->tpl_stats[frame].mi_rows = cm->mi_rows; cpi->tpl_stats[frame].mi_cols = cm->mi_cols; } + + for (frame = 0; frame < REF_FRAMES; ++frame) { + cpi->enc_frame_buf[frame].mem_valid = 0; + cpi->enc_frame_buf[frame].released = 1; + } } // Allocate memory to store variances for a frame. diff --git a/vp9/encoder/vp9_encoder.h b/vp9/encoder/vp9_encoder.h index 45cc973..79346ed 100644 --- a/vp9/encoder/vp9_encoder.h +++ b/vp9/encoder/vp9_encoder.h @@ -495,6 +495,12 @@ typedef struct ARNRFilterData { struct scale_factors sf; } ARNRFilterData; +typedef struct EncFrameBuf { + int mem_valid; + int released; + YV12_BUFFER_CONFIG frame; +} EncFrameBuf; + // Maximum operating frame buffer size needed for a GOP using ARF reference. #define MAX_ARF_GOP_SIZE (2 * MAX_LAG_BUFFERS) @@ -522,7 +528,8 @@ typedef struct VP9_COMP { YV12_BUFFER_CONFIG *raw_source_frame; TplDepFrame tpl_stats[MAX_ARF_GOP_SIZE]; - YV12_BUFFER_CONFIG *tpl_recon_frames[REFS_PER_FRAME + 1]; + YV12_BUFFER_CONFIG *tpl_recon_frames[REF_FRAMES]; + EncFrameBuf enc_frame_buf[REF_FRAMES]; TileDataEnc *tile_data; int allocated_tiles; // Keep track of memory allocated for tiles. -- 2.7.4