rtc-svc: Reset ref_map_idx for references not used For layered rtc coding, with the set_ref_frame_config: for a reference not used reset its ref_map_idx to the first reference used. Bug: 362123224 Change-Id: I39a0e57b5d497b60179be4eeaed3cab924a493c4
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c index 9d66048..93bc505 100644 --- a/av1/encoder/bitstream.c +++ b/av1/encoder/bitstream.c
@@ -3101,12 +3101,33 @@ const int gld_ref = get_ref_frame_map_idx(cm, GOLDEN_FRAME); aom_wb_write_literal(wb, gld_ref, REF_FRAMES_LOG2); } - + int first_ref_map_idx = INVALID_IDX; + if (cpi->ppi->rtc_ref.set_ref_frame_config) { + for (ref_frame = LAST_FRAME; ref_frame <= ALTREF_FRAME; ++ref_frame) { + if (cpi->ppi->rtc_ref.reference[ref_frame - 1] == 1) { + first_ref_map_idx = cpi->ppi->rtc_ref.ref_idx[ref_frame - 1]; + break; + } + } + } for (ref_frame = LAST_FRAME; ref_frame <= ALTREF_FRAME; ++ref_frame) { assert(get_ref_frame_map_idx(cm, ref_frame) != INVALID_IDX); - if (!current_frame->frame_refs_short_signaling) - aom_wb_write_literal(wb, get_ref_frame_map_idx(cm, ref_frame), - REF_FRAMES_LOG2); + if (!current_frame->frame_refs_short_signaling) { + if (cpi->ppi->rtc_ref.set_ref_frame_config && + first_ref_map_idx != INVALID_IDX && + !seq_params->order_hint_info.enable_order_hint) { + // For the usage of set_ref_frame_config: + // for any reference not used set their ref_map_idx + // to the first used reference. + const int map_idx = cpi->ppi->rtc_ref.reference[ref_frame - 1] + ? get_ref_frame_map_idx(cm, ref_frame) + : first_ref_map_idx; + aom_wb_write_literal(wb, map_idx, REF_FRAMES_LOG2); + } else { + aom_wb_write_literal(wb, get_ref_frame_map_idx(cm, ref_frame), + REF_FRAMES_LOG2); + } + } if (seq_params->frame_id_numbers_present_flag) { int i = get_ref_frame_map_idx(cm, ref_frame); int frame_id_len = seq_params->frame_id_length;