summaryrefslogtreecommitdiff
path: root/vp9
diff options
context:
space:
mode:
authorJingning Han <jingning@google.com>2018-10-15 10:11:57 -0700
committerJingning Han <jingning@google.com>2018-10-15 14:57:05 -0700
commit227deb503e381b86fccae3fd92ee92baacec0948 (patch)
treeff892de3d17c6f8d43da411d6ba382d0136c9916 /vp9
parentf6a52bee7db6b54308fa080b84ebfe12977f6b45 (diff)
downloadlibvpx-227deb503e381b86fccae3fd92ee92baacec0948.tar
libvpx-227deb503e381b86fccae3fd92ee92baacec0948.tar.gz
libvpx-227deb503e381b86fccae3fd92ee92baacec0948.tar.bz2
libvpx-227deb503e381b86fccae3fd92ee92baacec0948.zip
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
Diffstat (limited to 'vp9')
-rw-r--r--vp9/encoder/vp9_encoder.c10
-rw-r--r--vp9/encoder/vp9_encoder.h9
2 files changed, 15 insertions, 4 deletions
diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c
index 21decd526..7c9d61ab2 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 45cc97315..79346ed09 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.