}
}
+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) {
// 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) {
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;