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");
}