shithub: libvpx

Download patch

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;