summaryrefslogtreecommitdiff
path: root/vp9/encoder
diff options
context:
space:
mode:
authorJingning Han <jingning@google.com>2018-09-17 14:17:36 -0700
committerJingning Han <jingning@google.com>2018-09-17 20:58:14 -0700
commitdfbd724ef3b77fcc4c904b178455d07990e48fe7 (patch)
tree7839c07d3575bff587caa2d8ceff804acb819e5c /vp9/encoder
parent7323218a5e390c20c2db71a158bee53b695958e7 (diff)
downloadlibvpx-dfbd724ef3b77fcc4c904b178455d07990e48fe7.tar
libvpx-dfbd724ef3b77fcc4c904b178455d07990e48fe7.tar.gz
libvpx-dfbd724ef3b77fcc4c904b178455d07990e48fe7.tar.bz2
libvpx-dfbd724ef3b77fcc4c904b178455d07990e48fe7.zip
Update frame index per buffer at encoder
Update the frame index counting from key frame offset for all the processed frames at the encoder. This would allow encoder to automatically decide frame sign bias next. Change-Id: Ibbdc2a29b7245be27422272e1fb539596eed63d1
Diffstat (limited to 'vp9/encoder')
-rw-r--r--vp9/encoder/vp9_encoder.c13
-rw-r--r--vp9/encoder/vp9_encoder.h4
2 files changed, 17 insertions, 0 deletions
diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c
index 2de85e735..f50022dba 100644
--- a/vp9/encoder/vp9_encoder.c
+++ b/vp9/encoder/vp9_encoder.c
@@ -4587,6 +4587,16 @@ static void vp9_try_disable_lookahead_aq(VP9_COMP *cpi, size_t *size,
}
}
+static void set_frame_index(VP9_COMP *cpi, VP9_COMMON *cm) {
+ RefCntBuffer *const ref_buffer = get_ref_cnt_buffer(cm, cm->new_fb_idx);
+
+ if (ref_buffer) {
+ const GF_GROUP *const gf_group = &cpi->twopass.gf_group;
+ ref_buffer->frame_index =
+ cm->current_video_frame + gf_group->arf_src_offset[gf_group->index];
+ }
+}
+
static void encode_frame_to_data_rate(VP9_COMP *cpi, size_t *size,
uint8_t *dest,
unsigned int *frame_flags) {
@@ -4751,6 +4761,9 @@ static void encode_frame_to_data_rate(VP9_COMP *cpi, size_t *size,
// build the bitstream
vp9_pack_bitstream(cpi, dest, size);
+ // Update frame index
+ set_frame_index(cpi, cm);
+
if (cm->seg.update_map) update_reference_segmentation_map(cpi);
if (frame_is_intra_only(cm) == 0) {
diff --git a/vp9/encoder/vp9_encoder.h b/vp9/encoder/vp9_encoder.h
index 4034fe42c..192668225 100644
--- a/vp9/encoder/vp9_encoder.h
+++ b/vp9/encoder/vp9_encoder.h
@@ -858,6 +858,10 @@ static INLINE int get_ref_frame_buf_idx(const VP9_COMP *const cpi,
return (map_idx != INVALID_IDX) ? cm->ref_frame_map[map_idx] : INVALID_IDX;
}
+static INLINE RefCntBuffer *get_ref_cnt_buffer(VP9_COMMON *cm, int fb_idx) {
+ return fb_idx != INVALID_IDX ? &cm->buffer_pool->frame_bufs[fb_idx] : NULL;
+}
+
static INLINE YV12_BUFFER_CONFIG *get_ref_frame_buffer(
VP9_COMP *cpi, MV_REFERENCE_FRAME ref_frame) {
VP9_COMMON *const cm = &cpi->common;