Make ext_tile compatible with reference_buffer
In ext_tile experiment, when cm->large_scale_tile is 1, prev_frame_id can be
the same as current_frame_id, which is prohibited in reference_buffer
experiment and causes "CORRUPT_FRAME" error to be reported.
In this patch, enable/disable reference_buffer according to large_scale_tile
value, and thus make these 2 experiments compatible.
Change-Id: If64943acb91e7a7b859db4e2ac62581e9b53ef85
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index c9996c6..bcb95d8 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -3561,7 +3561,6 @@
static void write_tile_info(const AV1_COMMON *const cm,
struct aom_write_bit_buffer *wb) {
#if CONFIG_EXT_TILE
- aom_wb_write_literal(wb, cm->large_scale_tile, 1);
if (cm->large_scale_tile) {
const int tile_width =
ALIGN_POWER_OF_TWO(cm->tile_width, cm->mib_size_log2) >>
@@ -4165,9 +4164,17 @@
}
#if CONFIG_REFERENCE_BUFFER
-void write_sequence_header(SequenceHeader *seq_params) {
+void write_sequence_header(
+#if CONFIG_EXT_TILE
+ AV1_COMMON *const cm,
+#endif // CONFIG_EXT_TILE
+ SequenceHeader *seq_params) {
/* Placeholder for actually writing to the bitstream */
- seq_params->frame_id_numbers_present_flag = FRAME_ID_NUMBERS_PRESENT_FLAG;
+ seq_params->frame_id_numbers_present_flag =
+#if CONFIG_EXT_TILE
+ cm->large_scale_tile ? 0 :
+#endif // CONFIG_EXT_TILE
+ FRAME_ID_NUMBERS_PRESENT_FLAG;
seq_params->frame_id_length_minus7 = FRAME_ID_LENGTH_MINUS7;
seq_params->delta_frame_id_length_minus2 = DELTA_FRAME_ID_LENGTH_MINUS2;
}
@@ -4206,13 +4213,21 @@
#if CONFIG_REFERENCE_BUFFER
/* TODO: Move outside frame loop or inside key-frame branch */
- write_sequence_header(&cpi->seq_params);
+ write_sequence_header(
+#if CONFIG_EXT_TILE
+ cm,
+#endif // CONFIG_EXT_TILE
+ &cpi->seq_params);
#endif
aom_wb_write_literal(wb, AOM_FRAME_MARKER, 2);
write_profile(cm->profile, wb);
+#if CONFIG_EXT_TILE
+ aom_wb_write_literal(wb, cm->large_scale_tile, 1);
+#endif // CONFIG_EXT_TILE
+
#if CONFIG_EXT_REFS
// NOTE: By default all coded frames to be used as a reference
cm->is_reference_frame = 1;