Adjust, fix and add subgop config models

The enhanced model gives a -0.3% BDRATE improvement over the
baseline in a 49 frame q-mode test.

Change-Id: Iadc583f963519183d1ea90f10ac1c6fd674744a1
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c
index dfde0fd..a21c1c1 100644
--- a/av1/av1_cx_iface.c
+++ b/av1/av1_cx_iface.c
@@ -159,10 +159,10 @@
 };
 
 // Example subgop configs. Currently not used by default.
+//
 // Default config
 const char subgop_config_str_16_def[] =
-    "16:2:16F1P1/8F2P1^-1/"
-    "4U3P-2^1^-1/2U4P1^-3^-2^-1/"
+    "16:2:16F1P1/8F2P1^-1/4U3P-2^1^-1/2U4P1^-3^-2^-1/"
     "1V5P1^-2^-4^-3^-1/2S/3V5P4^5^1^-3^-2^-1/4S/6U4P3^5^5^1^-2^4^-1/"
     "5V5P3^5^4^1^-4^-2^-1/6S/7V5P4^5^5^1^-2^3^-1/8R2P5^4^3^1^2^5^-1/"
     "12U3P2^5^3^1^5^4^-1/10U4P2^5^5^1^-3^4^-1/9V5P2^5^4^1^-4^-3^-1/10S/"
@@ -177,6 +177,29 @@
     "11V5P4^5^2^1^-3^1^-1/12S/14U4P3^5^5^1^1^4^-1/13V5P3^5^4^1^-4^1^-1/"
     "14S/15V5P4^5^5^1^1^3^-1/16R1P5^4^5^1^3^5^1,";
 
+// An enhanced config where the last subgop uses a shorter dist to arf
+const char subgop_config_str_16_enh[] =
+    "16:2:16F1P1/8F2P1^-1/4U3P-2^1^-1/2U4P1^-3^-2^-1/"
+    "1V5P1^-2^-4^-3^-1/2S/3V5P4^5^1^-3^-2^-1/4S/6U4P3^5^5^1^-2^4^-1/"
+    "5V5P3^5^4^1^-4^-2^-1/6S/7V5P4^5^5^1^-2^3^-1/8R2P5^4^3^1^2^5^-1/"
+    "12U3P2^5^3^1^5^4^-1/10U4P2^5^5^1^-3^4^-1/9V5P2^5^4^1^-4^-3^-1/10S/"
+    "11V5P4^5^5^1^-3^2^-1/12S/14U4P3^5^2^1^5^4^-1/13V5P3^5^5^1^-4^4^-1/"
+    "14S/15V5P4^5^4^1^5^3^-1/16R1P5^4^5^1^3^5^1,"
+
+    "16:0:16F1P5^4^3^1^1^1^5/8F2P5^4^3^1^1^5^-1/4U3P5^4^5^1^-2^1^-1/"
+    "2U4P5^4^1^1^-3^-2^-1/1V5P5^4^1^1^-4^-3^-1/2S/3V5P4^5^1^1^-3^-2^-1/4S/"
+    "6U4P3^5^4^1^-2^1^-1/5V5P3^5^1^1^-4^-2^-1/6S/7V5P4^5^3^1^-2^1^-1/"
+    "8R2P5^4^5^1^2^1^-1/12U3P2^5^5^1^1^4^-1/10U4P2^5^4^1^-3^1^-1/"
+    "9V5P2^5^1^1^-4^-3^-1/10S/11V5P4^5^2^1^-3^1^-1/12S/14U4P3^5^5^1^1^4^-1/"
+    "13V5P3^5^4^1^-4^1^-1/14S/15V5P4^5^5^1^1^3^-1/16R1P5^4^5^1^3^1,"
+
+    "16:1:14F1P4^3^1^1^1^5/7F2P1^1^-1^3^4^5^5/4U3P5^5^4^1^1^-2^-1/"
+    "2U4P5^4^1^1^-3^-2^-1/1V5P5^4^1^1^-4^-3^-1/2S/3V5P1^1^5^4^-3^-2^-1/4S/"
+    "6U4P3^5^4^1^-2^1^-1/5V5P1^5^3^-4^-2^-1/6S/7R2P1^1^-1^2^4^3^5/"
+    "11U3P1^1^2^-1^5^4^3/9U4P1^1^5^4^2^-3^-1/8V5P1^1^4^2^-4^-3^-1/9S/"
+    "10V5P1^2^4^1^5^-3^-1/11S/13U4P1^1^4^3^-1^5^5/12V5P1^1^4^5^3^-4^-1/13S/"
+    "14R1P1^1^3^4^5^5/16U4P1^1^3^4^5^5/15V5P1^1^3^4^5^-4/16S";
+
 // A config that honors temporally scalable prediction structure, i.e.
 // no frame is coded with references at higher pyramid depths.
 const char subgop_config_str_16_ts[] =
@@ -195,18 +218,31 @@
 // An asymmetrical config where the hierarchical frames are not exactly
 // dyadic, but slightly skewed.
 const char subgop_config_str_16_asym[] =
-    "16:0:16F1P1^1/11F2P1^1^2^-1/6U3P1^1^2^-2^-1/3U4P1^1^-3^-2^-1/"
-    "1V5P1^1^-4^-3^-2^-1/2V5P1^1^-4^-3^-2^-1^5/3S/4V5P1^5^5^4^-3^-2^-1/"
-    "5V5P1^5^5^4^-3^-2^-1/6S/9U3P^1^3^-1^-2/7V4P1^-1^-2^3^-3^4/"
-    "8V5P1^-1^-2^-3^3^4^5/9S/10V4P1^-1^-2^3^3^4/11R2P1^2^-1/"
-    "14U3P1^-1^2^3^3/13U4P1^-1^2^3^-3^4^4/12V5P1^-1^2^3^-3^4^-4/"
-    "13S/14S/15V5P1^-1^2^3^4^4^5/16R1P1^1,"
+    "16:2:16F1P1/10F2P1^-1/5U3P-2^1^-1/3U4P1^-3^-2^-1/"
+    "1V4P1^-2^-3^-4^-1/2V5P1^4^-4^-3^-2^-1/3S/4V5P1^-1^-2^-3^4^4^5/5S/"
+    "8U4P1^-1^-2^3^4^5^5/6V4P1^-1^-2^3^-4^4^5/7V5P1^-1^-2^3^-4^4^5/8S/"
+    "9V5P1^-1^-2^3^4^4^5/10R2P1^-1^2^5^5^4^4/13U3P1^-1^2^5^4^4^5/"
+    "11V4P1^-1^2^-3^5^4^5/12V5P1^-1^2^-3^5^4^4/13S/"
+    "14V4P1^-1^2^3^5^4^5/15V5P1^-1^2^3^4^4^5/16R1P1^1^3^4^4^5^5/,"
 
-    "16:1:14F1P1^1/8F2P1^1^2^-1/4U3P1^1^2^-2^-1/2U4P1^1^-3^-2^-1/"
-    "1V5P1^1^-4^-3^-2^-1/2S/3V5P1^5^4^-3^-2^-1/4S/6U4P1^3^4^-2^-1/"
-    "5V5P1^4^5^3^-4^-2^-1/6S/7V5P1^3^5^4^-2^-1/8R2P1^2^-1/11U3P1^3^2^-1/"
-    "9V4P1^-1^2^3^-3^4/10V5P1^-1^2^-3^4^4^5/11S/12V4P1^-1^2^3^4/"
-    "13V5P1^-1^2^3^4^4^5/14R1P1^1/16U4P1^1^2^3^4/15V5P1^1^2^3^4^-4^5/16S";
+    "16:0:16F1P5^4^3^1^1^4^5/11F2P5^4^3^1^1^5^-1/6U3P3^4^5^1^-2^1^-1/"
+    "3U4P5^4^1^1^-3^-2^-1/1V5P4^1^1^-4^-1^-3^5/2V5P1^1^-4^-3^-1^5^5/3S/"
+    "4V5P4^5^1^1^-3^-2^-1/5V5P1^1^5^4^-3^-2^-1/6S/9U3P1^3^-1^-2^1^5/"
+    "7V4P1^1^-1^-2^3^-3^5/8V5P1^1^-1^-2^-3^3^4/9S/10V4P1^1^-1^-2^3^4^5/"
+    "11R2P1^1^2^-1/14U3P1^1^-1^2^3^4^5/13U4P1^-1^2^3^-3^4/"
+    "12V5P1^1^-1^2^-3^4^-4/13S/14S/15V5P1^1^-1^2^3^4^5/16R1P1^1^3^4^5^5,"
+
+    "16:1:14F1P5^4^3^1^1^1^5/7F2P1^1^-1^3^4^5^5/4U3P5^4^1^1^-2^-1/"
+    "2U4P5^3^1^1^-3^-2^-1/1V5P5^3^1^1^-4^-3^-1/2S/3V5P1^1^5^4^-3^-2^-1/4S/"
+    "6U4P3^5^4^1^-2^1^-1/5V5P1^5^3^-4^-2^-1/6S/7R2P1^1^-1^2^4^5/"
+    "11U3P1^1^2^-1^5^4^3/9U4P1^1^5^4^2^-3^-1/8V5P1^1^2^-4^4^-3^-1/9S/"
+    "10V5P1^2^4^1^5^-3^-1/11S/13U4P1^1^4^3^-1^5^5/12V5P1^1^4^5^3^-4^-1/13S/"
+    "14R1P1^1^1^3^4^5^5/16U4P1^1^3^4^5^5/15V5P1^1^3^4^5^-4/16S";
+
+// low delay config without references
+const char subgop_config_str_16_ld[] =
+    "16:0:1V5/2V4/3V5/4V3/5V5/6V4/7V5/8V2/"
+    "9V5/10V4/11V5/12V3/13V5/14V4/15V5/16V1";
 
 static struct av1_extracfg default_extra_cfg = {
   0,              // cpu_used