]> granicus.if.org Git - libvpx/commitdiff
Add MID_OVERLAY_UPDATE frame type
authorJingning Han <jingning@google.com>
Fri, 28 Sep 2018 04:01:08 +0000 (21:01 -0700)
committerJingning Han <jingning@google.com>
Fri, 28 Sep 2018 04:10:06 +0000 (21:10 -0700)
Add a MID_OVERLAY_UPDATE abstract to support multi-layer
ARF-Overlay frame based approach. When setting the frame update
type to be USE_BUF_FRAME, the encoder will use show_existing_frame
to process the intermediate ARF frames. When setting the frame
update type to be MID_OVERLAY_UPDATE, the intermediate ARF frames
will go through an overlay frame for display.

Change-Id: Ia0c91452c09d39312ac22d855cdf681b7da851c5

vp9/encoder/vp9_encoder.c
vp9/encoder/vp9_firstpass.h
vp9/encoder/vp9_ratectrl.c

index 2f8e73657e163644d1586e9a5536334582dfe0c3..200d67349202cc9a09ebdc6af88e50d82c00c0ee 100644 (file)
@@ -3058,6 +3058,12 @@ void update_ref_frames(VP9_COMP *cpi) {
              cpi->interp_filter_selected[0],
              sizeof(cpi->interp_filter_selected[0]));
   }
+
+  if (gf_group->update_type[gf_group->index] == MID_OVERLAY_UPDATE) {
+    cpi->alt_fb_idx =
+        stack_pop(gf_group->arf_index_stack, gf_group->stack_size);
+    --gf_group->stack_size;
+  }
 }
 
 void vp9_update_reference_frames(VP9_COMP *cpi) {
index 886f51d5adbd19f7e43692d64eff83760117f0f3..e2fd58b8df59949387bb4d279dba33d6a0cbf113 100644 (file)
@@ -117,8 +117,9 @@ typedef enum {
   GF_UPDATE = 2,
   ARF_UPDATE = 3,
   OVERLAY_UPDATE = 4,
-  USE_BUF_FRAME = 5,  // Use show existing frame, no ref buffer update
-  FRAME_UPDATE_TYPES = 6
+  MID_OVERLAY_UPDATE = 5,
+  USE_BUF_FRAME = 6,  // Use show existing frame, no ref buffer update
+  FRAME_UPDATE_TYPES = 7
 } FRAME_UPDATE_TYPE;
 
 #define FC_ANIMATION_THRESH 0.15
index 86d2fa18c44fa4b9d90f04a04546a7577c0bafdd..d1cc5dfe128795512013f8ab93cbe59ebe425868 100644 (file)
@@ -1445,6 +1445,12 @@ void vp9_configure_buffer_updates(VP9_COMP *cpi, int gf_group_index) {
       cpi->refresh_alt_ref_frame = 0;
       cpi->rc.is_src_frame_alt_ref = 1;
       break;
+    case MID_OVERLAY_UPDATE:
+      cpi->refresh_last_frame = 1;
+      cpi->refresh_golden_frame = 0;
+      cpi->refresh_alt_ref_frame = 0;
+      cpi->rc.is_src_frame_alt_ref = 1;
+      break;
     case USE_BUF_FRAME:
       cpi->refresh_last_frame = 0;
       cpi->refresh_golden_frame = 0;