From dfbd724ef3b77fcc4c904b178455d07990e48fe7 Mon Sep 17 00:00:00 2001 From: Jingning Han Date: Mon, 17 Sep 2018 14:17:36 -0700 Subject: [PATCH] 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 --- vp9/encoder/vp9_encoder.c | 13 +++++++++++++ vp9/encoder/vp9_encoder.h | 4 ++++ 2 files changed, 17 insertions(+) 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; -- 2.40.0