Fix global-motion + error-resilient-mode

Patch https://aomedia-review.googlesource.com/c/21783
changed things so that error-resilient frames use the default
global motion parameters as a reference, rather than taking
the reference from the previous frame.

This was implemented by clearing out cm->prev_frame->global_motion
when we have an error-resilient frame. Unfortunately, this causes
an issue: if we have an error resilient frame which isn't stored
into any reference slots, followed by a non-error-resilient frame,
then both frames refer to the same prev_frame. The second frame
then delta-codes against cm->prev_frame->global_motion, but
this was reset to the default values by the intervening
error-resilient frame!

In order to allow the above case to work as intended, expand the
default warp parameter set to a full WarpedMotionParams struct,
and use that as the reference for error-resilient frames.

This also allows us to remove set_default_warp_params, as we
can now just copy directly from default_warp_params.

Change-Id: I9645615db2700c1d3810e6e42f4f1da626fcd5e3
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index 6107b2f..a363352 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -4480,7 +4480,7 @@
 
 #if CONFIG_GLOBAL_MOTION
 static int read_global_motion_params(WarpedMotionParams *params,
-                                     WarpedMotionParams *ref_params,
+                                     const WarpedMotionParams *ref_params,
                                      struct aom_read_bit_buffer *rb,
                                      int allow_hp) {
   TransformationType type = aom_rb_read_bit(rb);
@@ -4498,7 +4498,7 @@
   int trans_bits;
   int trans_dec_factor;
   int trans_prec_diff;
-  set_default_warp_params(params);
+  *params = default_warp_params;
   params->wmtype = type;
   switch (type) {
     case HOMOGRAPHY:
@@ -4577,11 +4577,11 @@
 static void read_global_motion(AV1_COMMON *cm, struct aom_read_bit_buffer *rb) {
   int frame;
   for (frame = LAST_FRAME; frame <= ALTREF_FRAME; ++frame) {
-    if (cm->error_resilient_mode)
-      set_default_warp_params(&cm->prev_frame->global_motion[frame]);
+    const WarpedMotionParams *ref_params =
+        cm->error_resilient_mode ? &default_warp_params
+                                 : &cm->prev_frame->global_motion[frame];
     int good_params = read_global_motion_params(
-        &cm->global_motion[frame], &cm->prev_frame->global_motion[frame], rb,
-        cm->allow_high_precision_mv);
+        &cm->global_motion[frame], ref_params, rb, cm->allow_high_precision_mv);
     if (!good_params)
       aom_internal_error(&cm->error, AOM_CODEC_CORRUPT_FRAME,
                          "Invalid shear parameters for global motion.");
@@ -4597,7 +4597,7 @@
                                 &cm->prev_frame->global_motion[frame], rb,
                                 cm->allow_high_precision_mv);
     } else {
-      set_default_warp_params(&cm->global_motion[frame]);
+      cm->global_motion[frame] = default_warp_params;
     }
     */
     /*
@@ -5456,8 +5456,8 @@
 #if CONFIG_GLOBAL_MOTION
   int i;
   for (i = LAST_FRAME; i <= ALTREF_FRAME; ++i) {
-    set_default_warp_params(&cm->global_motion[i]);
-    set_default_warp_params(&cm->cur_frame->global_motion[i]);
+    cm->global_motion[i] = default_warp_params;
+    cm->cur_frame->global_motion[i] = default_warp_params;
   }
   xd->global_motion = cm->global_motion;
 #endif  // CONFIG_GLOBAL_MOTION