Support no refresh with subgop config

Change-Id: Ic8ef90e93d58f740e22863396cd39a01f50526a9
diff --git a/av1/encoder/encode_strategy.c b/av1/encoder/encode_strategy.c
index 1ee88a7..7338d15 100644
--- a/av1/encoder/encode_strategy.c
+++ b/av1/encoder/encode_strategy.c
@@ -951,6 +951,9 @@
   assert(step_gop_cfg != NULL);
   const int pyr_level = step_gop_cfg->pyr_level;
   const FRAME_TYPE_CODE type_code = step_gop_cfg->type_code;
+  const int refresh_level = step_gop_cfg->refresh;
+  if (refresh_level == 0) return 0;
+
   // No refresh necessary for these frame types
   if (type_code == FRAME_TYPE_INO_REPEAT ||
       type_code == FRAME_TYPE_INO_SHOWEXISTING)
@@ -962,7 +965,6 @@
   }
 
   const int update_arf = type_code == FRAME_TYPE_OOO_FILTERED && pyr_level == 1;
-  const int refresh_level = step_gop_cfg->refresh;
   const int refresh_idx = get_refresh_idx(update_arf, refresh_level,
                                           cur_disp_order, ref_frame_map_pairs);
   return 1 << refresh_idx;
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index 2033def..319ee0a 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -796,7 +796,9 @@
   int8_t pyr_level;
   int8_t num_references;  // value of -1 indicates unspecified references
   int8_t references[INTER_REFS_PER_FRAME];
-  int8_t refresh;
+  int8_t refresh;  // value of -1 indicates unspecified refresh
+                   // value of 0 indicates force no refresh
+                   // positive value indicates refresh level
 } SubGOPStepCfg;
 
 typedef struct {
diff --git a/av1/encoder/subgop.c b/av1/encoder/subgop.c
index bf750fa..9effaca 100644
--- a/av1/encoder/subgop.c
+++ b/av1/encoder/subgop.c
@@ -128,10 +128,11 @@
   }
   assert(ptr != NULL);
 
+  step->refresh = -1;
   if (*ptr == 'X') {
     ptr++;
     step->refresh = (int8_t)strtol(ptr, NULL, 10);
-    if (step->refresh <= 0) return 0;
+    if (step->refresh < 0) return 0;
   } else if (*ptr == 0) {
     // no refresh data preceded by X provided
     return 1;
@@ -349,11 +350,12 @@
         step->num_references++;
       }
     }
+    step->refresh = -1;
     token = read_token_after(str, "refresh:", &str);
     if (!token) continue;
     if (strlen(token) == 0) continue;
     const int refresh = atoi(token);
-    if (refresh == 0) return 0;
+    if (refresh < 0) return 0;
     step->refresh = refresh;
   }
   return 1;
@@ -422,7 +424,7 @@
           printf("%d", config->step[j].references[r]);
         }
       }
-      if (config->step[j].refresh)
+      if (config->step[j].refresh >= 0)
         printf(" refresh:%d", config->step[j].refresh);
       printf("\n");
     }