Update the q_adapt_probs experiment Make it work with NO_FRAME_CONTEXT_SIGNALING. Change-Id: I27813305c68de7042678706c1c9b938b172c3666
diff --git a/av1/common/entropymode.c b/av1/common/entropymode.c index 6f4d862..e942777 100644 --- a/av1/common/entropymode.c +++ b/av1/common/entropymode.c
@@ -3472,12 +3472,37 @@ av1_copy(lf->last_mode_deltas, lf->mode_deltas); } +void av1_setup_frame_contexts(AV1_COMMON *cm) { + int i; +#if CONFIG_NO_FRAME_CONTEXT_SIGNALING + if (cm->frame_type == KEY_FRAME) { + // Reset all frame contexts, as all reference frames will be lost. + for (i = 0; i < FRAME_CONTEXTS; ++i) cm->frame_contexts[i] = *cm->fc; + } +#else + if (cm->frame_type == KEY_FRAME || cm->error_resilient_mode || + cm->reset_frame_context == RESET_FRAME_CONTEXT_ALL) { + // Reset all frame contexts. + for (i = 0; i < FRAME_CONTEXTS; ++i) cm->frame_contexts[i] = *cm->fc; + } else if (cm->reset_frame_context == RESET_FRAME_CONTEXT_CURRENT) { +#if CONFIG_NO_FRAME_CONTEXT_SIGNALING + // Reset the frame context of the first specified ref frame. + if (cm->frame_refs[0].idx >= 0) { + cm->frame_contexts[cm->frame_refs[0].idx] = *cm->fc; + } +#else + // Reset only the frame context specified in the frame header. + cm->frame_contexts[cm->frame_context_idx] = *cm->fc; +#endif // CONFIG_NO_FRAME_CONTEXT_SIGNALING + } +#endif // CONFIG_NO_FRAME_CONTEXT_SIGNALING +} + void av1_setup_past_independence(AV1_COMMON *cm) { // Reset the segment feature data to the default stats: // Features disabled, 0, with delta coding (Default state). struct loopfilter *const lf = &cm->lf; - int i; av1_clearall_segfeatures(&cm->seg); if (cm->last_frame_seg_map && !cm->frame_parallel_decode) @@ -3505,29 +3530,7 @@ #endif av1_convolve_init(cm); cm->fc->initialized = 1; - -#if CONFIG_NO_FRAME_CONTEXT_SIGNALING - if (cm->frame_type == KEY_FRAME) { - // Reset all frame contexts, as all reference frames will be lost. - for (i = 0; i < FRAME_CONTEXTS; ++i) cm->frame_contexts[i] = *cm->fc; - } -#else - if (cm->frame_type == KEY_FRAME || cm->error_resilient_mode || - cm->reset_frame_context == RESET_FRAME_CONTEXT_ALL) { - // Reset all frame contexts. - for (i = 0; i < FRAME_CONTEXTS; ++i) cm->frame_contexts[i] = *cm->fc; - } else if (cm->reset_frame_context == RESET_FRAME_CONTEXT_CURRENT) { -#if CONFIG_NO_FRAME_CONTEXT_SIGNALING - // Reset the frame context of the first specified ref frame. - if (cm->frame_refs[0].idx >= 0) { - cm->frame_contexts[cm->frame_refs[0].idx] = *cm->fc; - } -#else - // Reset only the frame context specified in the frame header. - cm->frame_contexts[cm->frame_context_idx] = *cm->fc; -#endif // CONFIG_NO_FRAME_CONTEXT_SIGNALING - } -#endif // CONFIG_NO_FRAME_CONTEXT_SIGNALING + av1_setup_frame_contexts(cm); // prev_mip will only be allocated in encoder. if (frame_is_intra_only(cm) && cm->prev_mip && !cm->frame_parallel_decode)
diff --git a/av1/common/entropymode.h b/av1/common/entropymode.h index 618b86d..508f46a 100644 --- a/av1/common/entropymode.h +++ b/av1/common/entropymode.h
@@ -580,6 +580,7 @@ av1_switchable_restore_tree[TREE_SIZE(RESTORE_SWITCHABLE_TYPES)]; #endif // CONFIG_LOOP_RESTORATION +void av1_setup_frame_contexts(struct AV1Common *cm); void av1_setup_past_independence(struct AV1Common *cm); void av1_adapt_intra_frame_probs(struct AV1Common *cm);
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c index 3cd10f4..fc6852d 100644 --- a/av1/decoder/decodeframe.c +++ b/av1/decoder/decodeframe.c
@@ -3207,18 +3207,9 @@ xd->bd = (int)cm->bit_depth; #if CONFIG_Q_ADAPT_PROBS - av1_default_coef_probs(cm); - if (cm->frame_type == KEY_FRAME || cm->error_resilient_mode || - cm->reset_frame_context == RESET_FRAME_CONTEXT_ALL) { - for (i = 0; i < FRAME_CONTEXTS; ++i) cm->frame_contexts[i] = *cm->fc; - } else if (cm->reset_frame_context == RESET_FRAME_CONTEXT_CURRENT) { -#if CONFIG_NO_FRAME_CONTEXT_SIGNALING - if (cm->frame_refs[0].idx <= 0) { - cm->frame_contexts[cm->frame_refs[0].idx] = *cm->fc; - } -#else - cm->frame_contexts[cm->frame_context_idx] = *cm->fc; -#endif // CONFIG_NO_FRAME_CONTEXT_SIGNALING + if (frame_is_intra_only(cm) || cm->error_resilient_mode) { + av1_default_coef_probs(cm); + av1_setup_frame_contexts(cm); } #endif // CONFIG_Q_ADAPT_PROBS
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c index d9104f7..b941dc8 100644 --- a/av1/encoder/encoder.c +++ b/av1/encoder/encoder.c
@@ -4862,20 +4862,8 @@ // Base q-index may have changed, so we need to assign proper default coef // probs before every iteration. if (frame_is_intra_only(cm) || cm->error_resilient_mode) { - int i; av1_default_coef_probs(cm); - if (cm->frame_type == KEY_FRAME || cm->error_resilient_mode || - cm->reset_frame_context == RESET_FRAME_CONTEXT_ALL) { - for (i = 0; i < FRAME_CONTEXTS; ++i) cm->frame_contexts[i] = *cm->fc; - } else if (cm->reset_frame_context == RESET_FRAME_CONTEXT_CURRENT) { -#if CONFIG_NO_FRAME_CONTEXT_SIGNALING - if (cm->frame_refs[0].idx >= 0) { - cm->frame_contexts[cm->frame_refs[0].idx] = *cm->fc; - } -#else - cm->frame_contexts[cm->frame_context_idx] = *cm->fc; -#endif - } + av1_setup_frame_contexts(cm); } #endif // CONFIG_Q_ADAPT_PROBS