ref: 8d97ba4a673931b8343b372b6c45eb3f787876cd
parent: 734c3d2b66b063e9ebcf0bc4ceb9ae3a9baacd31
parent: dfbd724ef3b77fcc4c904b178455d07990e48fe7
author: Jingning Han <jingning@google.com>
date: Tue Sep 18 14:44:58 EDT 2018
Merge "Update frame index per buffer at encoder"
--- a/vp9/encoder/vp9_encoder.c
+++ b/vp9/encoder/vp9_encoder.c
@@ -4587,6 +4587,16 @@
}
}
+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) {
@@ -4750,6 +4760,9 @@
// 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);
--- a/vp9/encoder/vp9_encoder.h
+++ b/vp9/encoder/vp9_encoder.h
@@ -858,6 +858,10 @@
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;