Fix: Make CONFIG_REFERENCE_BUFFER and CONFIG_EXT_REFS work together
BUG=aomedia:115
Change-Id: If67821ed084b01f26287ac5e032d4f5fd5a83024
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 8366ba2..d3dfcb2 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -3891,6 +3891,18 @@
aom_wb_write_bit(wb, 1); // show_existing_frame
aom_wb_write_literal(wb, cpi->existing_fb_idx_to_show, 3);
+#if CONFIG_REFERENCE_BUFFER
+ if (cpi->seq_params.frame_id_numbers_present_flag) {
+ int frame_id_len = cpi->seq_params.frame_id_length_minus7 + 7;
+ int display_frame_id = cm->ref_frame_id[cpi->existing_fb_idx_to_show];
+ aom_wb_write_literal(wb, display_frame_id, frame_id_len);
+ /* Add a zero byte to prevent emulation of superframe marker */
+ /* Same logic as when when terminating the entropy coder */
+ /* Consider to have this logic only one place */
+ aom_wb_write_literal(wb, 0, 8);
+ }
+#endif
+
return;
} else {
#endif // CONFIG_EXT_REFS
@@ -3906,8 +3918,8 @@
#if CONFIG_REFERENCE_BUFFER
cm->invalid_delta_frame_id_minus1 = 0;
if (cpi->seq_params.frame_id_numbers_present_flag) {
- int FidLen = cpi->seq_params.frame_id_length_minus7 + 7;
- aom_wb_write_literal(wb, cm->current_frame_id, FidLen);
+ int frame_id_len = cpi->seq_params.frame_id_length_minus7 + 7;
+ aom_wb_write_literal(wb, cm->current_frame_id, frame_id_len);
}
#endif
@@ -3975,16 +3987,17 @@
#if CONFIG_REFERENCE_BUFFER
if (cpi->seq_params.frame_id_numbers_present_flag) {
int i = get_ref_frame_map_idx(cpi, ref_frame);
- int FidLen = cpi->seq_params.frame_id_length_minus7 + 7;
- int DiffLen = cpi->seq_params.delta_frame_id_length_minus2 + 2;
+ int frame_id_len = cpi->seq_params.frame_id_length_minus7 + 7;
+ int diff_len = cpi->seq_params.delta_frame_id_length_minus2 + 2;
int delta_frame_id_minus1 =
- ((cm->current_frame_id - cm->ref_frame_id[i] + (1 << FidLen)) %
- (1 << FidLen)) -
+ ((cm->current_frame_id - cm->ref_frame_id[i] +
+ (1 << frame_id_len)) %
+ (1 << frame_id_len)) -
1;
if (delta_frame_id_minus1 < 0 ||
- delta_frame_id_minus1 >= (1 << DiffLen))
+ delta_frame_id_minus1 >= (1 << diff_len))
cm->invalid_delta_frame_id_minus1 = 1;
- aom_wb_write_literal(wb, delta_frame_id_minus1, DiffLen);
+ aom_wb_write_literal(wb, delta_frame_id_minus1, diff_len);
}
#endif
}