]> granicus.if.org Git - libvpx/commitdiff
vp9-svc: Add check/reset for long term reference.
authorMarco Paniconi <marpan@google.com>
Wed, 28 Nov 2018 00:16:04 +0000 (16:16 -0800)
committerJerome Jiang <jianj@google.com>
Wed, 28 Nov 2018 00:38:14 +0000 (16:38 -0800)
Add check and reset (turn off) usage of long term
reference if some conditons (layer id of reference vs
current frame) are not met.

Change-Id: Ie3a84e3618f4fc4d5f8da4e67316cfbefb8bae78

vp9/encoder/vp9_svc_layercontext.c

index c4c5b5a9fb63aacbd09fe8c0bdfc67011b026df4..0296d03d83f637d0472e2f55b174b6153e973fd1 100644 (file)
@@ -1092,13 +1092,16 @@ void vp9_svc_assert_constraints_pattern(VP9_COMP *const cpi) {
     }
   } else if (svc->use_gf_temporal_ref_current_layer &&
              !svc->layer_context[svc->temporal_layer_id].is_key_frame) {
-    // If the usage of golden as second long term reference is enabled for this
-    // layer, then temporal_layer_id of that reference must be base temporal
-    // layer 0, and spatial_layer_id of that reference must be same as current
-    // spatial_layer_id.
-    assert(svc->fb_idx_spatial_layer_id[cpi->gld_fb_idx] ==
-           svc->spatial_layer_id);
-    assert(svc->fb_idx_temporal_layer_id[cpi->gld_fb_idx] == 0);
+    // For the usage of golden as second long term reference: the
+    // temporal_layer_id of that reference must be base temporal layer 0, and
+    // spatial_layer_id of that reference must be same as current
+    // spatial_layer_id. If not, disable feature.
+    // TODO(marpan): Investigate when this can happen, and maybe put this check
+    // and reset in a different place.
+    if (svc->fb_idx_spatial_layer_id[cpi->gld_fb_idx] !=
+            svc->spatial_layer_id ||
+        svc->fb_idx_temporal_layer_id[cpi->gld_fb_idx] != 0)
+      svc->use_gf_temporal_ref_current_layer = 0;
   }
 }