[NORMATIVE] Remove reset_decoder_state signaling FWD_KF previously explicitly signal the one-bit symbol of reset_decoder_state. However, this tool has been redefined, that only frames of KEY_FRAME types, not just INTRA_ONLY, can be coded as no-show frame and buffered for the use of forward key framnes. Hence, when show_existing_frame == 1, if the frame-to-show frame points to a buffered identified as KEY_FRAME, the a forward key frame can be identified as used. Hence, there is no need to signal the status of reset_decoder_state, rather, its value can be derived and auto-filled. BUG=aomedia:1427 Change-Id: Ife1c2a7f24b19073d6b809d524debae7fa4cacdd
diff --git a/av1/common/onyxc_int.h b/av1/common/onyxc_int.h index 23ec3ff..12ff735 100644 --- a/av1/common/onyxc_int.h +++ b/av1/common/onyxc_int.h
@@ -166,6 +166,7 @@ hash_table hash_table; #endif uint8_t intra_only; + FRAME_TYPE frame_type; // The Following variables will only be used in frame parallel decode. // frame_worker_owner indicates which FrameWorker owns this buffer. NULL means
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c index 9a10693..e5eb2b5 100644 --- a/av1/decoder/decodeframe.c +++ b/av1/decoder/decodeframe.c
@@ -2700,9 +2700,7 @@ } ref_cnt_fb(frame_bufs, &cm->new_fb_idx, frame_to_show); #if CONFIG_FWD_KF - // TODO(zoeliu@google.com): To explore whether reset_decoder_state is only - // present for INTRA_ONLY_FRAME. - const int is_intra_only = frame_bufs[frame_to_show].intra_only; + cm->reset_decoder_state = frame_bufs[frame_to_show].frame_type == KEY_FRAME; #endif // CONFIG_FWD_KF unlock_buffer_pool(pool); @@ -2719,13 +2717,7 @@ #endif #if CONFIG_FWD_KF - cm->reset_decoder_state = aom_rb_read_bit(rb); if (cm->reset_decoder_state) { - if (!is_intra_only) { - aom_internal_error( - &cm->error, AOM_CODEC_CORRUPT_FRAME, - "Decoder reset on non-intra-only show existing frame"); - } show_existing_frame_reset(pbi); } else { #endif // CONFIG_FWD_KF @@ -3052,6 +3044,7 @@ if (cm->frame_type != S_FRAME) av1_setup_frame_sign_bias(cm); cm->cur_frame->intra_only = cm->frame_type == KEY_FRAME || cm->intra_only; + cm->cur_frame->frame_type = cm->frame_type; #if CONFIG_REFERENCE_BUFFER if (cm->seq_params.frame_id_numbers_present_flag) {