Fix NO_FRAME_CONTEXT_SIGNALING + large_scale_tile.
Firstly, due to the qindex fix, av1_setup_frame_contexts() is sometimes
called on frames that are not keyframes, so remove the assertion.
Secondly, make sure to always code PRIMARY_REF_NONE when in
large_scale_tile mode.
Change-Id: I849a9e619c375e72a8c6d26bdd8957995981cfdf
diff --git a/av1/common/entropymode.c b/av1/common/entropymode.c
index 26ed86e..9502997 100644
--- a/av1/common/entropymode.c
+++ b/av1/common/entropymode.c
@@ -1173,9 +1173,11 @@
void av1_setup_frame_contexts(AV1_COMMON *cm) {
#if CONFIG_NO_FRAME_CONTEXT_SIGNALING
- assert(frame_is_intra_only(cm) || cm->error_resilient_mode);
// Store the frame context into a special slot (not associated with any
// reference buffer), so that we can set up cm->pre_fc correctly later
+ // This function must ONLY be called when cm->fc has been initialized with
+ // default probs, either by av1_setup_past_independence or after manually
+ // initializing them
cm->frame_contexts[FRAME_CONTEXT_DEFAULTS] = *cm->fc;
#else
if (cm->frame_type == KEY_FRAME || cm->error_resilient_mode ||
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 0c1a74a..535514f 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -320,7 +320,8 @@
cm->fb_of_context_type[REGULAR_FRAME] =
get_ref_frame_map_idx(cpi, GOLDEN_FRAME);
#endif
- } else {
+ } else if (!cm->large_scale_tile) {
+ // for large scale tile we leave the default PRIMARY_REF_NONE
const GF_GROUP *gf_group = &cpi->twopass.gf_group;
if (gf_group->update_type[gf_group->index] == INTNL_ARF_UPDATE)
cm->frame_context_idx = EXT_ARF_FRAME;