]> granicus.if.org Git - libvpx/commitdiff
Bugfix for svc.
authorMarco <marpan@chromium.org>
Wed, 5 Aug 2015 20:53:26 +0000 (13:53 -0700)
committerMarco <marpan@chromium.org>
Wed, 5 Aug 2015 20:59:52 +0000 (13:59 -0700)
Condition usage of rc.frames_since_golden to non-svc mode.

rc.frames_since_golden, which is used in non-svc mode to add second reference,
was causing, under certain condiiton, the turning off of golden reference
for svc case.

Change-Id: Icec644d235d0471e56d8ff73d6c37278bd6ecd3b

vp9/encoder/vp9_encodeframe.c
vp9/encoder/vp9_pickmode.c
vp9/encoder/vp9_ratectrl.c

index e7f14eb7e5f9aa1f4ed422e7897fd79910c887d5..feef12d1e21f6679c4ed91ce712aa2f55cff1237 100644 (file)
@@ -3925,7 +3925,9 @@ static void encode_frame_internal(VP9_COMP *cpi) {
     }
     vp9_zero(x->zcoeff_blk);
 
-    if (cm->frame_type != KEY_FRAME && cpi->rc.frames_since_golden == 0)
+    if (cm->frame_type != KEY_FRAME &&
+        cpi->rc.frames_since_golden == 0 &&
+        !cpi->use_svc)
       cpi->ref_frame_flags &= (~VP9_GOLD_FLAG);
 
     if (sf->partition_search_type == SOURCE_VAR_BASED_PARTITION)
index 6831be8d55cab98e4708e8321207b8308258322f..2493bd7c799389b899dfce9d04cd4b66105d6e54 100644 (file)
@@ -1157,12 +1157,11 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
   vp9_denoiser_reset_frame_stats(ctx);
 #endif
 
-  if (cpi->rc.frames_since_golden == 0) {
+  if (cpi->rc.frames_since_golden == 0 && !cpi->use_svc) {
     usable_ref_frame = LAST_FRAME;
   } else {
     usable_ref_frame = GOLDEN_FRAME;
   }
-
   for (ref_frame = LAST_FRAME; ref_frame <= usable_ref_frame; ++ref_frame) {
     const YV12_BUFFER_CONFIG *yv12 = get_ref_frame_buffer(cpi, ref_frame);
 
index 7427ccfb9d4b1d76ca18de901f979c89d36e60f5..d1624164243495c3afce6b2cf8a560abb1cb57bb 100644 (file)
@@ -1339,13 +1339,15 @@ void vp9_rc_postencode_update(VP9_COMP *cpi, uint64_t bytes_used) {
 
   rc->total_target_vs_actual = rc->total_actual_bits - rc->total_target_bits;
 
-  if (is_altref_enabled(cpi) && cpi->refresh_alt_ref_frame &&
-      (cm->frame_type != KEY_FRAME))
-    // Update the alternate reference frame stats as appropriate.
-    update_alt_ref_frame_stats(cpi);
-  else
-    // Update the Golden frame stats as appropriate.
-    update_golden_frame_stats(cpi);
+  if (!cpi->use_svc) {
+    if (is_altref_enabled(cpi) && cpi->refresh_alt_ref_frame &&
+        (cm->frame_type != KEY_FRAME))
+      // Update the alternate reference frame stats as appropriate.
+      update_alt_ref_frame_stats(cpi);
+    else
+      // Update the Golden frame stats as appropriate.
+      update_golden_frame_stats(cpi);
+  }
 
   if (cm->frame_type == KEY_FRAME)
     rc->frames_since_key = 0;